buildr 1.2.6 → 1.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG CHANGED
@@ -1,3 +1,14 @@
1
+ 1.2.7 (10/29/2007)
2
+ * Added: You can create an artifact from a given file using artifact(<spec>).from(<path>). You can then install it into the local repository or upload it to the release server using install(<artifacts>) and upload(<artifacts>). (Idea: Shane Witbeck and Tommy Mason).
3
+ * Added: ANTLR support.
4
+ * Changed: Speed boost to ZIP packaging.
5
+ * Changed: RjbWrapper is now JavaWrapper, and revised to nicely support JRuby. A few other minor tweaks to make JRuby support possible in the future. (Travis Tilley)
6
+ * Changed: JUnit now runs tests with clonevm false by default, you can change with test.using :clonevm=>true (Karel)
7
+ * Changed: JUnit now switches over to project's base directory.
8
+ * Changed: package(:war).with(:libs, :classes) uses only these specified libs and class directories, replacing any previous value.
9
+ * Fixed: Jetty task no longer sets "log4j.configuration" system property
10
+ * Fixed: release task didn't work
11
+
1
12
  1.2.6 (9/26/2007)
2
13
  * Added: Option for setting environment name (-e) and attribute accessor (Buildr.environment). Default taken from BUILDR_ENV environment variable.
3
14
  * Added: AAR packaging for Axis2 service archives (Alex Boisvert)
data/Rakefile CHANGED
@@ -5,38 +5,63 @@ require "spec/rake/spectask"
5
5
 
6
6
 
7
7
  # Gem specification comes first, other tasks rely on it.
