buildr 1.2.10 → 1.3.0

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.
Files changed (154) hide show
  1. data/CHANGELOG +566 -268
  2. data/DISCLAIMER +7 -1
  3. data/KEYS +151 -0
  4. data/NOTICE +23 -8
  5. data/README +122 -22
  6. data/Rakefile +49 -229
  7. data/{lib → addon}/buildr/antlr.rb +23 -10
  8. data/addon/buildr/cobertura.rb +232 -0
  9. data/{lib → addon}/buildr/hibernate.rb +20 -4
  10. data/{lib → addon}/buildr/javacc.rb +27 -12
  11. data/addon/buildr/jdepend.rb +60 -0
  12. data/{lib → addon}/buildr/jetty.rb +34 -18
  13. data/addon/buildr/nailgun.rb +892 -0
  14. data/{lib → addon}/buildr/openjpa.rb +23 -6
  15. data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
  16. data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
  17. data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
  18. data/{lib/buildr/jetty → addon/buildr/org/apache/buildr}/JettyWrapper.java +19 -0
  19. data/{lib → addon}/buildr/xmlbeans.rb +39 -14
  20. data/bin/buildr +21 -7
  21. data/buildr.gemspec +50 -0
  22. data/doc/css/default.css +225 -0
  23. data/doc/css/print.css +95 -0
  24. data/doc/css/syntax.css +43 -0
  25. data/doc/images/apache-incubator-logo.png +0 -0
  26. data/doc/images/buildr-hires.png +0 -0
  27. data/doc/images/buildr.png +0 -0
  28. data/doc/images/note.png +0 -0
  29. data/doc/images/tip.png +0 -0
  30. data/doc/images/zbuildr.tif +0 -0
  31. data/doc/pages/artifacts.textile +317 -0
  32. data/doc/pages/building.textile +501 -0
  33. data/doc/pages/contributing.textile +178 -0
  34. data/doc/pages/download.textile +25 -0
  35. data/doc/pages/extending.textile +229 -0
  36. data/doc/pages/getting_started.textile +337 -0
  37. data/doc/pages/index.textile +63 -0
  38. data/doc/pages/mailing_lists.textile +17 -0
  39. data/doc/pages/more_stuff.textile +367 -0
  40. data/doc/pages/packaging.textile +592 -0
  41. data/doc/pages/projects.textile +449 -0
  42. data/doc/pages/recipes.textile +127 -0
  43. data/doc/pages/settings_profiles.textile +339 -0
  44. data/doc/pages/testing.textile +475 -0
  45. data/doc/pages/troubleshooting.textile +121 -0
  46. data/doc/pages/whats_new.textile +389 -0
  47. data/doc/print.haml +52 -0
  48. data/doc/print.toc.yaml +28 -0
  49. data/doc/scripts/buildr-git.rb +411 -0
  50. data/doc/scripts/install-jruby.sh +44 -0
  51. data/doc/scripts/install-linux.sh +64 -0
  52. data/doc/scripts/install-osx.sh +52 -0
  53. data/doc/site.haml +55 -0
  54. data/doc/site.toc.yaml +44 -0
  55. data/lib/buildr.rb +28 -45
  56. data/lib/buildr/core.rb +27 -0
  57. data/lib/buildr/core/application.rb +373 -0
  58. data/lib/buildr/core/application_cli.rb +134 -0
  59. data/lib/{core → buildr/core}/build.rb +91 -77
  60. data/lib/{core → buildr/core}/checks.rb +116 -95
  61. data/lib/buildr/core/common.rb +155 -0
  62. data/lib/buildr/core/compile.rb +594 -0
  63. data/lib/buildr/core/environment.rb +120 -0
  64. data/lib/buildr/core/filter.rb +258 -0
  65. data/lib/{core → buildr/core}/generate.rb +22 -5
  66. data/lib/buildr/core/help.rb +118 -0
  67. data/lib/buildr/core/progressbar.rb +156 -0
  68. data/lib/{core → buildr/core}/project.rb +468 -213
  69. data/lib/buildr/core/test.rb +690 -0
  70. data/lib/{core → buildr/core}/transports.rb +107 -127
  71. data/lib/buildr/core/util.rb +235 -0
  72. data/lib/buildr/ide.rb +19 -0
  73. data/lib/{java → buildr/ide}/eclipse.rb +86 -60
  74. data/lib/{java → buildr/ide}/idea.ipr.template +16 -0
  75. data/lib/buildr/ide/idea.rb +194 -0
  76. data/lib/buildr/ide/idea7x.ipr.template +290 -0
  77. data/lib/buildr/ide/idea7x.rb +210 -0
  78. data/lib/buildr/java.rb +26 -0
  79. data/lib/buildr/java/ant.rb +71 -0
  80. data/lib/buildr/java/bdd_frameworks.rb +267 -0
  81. data/lib/buildr/java/commands.rb +210 -0
  82. data/lib/buildr/java/compilers.rb +432 -0
  83. data/lib/buildr/java/deprecated.rb +141 -0
  84. data/lib/buildr/java/groovyc.rb +137 -0
  85. data/lib/buildr/java/jruby.rb +99 -0
  86. data/lib/buildr/java/org/apache/buildr/BuildrNail$Main.class +0 -0
  87. data/lib/buildr/java/org/apache/buildr/BuildrNail.class +0 -0
  88. data/lib/buildr/java/org/apache/buildr/BuildrNail.java +41 -0
  89. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  90. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +116 -0
  91. data/lib/buildr/java/packaging.rb +706 -0
  92. data/lib/{java → buildr/java}/pom.rb +20 -4
  93. data/lib/buildr/java/rjb.rb +142 -0
  94. data/lib/buildr/java/test_frameworks.rb +290 -0
  95. data/lib/buildr/java/version_requirement.rb +172 -0
  96. data/lib/buildr/packaging.rb +21 -0
  97. data/lib/{java → buildr/packaging}/artifact.rb +170 -179
  98. data/lib/buildr/packaging/artifact_namespace.rb +957 -0
  99. data/lib/buildr/packaging/artifact_search.rb +140 -0
  100. data/lib/buildr/packaging/gems.rb +102 -0
  101. data/lib/buildr/packaging/package.rb +233 -0
  102. data/lib/{tasks → buildr/packaging}/tar.rb +18 -1
  103. data/lib/{tasks → buildr/packaging}/zip.rb +153 -105
  104. data/rakelib/apache.rake +126 -0
  105. data/rakelib/changelog.rake +56 -0
  106. data/rakelib/doc.rake +103 -0
  107. data/rakelib/package.rake +44 -0
  108. data/rakelib/release.rake +53 -0
  109. data/rakelib/rspec.rake +81 -0
  110. data/rakelib/rubyforge.rake +45 -0
  111. data/rakelib/scm.rake +49 -0
  112. data/rakelib/setup.rake +59 -0
  113. data/rakelib/stage.rake +45 -0
  114. data/spec/application_spec.rb +316 -0
  115. data/spec/archive_spec.rb +494 -0
  116. data/spec/artifact_namespace_spec.rb +635 -0
  117. data/spec/artifact_spec.rb +738 -0
  118. data/spec/build_spec.rb +193 -0
  119. data/spec/checks_spec.rb +537 -0
  120. data/spec/common_spec.rb +579 -0
  121. data/spec/compile_spec.rb +561 -0
  122. data/spec/groovy_compilers_spec.rb +239 -0
  123. data/spec/java_bdd_frameworks_spec.rb +238 -0
  124. data/spec/java_compilers_spec.rb +446 -0
  125. data/spec/java_packaging_spec.rb +1042 -0
  126. data/spec/java_test_frameworks_spec.rb +414 -0
  127. data/spec/packaging_helper.rb +63 -0
  128. data/spec/packaging_spec.rb +589 -0
  129. data/spec/project_spec.rb +739 -0
  130. data/spec/sandbox.rb +116 -0
  131. data/spec/scala_compilers_spec.rb +239 -0
  132. data/spec/spec.opts +6 -0
  133. data/spec/spec_helpers.rb +283 -0
  134. data/spec/test_spec.rb +871 -0
  135. data/spec/transport_spec.rb +300 -0
  136. data/spec/version_requirement_spec.rb +115 -0
  137. metadata +188 -77
  138. data/lib/buildr/cobertura.rb +0 -89
  139. data/lib/buildr/jdepend.rb +0 -40
  140. data/lib/buildr/jetty/JettyWrapper$1.class +0 -0
  141. data/lib/buildr/jetty/JettyWrapper$BuildrHandler.class +0 -0
  142. data/lib/buildr/jetty/JettyWrapper.class +0 -0
  143. data/lib/buildr/scala.rb +0 -368
  144. data/lib/core/application.rb +0 -188
  145. data/lib/core/common.rb +0 -562
  146. data/lib/core/help.rb +0 -72
  147. data/lib/core/rake_ext.rb +0 -81
  148. data/lib/java/ant.rb +0 -71
  149. data/lib/java/compile.rb +0 -589
  150. data/lib/java/idea.rb +0 -159
  151. data/lib/java/java.rb +0 -432
  152. data/lib/java/packaging.rb +0 -581
  153. data/lib/java/test.rb +0 -795
  154. data/lib/tasks/concat.rb +0 -35
@@ -1,159 +0,0 @@
1
- require "pathname"
2
- require "core/project"
3
- require "java/artifact"
4
- require 'stringio'
5
- require 'rexml/document'
6
-
7
- module Buildr
8
-
9
- # Global task "idea" generates artifacts for all projects.
10
- desc "Generate Idea artifacts for all projects"
11
- Project.local_task "idea"=>"artifacts"
12
-
13
- Project.on_define do |project|
14
- idea = project.recursive_task("idea")
15
-
16
- project.enhance do |project|
17
-
18
- # We need paths relative to the top project's base directory.
19
- root_path = lambda { |p| f = lambda { |p| p.parent ? f[p.parent] : p.base_dir } ; f[p] }[project]
20
- # We want the Eclipse files changed every time the Buildfile changes, but also anything loaded by
21
- # the Buildfile (buildr.rb, separate file listing dependencies, etc), so we add anything required
22
- # after the Buildfile. So which don't know where Buildr shows up exactly, ignore files that show
23
- # in $LOADED_FEATURES that we cannot resolve.
24
- sources = Buildr.build_files.map { |file| File.expand_path(file) }.select { |file| File.exist?(file) }
25
- sources << File.expand_path(Rake.application.rakefile, root_path) if Rake.application.rakefile
26
-
27
- # Find a path relative to the project's root directory.
28
- relative = lambda do |path|
29
- msg = [:to_path, :to_str, :to_s].find { |msg| path.respond_to? msg }
30
- path = path.__send__(msg)
31
- Pathname.new(path).relative_path_from(Pathname.new(project.path_to)).to_s
32
- end
33
-
34
- m2repo = Buildr::Repositories.instance.local
35
- excludes = [ '**/.svn/', '**/CVS/' ].join('|')
36
-
37
- # Only for projects that are packageable.
38
- task_name = project.path_to("#{project.name.gsub(':', '-')}.iml")
39
- idea.enhance [ file(task_name) ]
40
-
41
- # The only thing we need to look for is a change in the Buildfile.
42
- file(task_name=>sources) do |task|
43
- puts "Writing #{task.name}" if verbose
44
-
45
- # Idea handles modules slightly differently if they're WARs
46
- idea_types = Hash.new("JAVA_MODULE")
47
- idea_types["war"] = "J2EE_WEB_MODULE"
48
-
49
- # Note: Use the test classpath since Eclipse compiles both "main" and "test" classes using the same classpath
50
- cp = project.test.compile.classpath.map(&:to_s) - [ project.compile.target.to_s ]
51
-
52
- # Convert classpath elements into applicable Project objects
53
- cp.collect! { |path| projects.detect { |prj| prj.packages.detect { |pkg| pkg.to_s == path } } || path }
54
-
55
- # project_libs: artifacts created by other projects
56
- project_libs, others = cp.partition { |path| path.is_a?(Project) }
57
-
58
- # Separate artifacts from Maven2 repository
59
- m2_libs, others = others.partition { |path| path.to_s.index(m2repo) == 0 }
60
-
61
- # Generated: classpath elements in the project are assumed to be generated
62
- generated, libs = others.partition { |path| path.to_s.index(project.path_to.to_s) == 0 }
63
-
64
- File.open(task.name, "w") do |file|
65
- xml = Builder::XmlMarkup.new(:target=>file, :indent=>2)
66
- # Project type is going to be the first package type
67
- xml.module(:version=>"4", :relativePaths=>"false", :type=>idea_types[project.packages.first.type.to_s]) do
68
-
69
- xml.component :name=>"ModuleRootManager"
70
- xml.component "name"=>"NewModuleRootManager", "inherit-compiler-output"=>"false" do
71
- xml.output :url=>"file://$MODULE_DIR$/#{relative[project.compile.target]}"
72
- xml.tag! "exclude-output"
73
-
74
- # TODO project.test.target isn't recognized, what's the proper way to get the test compile path?
75
- xml.tag! "output-test", :url=>"file://$MODULE_DIR$/target/test-classes"
76
-
77
- xml.content(:url=>"file://$MODULE_DIR$") do
78
- srcs = project.compile.sources.map { |src| relative[src] } + generated.map { |src| relative[src] }
79
- srcs.sort.uniq.each do |path|
80
- xml.sourceFolder :url=>"file://$MODULE_DIR$/#{path}", :isTestSource=>"false"
81
- end
82
- test_sources = project.test.compile.sources.map { |src| relative[src] }
83
- test_sources.each do |paths|
84
- paths.sort.uniq.each do |path|
85
- xml.sourceFolder :url=>"file://$MODULE_DIR$/#{path}", :isTestSource=>"true"
86
- end
87
- end
88
- {"src/main/resources"=>false, "src/test/resources"=>true}.each do |key, value|
89
- xml.sourceFolder :url=>"file://$MODULE_DIR$/#{key}", :isTestSource=>"#{value}" if File.exist?(project.path_to(key))
90
- end
91
- xml.excludeFolder :url=>"file://$MODULE_DIR$/#{relative[project.compile.target]}"
92
- end
93
-
94
- xml.orderEntry :type=>"sourceFolder", :forTests=>"false"
95
- xml.orderEntry :type=>"inheritedJdk"
96
-
97
- # Classpath elements from other projects
98
- project_libs.map(&:id).sort.uniq.each do |project_id|
99
- xml.orderEntry :type=>'module', "module-name"=>project_id
100
- end
101
-
102
- # Libraries
103
- ext_libs = libs.map {|path| "$MODULE_DIR$/#{path.to_s}" } +
104
- m2_libs.map { |path| path.to_s.sub(m2repo, "$M2_REPO$") }
105
- ext_libs.each do |path|
106
- xml.orderEntry :type=>"module-library" do
107
- xml.library do
108
- xml.CLASSES do
109
- xml.root :url=>"jar://#{path}!/"
110
- end
111
- xml.JAVADOC
112
- xml.SOURCES
113
- end
114
- end
115
- end
116
-
117
- xml.orderEntryProperties
118
- end
119
- end
120
- end
121
- end
122
-
123
- # Root project aggregates all the subprojects.
124
- if project.parent == nil
125
- task_name = project.path_to("#{project.name.gsub(':', '-')}.ipr")
126
- idea.enhance [ file(task_name) ]
127
-
128
- file(task_name=>sources) do |task|
129
- puts "Writing #{task.name}" if verbose
130
-
131
- # Generating just the little stanza that chanages from one project to another
132
- partial = StringIO.new
133
- xml = Builder::XmlMarkup.new(:target=>partial, :indent=>2)
134
- xml.component(:name=>"ProjectModuleManager") do
135
- xml.modules do
136
- project.projects.each do |subp|
137
- module_name = subp.name.gsub(":", "-")
138
- module_path = subp.name.split(":"); module_path.shift
139
- module_path = module_path.join("/")
140
- path = "#{module_path}/#{module_name}.iml"
141
- xml.module :fileurl=>"file://$PROJECT_DIR$/#{path}", :filepath=>"$PROJECT_DIR$/#{path}"
142
- end
143
- xml.module :fileurl=>"file://$PROJECT_DIR$/#{project.name}.iml", :filepath=>"$PROJECT_DIR$/#{project.name}.iml"
144
- end
145
- end
146
-
147
- # Loading the whole fairly constant crap
148
- template_xml = REXML::Document.new(File.open(File.dirname(__FILE__)+"/idea.ipr.template"))
149
- include_xml = REXML::Document.new(partial.string)
150
- template_xml.root.add_element(include_xml.root)
151
- template_xml.write(File.new(task.name, "w"))
152
-
153
- end
154
- end
155
-
156
- end
157
- end
158
-
159
- end # module Buildr
@@ -1,432 +0,0 @@
1
- require "rjb" if RUBY_PLATFORM != 'java'
2
- require "java" if RUBY_PLATFORM == 'java'
3
- require "core/project"
4
-
5
- module Buildr
6
-
7
- # Base module for all things Java.
8
- module Java
9
-
10
- # Options accepted by #java and other methods here.
11
- JAVA_OPTIONS = [ :verbose, :classpath, :name, :java_args, :properties ]
12
-
13
- # Returned by Java#wrapper, you can use this object to set the classpath, specify blocks to be invoked
14
- # after loading RJB, and load RJB itself.
15
- #
16
- # RJB can be loaded exactly once, and once loaded, you cannot change its classpath. Of course you can
17
- # call libraries that manage their own classpath, but the lazy way is to just tell RJB of all the
18
- # classpath dependencies you need in advance, before loading it.
19
- #
20
- # For that reason, you should not load RJB until the moment you need it. You can call #load or call
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:
26
-
27
- include Singleton
28
-
29
- def initialize() #:nodoc:
30
- @classpath = [Java.tools_jar].compact
31
- if RUBY_PLATFORM == 'java'
32
- # in order to get a complete picture, we need to add a few jars to the list.
33
- @classpath += java.lang.System.getProperty('java.class.path').split(':').compact
34
- end
35
- @setup = []
36
-
37
- setup do
38
- setup do
39
- cp = Buildr.artifacts(@classpath).map(&:to_s)
40
- cp.each { |path| file(path).invoke }
41
-
42
- if RUBY_PLATFORM == 'java'
43
- cp.each do |jlib|
44
- require jlib
45
- end
46
- else
47
- ::Rjb.load cp.join(File::PATH_SEPARATOR), Buildr.options.java_args.flatten
48
- end
49
- end
50
- end
51
- end
52
-
53
- attr_accessor :classpath
54
-
55
- def setup(&block)
56
- @setup << block
57
- self
58
- end
59
-
60
- def onload(&block)
61
- warn_deprecated "use setup { |wrapper| ... } instead"
62
- setup &block
63
- end
64
-
65
- def load(&block)
66
- @setup.each { |block| block.call self }
67
- @setup.clear
68
- end
69
-
70
- def import(jlib)
71
- if RUBY_PLATFORM == 'java'
72
- ::Java.send(jlib)
73
- else
74
- ::Rjb.import jlib
75
- end
76
- end
77
-
78
- def method_missing(sym, *args, &block) #:nodoc:
79
- # these aren't the same, but depending on method_missing while
80
- # supporting two unrelated systems is asking for trouble anyways.
81
- if RUBY_PLATFORM == 'java'
82
- ::Java.send sym, *args, &block
83
- else
84
- ::Rjb.send sym, *args, &block
85
- end
86
- end
87
- end
88
-
89
- class << self
90
-
91
- # :call-seq:
92
- # version() => string
93
- #
94
- # Returns the version number of the JVM.
95
- #
96
- # For example:
97
- # puts Java.version
98
- # => 1.5.0_10
99
- def version()
100
- @version ||= Java.wrapper { |jw| jw.import("java.lang.System").getProperty("java.version") }
101
- end
102
-
103
- # :call-seq:
104
- # tools_jar() => path
105
- #
106
- # Returns a path to tools.jar. On OS/X which has not tools.jar, returns an empty array,
107
- # on all other platforms, fails if it doesn't find tools.jar.
108
- def tools_jar()
109
- return [] if darwin?
110
- @tools ||= [File.join(home, "lib/tools.jar")] or raise "I need tools.jar to compile, can't find it in #{home}/lib"
111
- end
112
-
113
- # :call-seq:
114
- # home() => path
115
- #
116
- # Returns JAVA_HOME, fails if JAVA_HOME not set.
117
- def home()
118
- @home ||= ENV["JAVA_HOME"] or fail "Are we forgetting something? JAVA_HOME not set."
119
- end
120
-
121
- # :call-seq:
122
- # java(class, *args, options?)
123
- #
124
- # Runs Java with the specified arguments.
125
- #
126
- # The last argument may be a Hash with additional options:
127
- # * :classpath -- One or more file names, tasks or artifact specifications.
128
- # These are all expanded into artifacts, and all tasks are invoked.
129
- # * :java_args -- Any additional arguments to pass (e.g. -hotspot, -xms)
130
- # * :properties -- Hash of system properties (e.g. "path"=>base_dir).
131
- # * :name -- Shows this name, otherwise shows the first argument (the class name).
132
- # * :verbose -- If true, prints the command and all its argument.
133
- def java(*args, &block)
134
- options = Hash === args.last ? args.pop : {}
135
- options[:verbose] ||= Rake.application.options.trace || false
136
- rake_check_options options, *JAVA_OPTIONS
137
-
138
- name = options[:name] || "java #{args.first}"
139
- cmd_args = [path_to_bin("java")]
140
- classpath = classpath_from(options)
141
- cmd_args << "-cp" << classpath.join(File::PATH_SEPARATOR) unless classpath.empty?
142
- options[:properties].each { |k, v| cmd_args << "-D#{k}=#{v}" } if options[:properties]
143
- cmd_args += (options[:java_args] || Buildr.options.java_args).flatten
144
- cmd_args += args.flatten.compact
145
- unless Rake.application.options.dryrun
146
- puts "Running #{name}" if verbose
147
- block = lambda { |ok, res| fail "Failed to execute #{name}, see errors above" unless ok } unless block
148
- puts cmd_args.join(" ") if Rake.application.options.trace
149
- system(cmd_args.map { |arg| %Q{"#{arg}"} }.join(" ")).tap do |ok|
150
- block.call ok, $?
151
- end
152
- end
153
- end
154
-
155
- # :call-seq:
156
- # apt(*files, options)
157
- #
158
- # Runs Apt with the specified arguments.
159
- #
160
- # The last argument may be a Hash with additional options:
161
- # * :compile -- If true, compile source files to class files.
162
- # * :source -- Specifies source compatibility with a given JVM release.
163
- # * :output -- Directory where to place the generated source files, or the
164
- # generated class files when compiling.
165
- # * :classpath -- One or more file names, tasks or artifact specifications.
166
- # These are all expanded into artifacts, and all tasks are invoked.
167
- def apt(*args)
168
- options = Hash === args.last ? args.pop : {}
169
- rake_check_options options, :compile, :source, :output, :classpath
170
-
171
- files = args.flatten.map(&:to_s).
172
- collect { |arg| File.directory?(arg) ? FileList["#{arg}/**/*.java"] : arg }.flatten
173
- cmd_args = [ Rake.application.options.trace ? "-verbose" : "-nowarn" ]
174
- if options[:compile]
175
- cmd_args << "-d" << options[:output].to_s
176
- else
177
- cmd_args << "-nocompile" << "-s" << options[:output].to_s
178
- end
179
- cmd_args << "-source" << options[:source] if options[:source]
180
- classpath = classpath_from(options)
181
- cmd_args << "-cp" << classpath.join(File::PATH_SEPARATOR) unless classpath.empty?
182
- cmd_args += files
183
- unless Rake.application.options.dryrun
184
- puts "Running apt" if verbose
185
- puts (["apt"] + cmd_args).join(" ") if Rake.application.options.trace
186
- Java.wrapper do |jw|
187
- jw.import("com.sun.tools.apt.Main").process(cmd_args) == 0 or
188
- fail "Failed to process annotations, see errors above"
189
- end
190
- end
191
- end
192
-
193
- # :call-seq:
194
- # javac(*files, options)
195
- #
196
- # Runs Javac with the specified arguments.
197
- #
198
- # The last argument may be a Hash with additional options:
199
- # * :output -- Target directory for all compiled class files.
200
- # * :classpath -- One or more file names, tasks or artifact specifications.
201
- # These are all expanded into artifacts, and all tasks are invoked.
202
- # * :sourcepath -- Additional source paths to use.
203
- # * :javac_args -- Any additional arguments to pass (e.g. -extdirs, -encoding)
204
- # * :name -- Shows this name, otherwise shows the working directory.
205
- def javac(*args)
206
- options = Hash === args.last ? args.pop : {}
207
- rake_check_options options, :classpath, :sourcepath, :output, :javac_args, :name
208
-
209
- files = args.flatten.each { |f| f.invoke if f.respond_to?(:invoke) }.map(&:to_s).
210
- collect { |arg| File.directory?(arg) ? FileList["#{arg}/**/*.java"] : arg }.flatten
211
- name = options[:name] || Dir.pwd
212
-
213
- cmd_args = []
214
- classpath = classpath_from(options)
215
- cmd_args << "-cp" << classpath.join(File::PATH_SEPARATOR) unless classpath.empty?
216
- cmd_args << "-sourcepath" << options[:sourcepath].join(File::PATH_SEPARATOR) if options[:sourcepath]
217
- cmd_args << "-d" << options[:output].to_s if options[:output]
218
- cmd_args += options[:javac_args].flatten if options[:javac_args]
219
- cmd_args += files
220
- unless Rake.application.options.dryrun
221
- puts "Compiling #{files.size} source files in #{name}" if verbose
222
- puts (["javac"] + cmd_args).join(" ") if Rake.application.options.trace
223
- Java.wrapper do |jw|
224
- jw.import("com.sun.tools.javac.Main").compile(cmd_args) == 0 or
225
- fail "Failed to compile, see errors above"
226
- end
227
- end
228
- end
229
-
230
- # :call-seq:
231
- # javadoc(*files, options)
232
- #
233
- # Runs Javadocs with the specified files and options.
234
- #
235
- # This method accepts the following special options:
236
- # * :output -- The output directory
237
- # * :classpath -- Array of classpath dependencies.
238
- # * :sourcepath -- Array of sourcepaths (paths or tasks).
239
- # * :name -- Shows this name, otherwise shows the working directory.
240
- #
241
- # All other options are passed to Javadoc as following:
242
- # * true -- As is, for example, :author=>true becomes -author
243
- # * false -- Prefixed, for example, :index=>false becomes -noindex
244
- # * string -- Option with value, for example, :windowtitle=>"My project" becomes -windowtitle "My project"
245
- # * array -- Option with set of values separated by spaces.
246
- def javadoc(*args)
247
- options = Hash === args.last ? args.pop : {}
248
-
249
- cmd_args = [ "-d", options[:output], Rake.application.options.trace ? "-verbose" : "-quiet" ]
250
- options.reject { |key, value| [:output, :name, :sourcepath, :classpath].include?(key) }.
251
- each { |key, value| value.invoke if value.respond_to?(:invoke) }.
252
- each do |key, value|
253
- case value
254
- when true, nil
255
- cmd_args << "-#{key}"
256
- when false
257
- cmd_args << "-no#{key}"
258
- when Hash
259
- value.each { |k,v| cmd_args << "-#{key}" << k.to_s << v.to_s }
260
- else
261
- cmd_args += Array(value).map { |item| ["-#{key}", item.to_s] }.flatten
262
- end
263
- end
264
- [:sourcepath, :classpath].each do |option|
265
- options[option].to_a.flatten.tap do |paths|
266
- cmd_args << "-#{option}" << paths.flatten.map(&:to_s).join(File::PATH_SEPARATOR) unless paths.empty?
267
- end
268
- end
269
- cmd_args += args.flatten.uniq
270
- name = options[:name] || Dir.pwd
271
- unless Rake.application.options.dryrun
272
- puts "Generating Javadoc for #{name}" if verbose
273
- puts (["javadoc"] + cmd_args).join(" ") if Rake.application.options.trace
274
- Java.wrapper do |jw|
275
- jw.import("com.sun.tools.javadoc.Main").execute(cmd_args) == 0 or
276
- fail "Failed to generate Javadocs, see errors above"
277
- end
278
- end
279
- end
280
-
281
- # :call-seq:
282
- # junit(*classes, options) => [ passed, failed ]
283
- #
284
- # Runs JUnit test cases from the specified classes. Returns an array with two lists,
285
- # one containing the names of all classes that passes, the other containing the names
286
- # of all classes that failed.
287
- #
288
- # The last argument may be a Hash with additional options:
289
- # * :classpath -- One or more file names, tasks or artifact specifications.
290
- # These are all expanded into artifacts, and all tasks are invoked.
291
- # * :properties -- Hash of system properties (e.g. "path"=>base_dir).
292
- # * :java_args -- Any additional arguments to pass (e.g. -hotspot, -xms)
293
- # * :verbose -- If true, prints the command and all its argument.
294
- #
295
- # *Deprecated:* Please use JUnitTask instead.Use the test task to run JUnit and other test frameworks.
296
- def junit(*args)
297
- warn_deprecated "Use the test task to run JUnit and other test frameworks"
298
- options = Hash === args.last ? args.pop : {}
299
- options[:verbose] ||= Rake.application.options.trace || false
300
- rake_check_options options, :verbose, :classpath, :properties, :java_args
301
-
302
- classpath = classpath_from(options) + JUnitTask::requires
303
- tests = args.flatten
304
- failed = tests.inject([]) do |failed, test|
305
- begin
306
- java "junit.textui.TestRunner", test, :classpath=>classpath, :properties=>options[:properties],
307
- :name=>"#{test}", :verbose=>options[:verbose], :java_args=>options[:java_args]
308
- failed
309
- rescue
310
- failed << test
311
- end
312
- end
313
- [ tests - failed, failed ]
314
- end
315
-
316
-
317
- # :call-seq:
318
- # wrapper() => JavaWrapper
319
- # wrapper() { ... }
320
- #
321
- # This method can be used in two ways. Without a block, returns the
322
- # JavaWrapper object which you can use to configure the classpath or call
323
- # other methods. With a block, loads RJB or sets up JRuby and yields to
324
- # the block, returning its result.
325
- #
326
- # For example:
327
- # # Add class path dependency.
328
- # Java.wrapper.classpath << REQUIRES
329
- # # Require AntWrap when loading RJB/JRuby.
330
- # Java.wrapper.setup { require "antwrap" }
331
- #
332
- # def execute(name, options)
333
- # options = options.merge(:name=>name, :base_dir=>Dir.pwd, :declarative=>true)
334
- # # Load RJB/JRuby and run AntWrap.
335
- # Java.wrapper { AntProject.new(options) }
336
- # end
337
- def wrapper()
338
- if block_given?
339
- JavaWrapper.instance.load
340
- yield JavaWrapper.instance
341
- else
342
- JavaWrapper.instance
343
- end
344
- end
345
-
346
- def rjb(&block)
347
- warn_deprecated "please use Java.wrapper() instead"
348
- wrapper &block
349
- end
350
-
351
- # :call-seq:
352
- # path_to_bin(cmd?) => path
353
- #
354
- # Returns the path to the specified Java command (with no argument to java itself).
355
- def path_to_bin(name = "java")
356
- File.join(home, "bin", name)
357
- end
358
-
359
- protected
360
-
361
- # :call-seq:
362
- # classpath_from(options) => files
363
- #
364
- # Extracts the classpath from the options, expands it by calling artifacts, invokes
365
- # each of the artifacts and returns an array of paths.
366
- def classpath_from(options)
367
- classpath = (options[:classpath] || []).collect
368
- Buildr.artifacts(classpath).each { |t| t.invoke if t.respond_to?(:invoke) }.map(&:to_s)
369
- end
370
-
371
- def darwin?() #:nodoc:
372
- RUBY_PLATFORM =~ /darwin/i
373
- end
374
-
375
- end
376
-
377
- # See Java#java.
378
- def java(*args)
379
- Java.java(*args)
380
- end
381
-
382
- # :call-seq:
383
- # apt(*sources) => task
384
- #
385
- # Returns a task that will use Java#apt to generate source files in target/generated/apt,
386
- # from all the source directories passed as arguments. Uses the compile.sources list if
387
- # on arguments supplied.
388
- #
389
- # For example:
390
- #
391
- def apt(*sources)
392
- sources = compile.sources if sources.empty?
393
- file(path_to(:target, "generated/apt")=>sources) do |task|
394
- Java.apt(sources.map(&:to_s) - [task.name], :output=>task.name,
395
- :classpath=>compile.classpath, :source=>compile.options.source)
396
- end
397
- end
398
-
399
- end
400
-
401
- include Java
402
-
403
- class Options
404
-
405
- # :call-seq:
406
- # java_args => array
407
- #
408
- # Returns the Java arguments.
409
- def java_args()
410
- @java_args ||= (ENV["JAVA_OPTS"] || ENV["JAVA_OPTIONS"] || "").split(" ")
411
- end
412
-
413
- # :call-seq:
414
- # java_args = array|string|nil
415
- #
416
- # Sets the Java arguments. These arguments are used when creating a JVM, including for use with RJB
417
- # for most tasks (e.g. Ant, compile) and when forking a separate JVM (e.g. JUnit tests). You can also
418
- # use the JAVA_OPTS environment variable.
419
- #
420
- # For example:
421
- # options.java_args = "-verbose"
422
- # Or:
423
- # $ set JAVA_OPTS = "-Xms1g"
424
- # $ buildr
425
- def java_args=(args)
426
- args = args.split if String === args
427
- @java_args = args.to_a
428
- end
429
-
430
- end
431
-
432
- end