8
- spec = Gem::Specification.new do |spec|
9
- spec.name = "buildr"
10
- spec.version = File.read(__FILE__.pathmap("%d/lib/buildr.rb")).scan(/VERSION\s*=\s*(['"])(.*)\1/)[0][1]
11
- spec.author = "Assaf Arkin"
12
- spec.email = "arkin@intalio.com"
13
- spec.homepage = "http://#{spec.name}.rubyforge.org"
14
- spec.summary = "A build system that doesn't suck"
15
- spec.files = FileList["lib/**/*", "CHANGELOG", "README", "LICENSE", "Rakefile"].collect
16
- spec.require_path = "lib"
17
- spec.autorequire = "buildr.rb"
18
- spec.has_rdoc = true
19
- spec.extra_rdoc_files = ["README", "CHANGELOG", "LICENSE"]
20
- spec.rdoc_options << "--title" << "Buildr -- #{spec.summary}" <<
21
- "--main" << "README" << "--line-numbers" << "-inline-source"
22
- spec.rubyforge_project = "buildr"
23
-
24
- spec.bindir = "bin" # Use these for applications.
25
- spec.executables = ["buildr"]
26
-
27
- # Tested against these dependencies.
28
- spec.add_dependency "rake", "= 0.7.3"
29
- spec.add_dependency "facets", "= 1.8.54"
30
- spec.add_dependency "builder", "= 2.1.2"
31
- spec.add_dependency "net-ssh", "= 1.1.2"
32
- spec.add_dependency "net-sftp", "= 1.1.0"
33
- spec.add_dependency "rubyzip", "= 0.9.1"
34
- spec.add_dependency "highline", "= 1.4.0"
35
- spec.add_dependency "rjb", "= 1.0.6"
36
- spec.add_dependency "Antwrap", "= 0.6.0"
37
- spec.add_dependency "rspec", "= 1.0.8"
38
- spec.add_dependency "xml-simple", "= 1.0.11"
39
- spec.add_dependency "archive-tar-minitar", "= 0.5.1"
8
+ def specify(platform)
9
+ Gem::Specification.new do |spec|
10
+ spec.name = "buildr"
11
+ spec.version = File.read(__FILE__.pathmap("%d/lib/buildr.rb")).scan(/VERSION\s*=\s*(['"])(.*)\1/)[0][1]
12
+ spec.author = "Assaf Arkin"
13
+ spec.email = "arkin@intalio.com"
14
+ spec.homepage = "http://#{spec.name}.rubyforge.org"
15
+ spec.summary = "A build system that doesn't suck"
16
+ spec.files = FileList["lib/**/*", "CHANGELOG", "README", "LICENSE", "Rakefile"].collect
17
+ spec.require_path = "lib"
18
+ spec.autorequire = "buildr.rb"
19
+ spec.has_rdoc = true
20
+ spec.extra_rdoc_files = ["README", "CHANGELOG", "LICENSE"]
21
+ spec.rdoc_options << "--title" << "Buildr -- #{spec.summary}" <<
22
+ "--main" << "README" << "--line-numbers" << "-inline-source"
23
+ spec.rubyforge_project = "buildr"
24
+
25
+ spec.bindir = "bin" # Use these for applications.
26
+ spec.executables = ["buildr"]
27
+
28
+ # Tested against these dependencies.
29
+ spec.add_dependency "rake", "= 0.7.3"
30
+ spec.add_dependency "facets", "= 1.8.54"
31
+ spec.add_dependency "builder", "= 2.1.2"
32
+ spec.add_dependency "net-ssh", "= 1.1.2"
33
+ spec.add_dependency "net-sftp", "= 1.1.0"
34
+ spec.add_dependency "rubyzip", "= 0.9.1"
35
+ spec.add_dependency "highline", "= 1.4.0"
36
+ spec.add_dependency "Antwrap", "= 0.6.0"
37
+ spec.add_dependency "rspec", "= 1.0.8"
38
+ spec.add_dependency "xml-simple", "= 1.0.11"
39
+ spec.add_dependency "archive-tar-minitar", "= 0.5.1"
40
+
41
+ spec.platform = platform
42
+
43
+ yield spec if block_given?
44
+ end
45
+ end
46
+
47
+ spec = specify(Gem::Platform::RUBY) { |spec| spec.add_dependency "rjb", "= 1.0.6" }
48
+ jruby_spec = specify('java')
49
+ package = Rake::GemPackageTask.new(spec) do |pkg|
50
+ pkg.need_tar = true
51
+ pkg.need_zip = true
52
+ end
53
+ jruby_package = Rake::GemPackageTask.new(jruby_spec)
54
+
55
+ desc "Install the package locally"
56
+ task :install=>:package do |task|
57
+ install = RUBY_PLATFORM == 'java' ? jruby_package : package
58
+ system 'gem', 'install', File.expand_path(install.gem_file, install.package_dir)
59
+ end
60
+
61
+ desc "Uninstall previously installed packaged"
62
+ task :uninstall do |task|
63
+ install = RUBY_PLATFORM == 'java' ? jruby_package : package
64
+ system "gem", "uninstall", install.name, "-v", install.version.to_s
40
65
  end
41
66
 
42
67
 
@@ -55,23 +80,6 @@ Spec::Rake::SpecTask.new(:rcov) do |task|
55
80
  end
56
81
 
57
82
 
58
- # Packaging and local installation.
59
- Rake::GemPackageTask.new(spec) do |pkg|
60
- pkg.need_tar = true
61
- pkg.need_zip = true
62
- end
63
-
64
- desc "Install the package locally"
65
- task :install=>:package do |task|
66
- system "gem", "install", "pkg/#{spec.name}-#{spec.version}.gem"
67
- end
68
-
69
- desc "Uninstall previously installed packaged"
70
- task :uninstall do |task|
71
- system "gem", "uninstall", spec.name, "-v", spec.version.to_s
72
- end
73
-
74
-
75
83
  # Documentation.
76
84
  begin
77
85
  require "rake/rdoctask"
@@ -124,7 +132,6 @@ rescue LoadError=>error
124
132
  end
125
133
 
126
134
 
127
-
128
135
  # Commit to SVN, upload and do the release cycle.
129
136
  namespace :svn do
130
137
  task :clean? do |task|
@@ -159,7 +166,7 @@ namespace :upload do
159
166
  fail "No changeset found for version #{spec.version}" unless current
160
167
 
161
168
  puts "Uploading #{spec.name} #{spec.version}"
162
- files = %w( gem tgz zip ).map { |ext| "pkg/#{spec.name}-#{spec.version}.#{ext}" }
169
+ files = Dir.glob('pkg/*.{gem,tgz,zip}')
163
170
  rubyforge = RubyForge.new
164
171
  rubyforge.login
165
172
  File.open(".changes", 'w'){|f| f.write(current)}
@@ -203,7 +210,6 @@ desc "Upload release to RubyForge including docs, tag SVN"
203
210
  task :release=>[ "release:ready?", "release:meat", "release:post" ]
204
211
 
205
212
 
206
-
207
213
  # Misc, may not survive so don't rely on these.
208
214
  task :report do |task|
209
215
  puts "#{spec.name} #{spec.version}"
@@ -1,3 +1,9 @@
1
+ # in order to work around a bug in jruby (1.0.1 and trunk as of oct11, 2007)
2
+ # needle and net/ssh need to be loaded before -anything- else. please see
3
+ # http://jira.codehaus.org/browse/JRUBY-1188 for more info.
4
+ require 'needle'
5
+ require 'net/ssh'
6
+
1
7
  require "highline"
2
8
  require "highline/import"
3
9
  # &:symbol goodness.
@@ -24,7 +30,7 @@ require "builder"
24
30
 
25
31
 
26
32
  module Buildr
27
- VERSION = "1.2.6".freeze # unless const_defined?(:VERSION)
33
+ VERSION = "1.2.7".freeze # unless const_defined?(:VERSION)
28
34
  end
29
35
 
30
36
 
@@ -0,0 +1,52 @@
1
+ require "java/java"
2
+
3
+ module Buildr
4
+ # Provides ANTLR grammar generation tasks. Require explicitly using <code>require "buildr/antlr"</code>.
5
+ module ANTLR
6
+ REQUIRES = [ "org.antlr:antlr:jar:3.0", "antlr:antlr:jar:2.7.7", "org.antlr:stringtemplate:jar:3.0" ]
7
+
8
+ Java.wrapper.classpath << REQUIRES
9
+
10
+ class << self
11
+ def antlr(*args)
12
+ options = Hash === args.last ? args.pop : {}
13
+ rake_check_options options, :output, :token
14
+
15
+ args = args.flatten.map(&:to_s).collect { |f| File.directory?(f) ? FileList[f + "/**/*.g"] : f }.flatten
16
+ args = ["-o", options[:output]] + args if options[:output]
17
+ if options[:token]
18
+ # antlr expects the token directory to exist when it starts
19
+ mkdir_p options[:token]
20
+ args = ["-lib", options[:token]] + args
21
+ end
22
+ Java.wrapper do |wrapper|
23
+ antlr_class = wrapper.import("org.antlr.Tool")
24
+ antlr_tool = antlr_class.new_with_sig("[Ljava.lang.String;", args)
25
+ antlr_tool.process
26
+ #wrapper.import("org.antlr.Tool").main(args) == 0 or
27
+ # fail "Failed to run ANTLR, see errors above."
28
+ end
29
+ end
30
+ end
31
+
32
+ def antlr(*args)
33
+ if Hash === args.last
34
+ options = args.pop
35
+ in_package = options[:in_package].split(".")
36
+ token = options[:token].split(".") if options[:token]
37
+ else
38
+ in_package = []; token = nil
39
+ end
40
+ file(path_to(:target, "generated/antlr")=>args.flatten) do |task|
41
+ args = {:output=>File.join(task.name, in_package)}
42
+ args.merge!({:token=>File.join(task.name, token)}) if token
43
+ ANTLR.antlr task.prerequisites, args
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ class Project
50
+ include ANTLR
51
+ end
52
+ end
@@ -6,7 +6,7 @@ module Buildr
6
6
 
7
7
  REQUIRES = [ "net.java.dev.javacc:javacc:jar:4.0", "net.java.dev.javacc:javacc:jar:4.0" ]
8
8
 
9
- Java.rjb.classpath << REQUIRES
9
+ Java.wrapper.classpath << REQUIRES
10
10
 
11
11
  class << self
12
12
 
@@ -16,8 +16,8 @@ module Buildr
16
16
 
17
17
  args = args.flatten.map(&:to_s).collect { |f| File.directory?(f) ? FileList[f + "/**/*.jj"] : f }.flatten
18
18
  args.unshift "-OUTPUT_DIRECTORY=#{options[:output]}" if options[:output]
19
- Java.rjb do |rjb|
20
- rjb.import("org.javacc.parser.Main").mainProgram(args) == 0 or
19
+ Java.wrapper do |jw|
20
+ jw.import("org.javacc.parser.Main").mainProgram(args) == 0 or
21
21
  fail "Failed to run JavaCC, see errors above."
22
22
  end
23
23
  end
@@ -29,8 +29,8 @@ module Buildr
29
29
  args = args.flatten.map(&:to_s).collect { |f| File.directory?(f) ? FileList[f + "**/*.jjt"] : f }.flatten
30
30
  args.unshift "-OUTPUT_DIRECTORY=#{options[:output]}" if options[:output]
31
31
  args.unshift "-BUILD_NODE_FILES=#{options[:build_node_files] || false}"
32
- Java.rjb do |rjb|
33
- rjb.import("org.javacc.jjtree.JJTree").new.main(args) == 0 or
32
+ Java.wrapper do |jw|
33
+ jw.import("org.javacc.jjtree.JJTree").new.main(args) == 0 or
34
34
  fail "Failed to run JJTree, see errors above."
35
35
  end
36
36
  end
@@ -36,7 +36,7 @@ module Buildr
36
36
  "org.mortbay.jetty:servlet-api-2.5:jar:#{VERSION}", "org.slf4j:slf4j-api:jar:#{SLF4J_VERSION}",
37
37
  "org.slf4j:slf4j-simple:jar:#{SLF4J_VERSION}", "org.slf4j:jcl104-over-slf4j:jar:#{SLF4J_VERSION}" ]
38
38
 
39
- Java.rjb.onload { |rjb| rjb.classpath << REQUIRES << File.join(__DIR__, "jetty") }
39
+ Java.wrapper.setup { |jw| jw.classpath << REQUIRES << File.join(__DIR__, "jetty") }
40
40
 
41
41
  # Default URL for Jetty (change with options.jetty.url).
42
42
  URL = "http://localhost:8080"
@@ -74,13 +74,11 @@ module Buildr
74
74
  # invoke the #use task instead.
75
75
  def start(sync = nil)
76
76
  begin
77
- Java.rjb do
78
- puts "RJB classpath #{Java.rjb.classpath.inspect}"
79
- props = Rjb::import('java.lang.System').getProperties
80
- props.setProperty("log4j.configuration", "file:./log4j.properties")
77
+ Java.wrapper do |jw|
78
+ puts "classpath #{jw.classpath.inspect}"
81
79
  port = URI.parse(url).port
82
80
  puts "Starting Jetty at http://localhost:#{port}" if verbose
83
- jetty = Rjb::import("JettyWrapper").new(port)
81
+ jetty = jw.import("JettyWrapper").new(port)
84
82
  sync << "Started" if sync
85
83
  sleep # Forever
86
84
  end
@@ -17,7 +17,7 @@ module Buildr
17
17
  "org.apache.geronimo.specs:geronimo-jta_1.0.1B_spec:jar:1.0",
18
18
  "net.sourceforge.serp:serp:jar:1.11.0" ]
19
19
 
20
- Java.rjb.classpath << REQUIRES
20
+ Java.wrapper.classpath << REQUIRES
21
21
 
22
22
  class << self
23
23
 
@@ -44,8 +44,8 @@ module Buildr
44
44
  if use_fsc
45
45
  system ([ENV["SCALA_HOME"]+"/bin/fsc"] + cmd_args).join(" ")
46
46
  else
47
- Java.rjb do |rjb|
48
- rjb.import("scala.tools.nsc.Main").main(cmd_args) == 0 or
47
+ Java.wrapper do |jw|
48
+ jw.import("scala.tools.nsc.Main").main(cmd_args) == 0 or
49
49
  fail "Failed to compile, see errors above"
50
50
  end
51
51
  end
@@ -113,9 +113,11 @@ module Buildr
113
113
  # Make a release.
114
114
  def make()
115
115
  check
116
- options = ['--buildfile', filename, 'DEBUG=no']
117
- options << '--environment' << Buildr.environment unless Buildr.environment.to_s.empty?
118
- version = with_next_version { |filename, version| sh "#{command} clean upload #{option.join(' ')}" }
116
+ version = with_next_version do |filename, version|
117
+ options = ['--buildfile', filename, 'DEBUG=no']
118
+ options << '--environment' << Buildr.environment unless Buildr.environment.to_s.empty?
119
+ sh "#{command} clean upload #{options.join(' ')}"
120
+ end
119
121
  tag version
120
122
  commit version + "-SNAPSHOT"
121
123
  end
@@ -12,7 +12,7 @@ module Buildr
12
12
 
13
13
  # Libraries used by Ant.
14
14
  REQUIRES = [ "org.apache.ant:ant:jar:#{VERSION}", "org.apache.ant:ant-launcher:jar:#{VERSION}", "xerces:xercesImpl:jar:2.6.2" ]
15
- Java.rjb.onload { |rjb| rjb.classpath << REQUIRES }
15
+ Java.wrapper.setup { |jw| jw.classpath << REQUIRES }
16
16
 
17
17
  class << self
18
18
 
@@ -49,7 +49,7 @@ module Buildr
49
49
  warn_deprecated "Options are ignored." if options
50
50
  options = { :name=>name, :basedir=>Dir.pwd, :declarative=>true }
51
51
  options.merge!(:logger=> Logger.new(STDOUT), :loglevel=> Logger::DEBUG) if Rake.application.options.trace
52
- Java.rjb do
52
+ Java.wrapper do
53
53
  AntProject.new(options).tap do |project|
54
54
  # Set Ant logging level to debug (--trace), info (default) or error only (--quiet).
55
55
  project.project.getBuildListeners().get(0).
@@ -6,7 +6,6 @@ module Buildr
6
6
 
7
7
  desc "Download all artifacts"
8
8
  task "artifacts"
9
- task "artifacts:refresh"
10
9
 
11
10
  # Mixin with a task to make it behave like an artifact. Implemented by the packaging tasks.
12
11
  #
@@ -255,6 +254,34 @@ module Buildr
255
254
  end
256
255
  end
257
256
 
257
+ # :call-seq:
258
+ # from(path) => self
259
+ #
260
+ # Use this when you want to install or upload an artifact from a given file, for example:
261
+ # test = artifact('group:id:jar:1.0').from('test.jar')
262
+ # install test
263
+ # See also Buildr#install and Buildr#deploy.
264
+ def from(path)
265
+ path = File.expand_path(path.to_s)
266
+ enhance [path] do
267
+ verbose false do
268
+ mkpath File.dirname(name)
269
+ pom.invoke unless type == :pom
270
+ cp path, name
271
+ puts "Installed #{path} as #{to_spec}" if verbose
272
+ end
273
+ end
274
+ unless type == :pom
275
+ pom.enhance do
276
+ verbose false do
277
+ mkpath File.dirname(pom.name)
278
+ File.open(pom.name, 'w') { |file| file.write pom.pom_xml }
279
+ end
280
+ end
281
+ end
282
+ self
283
+ end
284
+
258
285
  protected
259
286
 
260
287
  # :call-seq:
@@ -586,6 +613,48 @@ module Buildr
586
613
  args.flatten.map { |id| artifact :group=>hash[:under], :version=>hash[:version], :id=>id }
587
614
  end
588
615
 
616
+ # :call-seq:
617
+ # install(artifacts)
618
+ #
619
+ # Installs the specified artifacts in the local repository as part of the install task.
620
+ #
621
+ # You can use this to install various files in the local repository, for example:
622
+ # install artifact('group:id:jar:1.0').from('some_jar.jar')
623
+ # $ buildr install
624
+ def install(*args, &block)
625
+ artifacts = artifacts(args)
626
+ raise ArgumentError, 'This method can only install artifacts' unless artifacts.all? { |f| f.respond_to?(:to_spec) }
627
+ all = (artifacts + artifacts.map { |artifact| artifact.pom }).uniq
628
+ task('install').tap do |task|
629
+ task.enhance all, &block
630
+ task 'uninstall' do
631
+ verbose false do
632
+ all.map(&:to_s ).each { |file| rm file if File.exist?(file) }
633
+ end
634
+ end
635
+ end
636
+ end
637
+
638
+ # :call-seq:
639
+ # upload(artifacts)
640
+ #
641
+ # Uploads the specified artifacts to the release server as part of the upload task.
642
+ #
643
+ # You can use this to upload various files to the release server, for example:
644
+ # upload artifact('group:id:jar:1.0').from('some_jar.jar')
645
+ # $ buildr upload
646
+ def upload(*args, &block)
647
+ artifacts = artifacts(args)
648
+ raise ArgumentError, 'This method can only upload artifacts' unless artifacts.all? { |f| f.respond_to?(:to_spec) }
649
+ all = (artifacts + artifacts.map { |artifact| artifact.pom }).uniq
650
+ task('upload').tap do |task|
651
+ task.enhance &block if block
652
+ task.enhance all do
653
+ all.each { |artifact| artifact.upload }
654
+ end
655
+ end
656
+ end
657
+
589
658
  # *Deprecated* For artifact, call it's upload method; for anything else, use URI.upload.
590
659
  def deploy(*args)
591
660
  warn_deprecated "If it's an artifact, call it's upload method directly. Otherwise, use URI.upload."
@@ -1,4 +1,5 @@
1
- require "rjb"
1
+ require "rjb" if RUBY_PLATFORM != 'java'
2
+ require "java" if RUBY_PLATFORM == 'java'
2
3
  require "core/project"
3
4
 
4
5
  module Buildr
@@ -9,7 +10,7 @@ module Buildr
9
10
  # Options accepted by #java and other methods here.
10
11
  JAVA_OPTIONS = [ :verbose, :classpath, :name, :java_args, :properties ]
11
12
 
12
- # Returned by Java#rjb, you can use this object to set the RJB classpath, specify blocks to be invoked
13
+ # Returned by Java#wrapper, you can use this object to set the classpath, specify blocks to be invoked
13
14
  # after loading RJB, and load RJB itself.
14
15
  #
15
16
  # RJB can be loaded exactly once, and once loaded, you cannot change its classpath. Of course you can
@@ -17,52 +18,77 @@ module Buildr
17
18
  # classpath dependencies you need in advance, before loading it.
18
19
  #
19
20
  # For that reason, you should not load RJB until the moment you need it. You can call #load or call
20
- # Java#rjb with a block. For the same reason, you may need to specify code to execute when loading
21
- # (see #onload).
22
- class RjbWrapper #:nodoc:
21
+ # Java#wrapper with a block. For the same reason, you may need to specify code to execute when loading
22
+ # (see #setup).
23
+ #
24
+ # JRuby doesn't have the above limitation, but uses the same API regardless.
25
+ class JavaWrapper #:nodoc:
23
26
 
24
27
  include Singleton
25
28
 
26
29
  def initialize() #:nodoc:
27
30
  @classpath = [Java.tools_jar].compact
28
- @onload = []
29
- onload do
30
- onload do
31
- classpath = Buildr.artifacts(@classpath).each { |task| task.invoke if task.respond_to?(:invoke) }.map(&:to_s)
32
- ::Rjb.load classpath.join(File::PATH_SEPARATOR), Buildr.options.java_args.flatten
31
+ @setup = []
32
+ setup do
33
+ setup do
34
+ classpath = Buildr.artifacts(@classpath).
35
+ each { |task| task.invoke if task.respond_to?(:invoke) }.
36
+ map(&:to_s)
37
+
38
+ if RUBY_PLATFORM != 'java'
39
+ ::Rjb.load classpath.join(File::PATH_SEPARATOR),
40
+ Buildr.options.java_args.flatten
41
+ else
42
+ classpath.each do |jlib|
43
+ require jlib
44
+ end
45
+ end
33
46
  end
34
47
  end
35
48
  end
36
49
 
37
- # The classpath used when loading RJB.
38
- attr_accessor :classpath
50
+ def classpath
51
+ if RUBY_PLATFORM == 'java'
52
+ # in order to get a complete picture, we need to add a few jars to the
53
+ # list.
54
+ java.lang.System.getProperty('java.class.path').split(':') +
55
+ @classpath
56
+ else
57
+ @classpath
58
+ end
59
+ end
60
+
61
+ attr_writer :classpath
39
62
 
40
- # :call-seq:
41
- # onload { |rjb| ... }
42
- #
43
- # Adds a block to call when loading RJB and returns self.
44
- #
45
- # You can only load RJB once, and you may need to do some tasks after the initial load.
46
- # For example, the Ant module requires Antwrap which can only be loaded after RJB.
47
- def onload(&block)
48
- @onload << block
63
+ def setup(&block)
64
+ @setup << block
49
65
  self
50
66
  end
51
67
 
52
- # :call-seq:
53
- # load()
54
- #
55
- # Loads RJB. You can also call Java#ejb with a block to get the same effect.
56
68
  def load()
57
- @onload.each { |block| block.call self }
58
- @onload.clear
69
+ @setup.each { |block| block.call self }
70
+ @setup.clear
71
+ end
72
+
73
+ def import(jlib)
74
+ if RUBY_PLATFORM == 'java'
75
+ Java.send(jlib)
76
+ else
77
+ ::Rjb.import jlib
78
+ end
59
79
  end
60
80
 
61
81
  def method_missing(sym, *args, &block) #:nodoc:
62
- ::Rjb.send sym, *args, &block
82
+ # these aren't the same, but depending on method_missing while
83
+ # supporting two unrelated systems is asking for trouble anyways.
84
+ if RUBY_PLATFORM == 'java'
85
+ Java.send sym, *args, &block
86
+ else
87
+ ::Rjb.send sym, *args, &block
88
+ end
63
89
  end
64
90
  end
65
-
91
+
66
92
  class << self
67
93
 
68
94
  # :call-seq:
@@ -74,7 +100,7 @@ module Buildr
74
100
  # puts Java.version
75
101
  # => 1.5.0_10
76
102
  def version()
77
- @version ||= Java.rjb { |rjb| rjb.import("java.lang.System").getProperty("java.version") }
103
+ @version ||= Java.wrapper { |jw| jw.import("java.lang.System").getProperty("java.version") }
78
104
  end
79
105
 
80
106
  # :call-seq:
@@ -160,8 +186,8 @@ module Buildr
160
186
  unless Rake.application.options.dryrun
161
187
  puts "Running apt" if verbose
162
188
  puts (["apt"] + cmd_args).join(" ") if Rake.application.options.trace
163
- Java.rjb do |rjb|
164
- rjb.import("com.sun.tools.apt.Main").process(cmd_args) == 0 or
189
+ Java.wrapper do |jw|
190
+ jw.import("com.sun.tools.apt.Main").process(cmd_args) == 0 or
165
191
  fail "Failed to process annotations, see errors above"
166
192
  end
167
193
  end
@@ -197,8 +223,8 @@ module Buildr
197
223
  unless Rake.application.options.dryrun
198
224
  puts "Compiling #{files.size} source files in #{name}" if verbose
199
225
  puts (["javac"] + cmd_args).join(" ") if Rake.application.options.trace
200
- Java.rjb do |rjb|
201
- rjb.import("com.sun.tools.javac.Main").compile(cmd_args) == 0 or
226
+ Java.wrapper do |jw|
227
+ jw.import("com.sun.tools.javac.Main").compile(cmd_args) == 0 or
202
228
  fail "Failed to compile, see errors above"
203
229
  end
204
230
  end
@@ -248,8 +274,8 @@ module Buildr
248
274
  unless Rake.application.options.dryrun
249
275
  puts "Generating Javadoc for #{name}" if verbose
250
276
  puts (["javadoc"] + cmd_args).join(" ") if Rake.application.options.trace
251
- Java.rjb do |rjb|
252
- rjb.import("com.sun.tools.javadoc.Main").execute(cmd_args) == 0 or
277
+ Java.wrapper do |jw|
278
+ jw.import("com.sun.tools.javadoc.Main").execute(cmd_args) == 0 or
253
279
  fail "Failed to generate Javadocs, see errors above"
254
280
  end
255
281
  end
@@ -292,27 +318,28 @@ module Buildr
292
318
 
293
319
 
294
320
  # :call-seq:
295
- # rjb() => RjbWrapper
296
- # rjb() { ... }
321
+ # wrapper() => JavaWrapper
322
+ # wrapper() { ... }
297
323
  #
298
- # This method can be used in two ways. Without a block, returns the RjbWrapper
299
- # object which you can use to configure the RJB classpath or call other RJB methods.
300
- # With a block, loads RJB and yields to the block, returning its result.
324
+ # This method can be used in two ways. Without a block, returns the
325
+ # JavaWrapper object which you can use to configure the classpath or call
326
+ # other methods. With a block, loads RJB or sets up JRuby and yields to
327
+ # the block, returning its result.
301
328
  #
302
329
  # For example:
303
- # Java.rjb.classpath << REQUIRES
304
- # Java.rjb.onload { require "antwrap" }
330
+ # Java.wrapper.classpath << REQUIRES
331
+ # Java.wrapper.setup { require "antwrap" }
305
332
  #
306
333
  # def execute(name, options)
307
334
  # options = options.merge(:name=>name, :base_dir=>Dir.pwd, :declarative=>true)
308
- # Java.rjb { AntProject.new(options) }
335
+ # Java.wrapper { AntProject.new(options) }
309
336
  # end
310
- def rjb()
337
+ def wrapper()
311
338
  if block_given?
312
- RjbWrapper.instance.load
313
- yield RjbWrapper.instance
339
+ JavaWrapper.instance.load
340
+ yield JavaWrapper.instance
314
341
  else
315
- RjbWrapper.instance
342
+ JavaWrapper.instance
316
343
  end
317
344
  end
318
345
 
@@ -21,7 +21,8 @@ module Buildr
21
21
  module WithManifest
22
22
 
23
23
  class << self
24
- protected
24
+ # jruby issue
25
+ #protected
25
26
  def included(mod)
26
27
  mod.alias_method_chain :initialize, :manifest
27
28
  end
@@ -161,11 +162,11 @@ module Buildr
161
162
  end
162
163
 
163
164
  def libs=(value) #:nodoc:
164
- @libs |= Buildr.artifacts(value)
165
+ @libs = Buildr.artifacts(value)
165
166
  end
166
167
 
167
168
  def classes=(value) #:nodoc:
168
- @classes |= [value].flatten.map { |dir| file(dir.to_s) }
169
+ @classes = [value].flatten.map { |dir| file(dir.to_s) }
169
170
  end
170
171
 
171
172
  end
@@ -85,7 +85,7 @@ module Buildr
85
85
  exclusions.find {|ex| dep.index("#{dep['groupdId'].first}:#{dep['artifactId'].first}:") == 0}
86
86
  } if exclusions
87
87
 
88
- [Artifact.to_spec(spec.except(:scope))] + transitive_deps
88
+ [Artifact.to_spec(spec)] + transitive_deps
89
89
  end
90
90
  }.flatten.compact.uniq_by{|spec| art = spec.split(':'); "#{art[0]}:#{art[1]}"}
91
91
 
@@ -369,7 +369,7 @@ module Buildr
369
369
  @failed_tests = send("#{framework}_run",
370
370
  :classes => classes,
371
371
  :classpath => @classpath + [compile.target],
372
- :properties => { "baseDir" => compile.target.to_s }.merge(options[:properties] || {}),
372
+ :properties => { 'baseDir' => compile.target.to_s }.merge(options[:properties] || {}),
373
373
  :environment=> options[:environment] || {},
374
374
  :java_args => options[:java_args] || Buildr.options.java_args)
375
375
  unless @failed_tests.empty?
@@ -395,7 +395,7 @@ module Buildr
395
395
  class Report
396
396
 
397
397
  # Ant-Trax required for running the JUnitReport task.
398
- Java.rjb.onload { |rjb| rjb.classpath << "org.apache.ant:ant-trax:jar:#{Ant::VERSION}" }
398
+ Java.wrapper.setup { |jw| jw.classpath << "org.apache.ant:ant-trax:jar:#{Ant::VERSION}" }
399
399
 
400
400
  # Parameters passed to the Ant JUnitReport task.
401
401
  attr_reader :params
@@ -447,7 +447,7 @@ module Buildr
447
447
  JUNIT_TESTS_PATTERN = [ "Test*", "*Test" ]
448
448
 
449
449
  # Ant-JUnit requires for JUnit and JUnit reports tasks.
450
- Java.rjb.onload { |rjb| rjb.classpath << "org.apache.ant:ant-junit:jar:#{Ant::VERSION}" }
450
+ Java.wrapper.setup { |jw| jw.classpath << "org.apache.ant:ant-junit:jar:#{Ant::VERSION}" }
451
451
 
452
452
  class << self
453
453
 
@@ -485,7 +485,7 @@ module Buildr
485
485
  else
486
486
  fail "Option fork must be :once, :each or false."
487
487
  end
488
- ant.junit forking.merge(:clonevm=>true) do
488
+ ant.junit forking.merge(:clonevm=>options[:clonevm] || false, :dir=>@project.path_to) do
489
489
  ant.classpath :path=>args[:classpath].map(&:to_s).each { |path| file(path).invoke }.join(File::PATH_SEPARATOR)
490
490
  args[:properties].each { |key, value| ant.sysproperty :key=>key, :value=>value }
491
491
  args[:environment].each { |key, value| ant.env :key=>key, :value=>value }
@@ -401,23 +401,30 @@ module Buildr
401
401
  private
402
402
 
403
403
  def create_from(file_map)
404
- Zip::ZipFile.open(name, Zip::ZipFile::CREATE) do |zip|
405
- zip.restore_permissions = true
404
+ Zip::ZipOutputStream.open name do |zip|
405
+ seen = {}
406
406
  mkpath = lambda do |dir|
407
- unless dir == "." || zip.find_entry(dir)
407
+ unless dir == "." || seen[dir]
408
408
  mkpath.call File.dirname(dir)
409
- zip.mkdir dir
409
+ zip.put_next_entry dir + '/'
410
+ seen[dir] = true
410
411
  end
411
412
  end
412
-
413
+
413
414
  file_map.each do |path, content|
414
415
  mkpath.call File.dirname(path)
415
416
  if content.respond_to?(:call)
416
- zip.get_output_stream(path) { |output| content.call(output) }
417
+ zip.put_next_entry path
418
+ content.call zip
417
419
  elsif content.nil? || File.directory?(content.to_s)
418
420
  mkpath.call path
419
421
  else
420
- zip.add path, content.to_s
422
+ zip.put_next_entry path
423
+ File.open content.to_s, "rb" do |is|
424
+ while data = is.read(4096)
425
+ zip << data
426
+ end
427
+ end
421
428
  end
422
429
  end
423
430
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: buildr
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.2.6
7
- date: 2007-09-26 00:00:00 -07:00
6
+ version: 1.2.7
7
+ date: 2007-10-29 00:00:00 -07:00
8
8
  summary: A build system that doesn't suck
9
9
  require_paths:
10
10
  - lib
@@ -53,6 +53,7 @@ files:
53
53
  - lib/buildr/cobertura.rb
54
54
  - lib/buildr/jdepend.rb
55
55
  - lib/buildr/openjpa.rb
56
+ - lib/buildr/antlr.rb
56
57
  - lib/buildr/jetty
57
58
  - lib/buildr/jetty/JettyWrapper.java
58
59
  - lib/buildr/jetty/JettyWrapper$1.class
@@ -156,15 +157,6 @@ dependencies:
156
157
  - !ruby/object:Gem::Version
157
158
  version: 1.4.0
158
159
  version:
159
- - !ruby/object:Gem::Dependency
160
- name: rjb
161
- version_requirement:
162
- version_requirements: !ruby/object:Gem::Version::Requirement
163
- requirements:
164
- - - "="
165
- - !ruby/object:Gem::Version
166
- version: 1.0.6
167
- version:
168
160
  - !ruby/object:Gem::Dependency
169
161
  name: Antwrap
170
162
  version_requirement:
@@ -201,3 +193,12 @@ dependencies:
201
193
  - !ruby/object:Gem::Version
202
194
  version: 0.5.1
203
195
  version:
196
+ - !ruby/object:Gem::Dependency
197
+ name: rjb
198
+ version_requirement:
199
+ version_requirements: !ruby/object:Gem::Version::Requirement
200
+ requirements:
201
+ - - "="
202
+ - !ruby/object:Gem::Version
203
+ version: 1.0.6
204
+ version: