buildr 1.1.3 → 1.2.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.
- data/CHANGELOG +48 -0
- data/README +1 -1
- data/Rakefile +204 -0
- data/bin/buildr +7 -0
- data/lib/buildr.rb +155 -16
- data/lib/buildr/cobertura.rb +26 -19
- data/lib/buildr/hibernate.rb +8 -6
- data/lib/buildr/javacc.rb +1 -0
- data/lib/buildr/jdepend.rb +31 -4
- data/lib/buildr/jetty.rb +26 -28
- data/lib/buildr/openjpa.rb +8 -6
- data/lib/buildr/xmlbeans.rb +9 -4
- data/lib/core/build.rb +40 -50
- data/lib/core/checks.rb +358 -0
- data/lib/core/common.rb +161 -62
- data/lib/core/generate.rb +65 -0
- data/lib/core/help.rb +72 -0
- data/lib/core/project.rb +32 -37
- data/lib/core/rake_ext.rb +12 -66
- data/lib/core/transports.rb +388 -363
- data/lib/java/ant.rb +33 -36
- data/lib/java/artifact.rb +172 -160
- data/lib/java/compile.rb +13 -21
- data/lib/java/eclipse.rb +5 -5
- data/lib/java/idea.ipr.template +284 -0
- data/lib/java/idea.rb +107 -72
- data/lib/java/java.rb +42 -18
- data/lib/java/packaging.rb +242 -124
- data/lib/java/test.rb +532 -135
- data/lib/tasks/zip.rb +72 -23
- metadata +24 -10
data/lib/java/java.rb
CHANGED
@@ -8,8 +8,6 @@ module Buildr
|
|
8
8
|
|
9
9
|
# Options accepted by #java and other methods here.
|
10
10
|
JAVA_OPTIONS = [ :verbose, :classpath, :name, :java_args, :properties ]
|
11
|
-
# Classpath dependencies available when running JUnit.
|
12
|
-
JUNIT_REQUIRES = [ "junit:junit:jar:3.8.1", "jmock:jmock:jar:1.1.0" ]
|
13
11
|
|
14
12
|
# Returned by Java#rjb, you can use this object to set the RJB classpath, specify blocks to be invoked
|
15
13
|
# after loading RJB, and load RJB itself.
|
@@ -21,7 +19,7 @@ module Buildr
|
|
21
19
|
# For that reason, you should not load RJB until the moment you need it. You can call #load or call
|
22
20
|
# Java#rjb with a block. For the same reason, you may need to specify code to execute when loading
|
23
21
|
# (see #onload).
|
24
|
-
class RjbWrapper
|
22
|
+
class RjbWrapper #:nodoc:
|
25
23
|
|
26
24
|
include Singleton
|
27
25
|
|
@@ -30,8 +28,8 @@ module Buildr
|
|
30
28
|
@onload = []
|
31
29
|
onload do
|
32
30
|
onload do
|
33
|
-
|
34
|
-
|
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
|
35
33
|
end
|
36
34
|
end
|
37
35
|
end
|
@@ -61,7 +59,7 @@ module Buildr
|
|
61
59
|
end
|
62
60
|
|
63
61
|
def method_missing(sym, *args, &block) #:nodoc:
|
64
|
-
Rjb.send sym, *args, &block
|
62
|
+
::Rjb.send sym, *args, &block
|
65
63
|
end
|
66
64
|
end
|
67
65
|
|
@@ -76,7 +74,7 @@ module Buildr
|
|
76
74
|
# puts Java.version
|
77
75
|
# => 1.5.0_10
|
78
76
|
def version()
|
79
|
-
@version ||=
|
77
|
+
@version ||= Java.rjb { |rjb| rjb.import("java.lang.System").getProperty("java.version") }
|
80
78
|
end
|
81
79
|
|
82
80
|
# :call-seq:
|
@@ -119,7 +117,7 @@ module Buildr
|
|
119
117
|
classpath = classpath_from(options)
|
120
118
|
cmd_args << "-cp" << classpath.join(File::PATH_SEPARATOR) unless classpath.empty?
|
121
119
|
options[:properties].each { |k, v| cmd_args << "-D#{k}=#{v}" } if options[:properties]
|
122
|
-
cmd_args += options[:java_args]
|
120
|
+
cmd_args += (options[:java_args] || Buildr.options.java_args).flatten
|
123
121
|
cmd_args += args.flatten.compact
|
124
122
|
unless Rake.application.options.dryrun
|
125
123
|
puts "Running #{name}" if verbose
|
@@ -271,18 +269,22 @@ module Buildr
|
|
271
269
|
# * :classpath -- One or more file names, tasks or artifact specifications.
|
272
270
|
# These are all expanded into artifacts, and all tasks are invoked.
|
273
271
|
# * :properties -- Hash of system properties (e.g. "path"=>base_dir).
|
272
|
+
# * :java_args -- Any additional arguments to pass (e.g. -hotspot, -xms)
|
274
273
|
# * :verbose -- If true, prints the command and all its argument.
|
274
|
+
#
|
275
|
+
# *Deprecated:* Please use JUnitTask instead.Use the test task to run JUnit and other test frameworks.
|
275
276
|
def junit(*args)
|
277
|
+
warn_deprecated "Use the test task to run JUnit and other test frameworks"
|
276
278
|
options = Hash === args.last ? args.pop : {}
|
277
279
|
options[:verbose] ||= Rake.application.options.trace || false
|
278
280
|
rake_check_options options, :verbose, :classpath, :properties, :java_args
|
279
281
|
|
280
|
-
classpath = classpath_from(options) +
|
282
|
+
classpath = classpath_from(options) + JUnitTask::requires
|
281
283
|
tests = args.flatten
|
282
284
|
failed = tests.inject([]) do |failed, test|
|
283
285
|
begin
|
284
286
|
java "junit.textui.TestRunner", test, :classpath=>classpath, :properties=>options[:properties],
|
285
|
-
:name=>"#{test}", :verbose=>options[:verbose]
|
287
|
+
:name=>"#{test}", :verbose=>options[:verbose], :java_args=>options[:java_args]
|
286
288
|
failed
|
287
289
|
rescue
|
288
290
|
failed << test
|
@@ -291,6 +293,7 @@ module Buildr
|
|
291
293
|
[ tests - failed, failed ]
|
292
294
|
end
|
293
295
|
|
296
|
+
|
294
297
|
# :call-seq:
|
295
298
|
# rjb() => RjbWrapper
|
296
299
|
# rjb() { ... }
|
@@ -336,14 +339,6 @@ module Buildr
|
|
336
339
|
Buildr.artifacts(classpath).each { |t| t.invoke if t.respond_to?(:invoke) }.map(&:to_s)
|
337
340
|
end
|
338
341
|
|
339
|
-
# :call-seq:
|
340
|
-
# junit_artifacts() => files
|
341
|
-
#
|
342
|
-
# Returns the JUnit artifacts as paths, after downloading and installing them (if necessary).
|
343
|
-
def junit_artifacts()
|
344
|
-
@junit_artifacts ||= Buildr.artifacts(JUNIT_REQUIRES).each { |task| task.invoke }.map(&:to_s)
|
345
|
-
end
|
346
|
-
|
347
342
|
def darwin?() #:nodoc:
|
348
343
|
RUBY_PLATFORM =~ /darwin/i
|
349
344
|
end
|
@@ -376,4 +371,33 @@ module Buildr
|
|
376
371
|
|
377
372
|
include Java
|
378
373
|
|
374
|
+
class Options
|
375
|
+
|
376
|
+
# :call-seq:
|
377
|
+
# java_args => array
|
378
|
+
#
|
379
|
+
# Returns the Java arguments.
|
380
|
+
def java_args()
|
381
|
+
@java_args ||= (ENV["JAVA_OPTIONS"] || ENV["java_options"] || "").split(" ")
|
382
|
+
end
|
383
|
+
|
384
|
+
# :call-seq:
|
385
|
+
# java_args = array|string|nil
|
386
|
+
#
|
387
|
+
# Sets the Java arguments. These arguments are used when creating a JVM, including for use with RJB
|
388
|
+
# for most tasks (e.g. Ant, compile) and when forking a separate JVM (e.g. JUnit tests). You can also
|
389
|
+
# use the JAVA_OPTIONS environment variable.
|
390
|
+
#
|
391
|
+
# For example:
|
392
|
+
# options.java_args = "-verbose"
|
393
|
+
# Or:
|
394
|
+
# $ set JAVA_OPTIONS = "-Xms1g"
|
395
|
+
# $ buildr
|
396
|
+
def java_args=(args)
|
397
|
+
args = args.split if String === args
|
398
|
+
@java_args = args.to_a
|
399
|
+
end
|
400
|
+
|
401
|
+
end
|
402
|
+
|
379
403
|
end
|
data/lib/java/packaging.rb
CHANGED
@@ -2,6 +2,7 @@ require "core/project"
|
|
2
2
|
require "java/artifact"
|
3
3
|
require "java/java"
|
4
4
|
require "java/compile"
|
5
|
+
require "java/test"
|
5
6
|
require "tasks/zip"
|
6
7
|
|
7
8
|
|
@@ -15,25 +16,17 @@ module Buildr
|
|
15
16
|
|
16
17
|
MANIFEST_HEADER = "Manifest-Version: 1.0\nCreated-By: Buildr\n"
|
17
18
|
|
18
|
-
#
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
#
|
30
|
-
# The meta-inf attribute lists one or more files that should be copied into
|
31
|
-
# the META-INF directory.
|
32
|
-
#
|
33
|
-
# For example:
|
34
|
-
# package(:jar).using(:manifest=>"src/MANIFEST.MF")
|
35
|
-
# package(:jar).meta_inf << file("README")
|
36
|
-
class JarTask < ZipTask
|
19
|
+
# Adds support for MANIFEST.MF and other META-INF files.
|
20
|
+
module WithManifest
|
21
|
+
|
22
|
+
class << self
|
23
|
+
protected
|
24
|
+
def included(mod)
|
25
|
+
mod.alias_method_chain :initialize, :manifest
|
26
|
+
mod.alias_method_chain :invoke_prerequisites, :manifest
|
27
|
+
mod.alias_method_chain :create, :manifest
|
28
|
+
end
|
29
|
+
end
|
37
30
|
|
38
31
|
# Specifies how to create the manifest file.
|
39
32
|
attr_accessor :manifest
|
@@ -41,31 +34,21 @@ module Buildr
|
|
41
34
|
# Specifies files to include in the META-INF directory.
|
42
35
|
attr_accessor :meta_inf
|
43
36
|
|
44
|
-
|
45
|
-
super
|
46
|
-
@manifest = true
|
47
|
-
@meta_inf = []
|
48
|
-
end
|
37
|
+
private
|
49
38
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
self.meta_inf = [value].flatten
|
55
|
-
else
|
56
|
-
super key, value
|
57
|
-
end
|
58
|
-
value
|
39
|
+
def invoke_prerequisites_with_manifest()
|
40
|
+
prerequisites << file(manifest.to_s) if String === manifest || Rake::Task === manifest
|
41
|
+
[meta_inf].flatten.each { |file| prerequisites << file(file.to_s) }
|
42
|
+
invoke_prerequisites_without_manifest
|
59
43
|
end
|
60
44
|
|
61
|
-
def
|
62
|
-
|
63
|
-
|
45
|
+
def initialize_with_manifest(*args)
|
46
|
+
@manifest = false
|
47
|
+
@meta_inf = []
|
48
|
+
initialize_without_manifest *args
|
64
49
|
end
|
65
50
|
|
66
|
-
|
67
|
-
|
68
|
-
def create(zip) #:nodoc:
|
51
|
+
def create_with_manifest(zip) #:nodoc:
|
69
52
|
[meta_inf].flatten.map(&:to_s).uniq.each { |file| zip.add "META-INF/#{File.basename(file)}", file }
|
70
53
|
unless manifest == false
|
71
54
|
zip.file.open("META-INF/MANIFEST.MF", "w") do |output|
|
@@ -80,13 +63,59 @@ module Buildr
|
|
80
63
|
}.join("\n") << "\n"
|
81
64
|
when Proc, Method
|
82
65
|
output << manifest.call
|
83
|
-
when String, Task
|
66
|
+
when String, Rake::Task
|
84
67
|
output << File.read(manifest.to_s)
|
85
68
|
end
|
86
69
|
end
|
87
70
|
end
|
88
71
|
end
|
89
|
-
|
72
|
+
create_without_manifest zip
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
class ::Buildr::ZipTask
|
78
|
+
include WithManifest
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
# Extends the ZipTask to create a JAR file.
|
83
|
+
#
|
84
|
+
# This task supports two additional attributes: manifest and meta-inf.
|
85
|
+
#
|
86
|
+
# The manifest attribute specifies how to create the MANIFEST.MF file.
|
87
|
+
# * A hash of manifest properties (name/value pairs).
|
88
|
+
# * An array of hashes, one for each section of the manifest.
|
89
|
+
# * A string providing the name of an existing manifest file.
|
90
|
+
# * A file task can be used the same way.
|
91
|
+
# * Proc or method called to return the contents of the manifest file.
|
92
|
+
# * False to not generate a manifest file.
|
93
|
+
#
|
94
|
+
# The meta-inf attribute lists one or more files that should be copied into
|
95
|
+
# the META-INF directory.
|
96
|
+
#
|
97
|
+
# For example:
|
98
|
+
# package(:jar).with(:manifest=>"src/MANIFEST.MF")
|
99
|
+
# package(:jar).meta_inf << file("README")
|
100
|
+
class JarTask < ZipTask
|
101
|
+
|
102
|
+
def initialize(*args) #:nodoc:
|
103
|
+
super
|
104
|
+
end
|
105
|
+
|
106
|
+
# :call-seq:
|
107
|
+
# with(options) => self
|
108
|
+
#
|
109
|
+
# Additional
|
110
|
+
# Pass options to the task. Returns self. ZipTask itself does not support any options,
|
111
|
+
# but other tasks (e.g. JarTask, WarTask) do.
|
112
|
+
#
|
113
|
+
# For example:
|
114
|
+
# package(:jar).with(:manifest=>"MANIFEST_MF")
|
115
|
+
def with(*args)
|
116
|
+
super args.pop if Hash === args.last
|
117
|
+
include :from=>args
|
118
|
+
self
|
90
119
|
end
|
91
120
|
|
92
121
|
end
|
@@ -100,19 +129,33 @@ module Buildr
|
|
100
129
|
# directory.
|
101
130
|
#
|
102
131
|
# For example:
|
103
|
-
# package(:war).
|
132
|
+
# package(:war).with(:libs=>"log4j:log4j:jar:1.1")
|
104
133
|
class WarTask < JarTask
|
105
134
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
135
|
+
# Directories with class files to include under WEB-INF/classes.
|
136
|
+
attr_accessor :classes
|
137
|
+
|
138
|
+
# Artifacts to include under WEB-INF/libs.
|
139
|
+
attr_accessor :libs
|
140
|
+
|
141
|
+
def initialize(*args) #:nodoc:
|
142
|
+
super
|
143
|
+
@classes = []
|
144
|
+
@libs = []
|
145
|
+
end
|
146
|
+
|
147
|
+
def invoke_prerequisites() #:nodoc:
|
148
|
+
@classes.to_a.flatten.each { |classes| path("WEB-INF/classes").include classes, :as=>"." }
|
149
|
+
path("WEB-INF/lib").include Buildr.artifacts(@libs.to_a.flatten)
|
150
|
+
super
|
151
|
+
end
|
152
|
+
|
153
|
+
def libs=(value) #:nodoc:
|
154
|
+
@libs |= Buildr.artifacts(value)
|
155
|
+
end
|
156
|
+
|
157
|
+
def classes=(value) #:nodoc:
|
158
|
+
@classes |= [value].flatten.map { |dir| file(dir.to_s) }
|
116
159
|
end
|
117
160
|
|
118
161
|
end
|
@@ -121,6 +164,13 @@ module Buildr
|
|
121
164
|
end
|
122
165
|
|
123
166
|
|
167
|
+
Project.on_define do |project|
|
168
|
+
# Need to run buildr before package, since package is often used as a dependency by tasks that
|
169
|
+
# expect build to happen.
|
170
|
+
task "package"=>task("build")
|
171
|
+
end
|
172
|
+
|
173
|
+
|
124
174
|
class Project
|
125
175
|
|
126
176
|
# Options accepted by #package method for all package types.
|
@@ -161,42 +211,31 @@ module Buildr
|
|
161
211
|
end
|
162
212
|
|
163
213
|
# :call-seq:
|
164
|
-
# package(type,
|
214
|
+
# package(type, spec?) => task
|
165
215
|
#
|
166
216
|
# Defines and returns a package created by this project.
|
167
217
|
#
|
168
218
|
# The first argument declares the package type. For example, :jar to create a JAR file.
|
169
|
-
# The
|
219
|
+
# The package is an artifact that takes its artifact specification from the project.
|
220
|
+
# You can override the artifact specification by passing various options in the second
|
221
|
+
# argument, for example:
|
222
|
+
# package(:zip, :classifier=>"sources")
|
170
223
|
#
|
171
|
-
#
|
172
|
-
#
|
173
|
-
#
|
174
|
-
# * :version -- The version number. By default, uses the project's #version property.
|
175
|
-
# * :classifier -- Artifact classifier. By default, the artifact has no classifier.
|
224
|
+
# Packages that are ZIP files provides various ways to include additional files, directories,
|
225
|
+
# and even merge ZIPs together. Have a look at ZipTask for more information. In case you're
|
226
|
+
# wondering, JAR and WAR packages are ZIP files.
|
176
227
|
#
|
177
|
-
#
|
228
|
+
# You can also enhance a JAR package using the ZipTask#with method that accepts the following options:
|
178
229
|
# * :manifest -- Specifies how to create the MANIFEST.MF. By default, uses the project's
|
179
230
|
# #manifest property.
|
180
231
|
# * :meta_inf -- Specifies files to be included in the META-INF directory. By default,
|
181
232
|
# uses the project's #meta-inf property.
|
182
|
-
# * :include -- List of files and directories to include in the JAR. By default,
|
183
|
-
# includes the contents of the target/classes directory.
|
184
233
|
#
|
185
|
-
# The WAR
|
186
|
-
# * :
|
187
|
-
#
|
188
|
-
# * :
|
189
|
-
#
|
190
|
-
# * :libs -- Artifacts and files to include in WEB-INF/libs. By default, includes the
|
191
|
-
# compile classpath.
|
192
|
-
# * :include -- List of files and directories to include in the JAR. By default,
|
193
|
-
# includes the contents of the src/main/webapp directory.
|
194
|
-
#
|
195
|
-
# The ZIP packager adds the following options:
|
196
|
-
# * :include -- List of file and directories to include in the ZIP.
|
197
|
-
#
|
198
|
-
# In addition, you can always enhance the package task directly, e.g. by calling the
|
199
|
-
# ZipTask#include and ZipTask#with methods.
|
234
|
+
# The WAR package supports the same options and adds a few more:
|
235
|
+
# * :classes -- Directories of class files to include in WEB-INF/classes. Includes the compile
|
236
|
+
# target directory by default.
|
237
|
+
# * :libs -- Artifacts and files to include in WEB-INF/libs. Includes the compile classpath
|
238
|
+
# dependencies by default.
|
200
239
|
#
|
201
240
|
# For example:
|
202
241
|
# define "project" do
|
@@ -205,28 +244,26 @@ module Buildr
|
|
205
244
|
# end
|
206
245
|
# define "webapp" do
|
207
246
|
# compile.with project("beans")
|
208
|
-
# package :
|
247
|
+
# package(:war).with :libs=>MYSQL_JDBC
|
209
248
|
# end
|
210
|
-
# package
|
249
|
+
# package(:zip, :classifier=>"sources").include path_to(".")
|
211
250
|
# end
|
212
251
|
#
|
213
|
-
#
|
214
|
-
#
|
215
|
-
#
|
216
|
-
#
|
217
|
-
# # Create a new package that includes an existing package.
|
218
|
-
# package(:war).include project("foo:bar").package(:jar)
|
252
|
+
# Two other packaging types are:
|
253
|
+
# * package :sources -- Creates a ZIP file with the source code and classifier "sources", for use by IDEs.
|
254
|
+
# * package :javadoc -- Creates a ZIP file with the Javadocs and classifier "javadoc". You can use the
|
255
|
+
# javadoc method to further customize it.
|
219
256
|
#
|
220
257
|
# A package is also an artifact. The following tasks operate on packages created by the project:
|
221
|
-
#
|
222
|
-
#
|
223
|
-
#
|
224
|
-
#
|
258
|
+
# buildr upload # Upload packages created by the project
|
259
|
+
# buildr install # Install packages created by the project
|
260
|
+
# buildr package # Create packages
|
261
|
+
# buildr uninstall # Remove previously installed packages
|
225
262
|
#
|
226
263
|
# If you want to add additional packaging types, implement a method with the name package_as_[type]
|
227
|
-
# that accepts two arguments, the file name and a hash of options.
|
228
|
-
#
|
229
|
-
#
|
264
|
+
# that accepts two arguments, the file name and a hash of options. You can change the options and
|
265
|
+
# file name, e.g. to add a classifier or change the file type. Your method may be called multiple times,
|
266
|
+
# and must return the same file task on each call.
|
230
267
|
def package(type = :jar, options = nil)
|
231
268
|
options = options.nil? ? {} : options.dup
|
232
269
|
options[:id] ||= self.id
|
@@ -237,7 +274,8 @@ module Buildr
|
|
237
274
|
|
238
275
|
packager = method("package_as_#{type}") rescue
|
239
276
|
fail("Don't know how to create a package of type #{type}")
|
240
|
-
packager.call(file_name, options)
|
277
|
+
package = packager.call(file_name, options) { warn_deprecated "Yielding from package_as_ no longer necessary." }
|
278
|
+
unless packages.include?(package)
|
241
279
|
# Make it an artifact using the specifications, and tell it how to create a POM.
|
242
280
|
package.extend ActsAsArtifact
|
243
281
|
package.send :apply_spec, Hash[*Artifact::ARTIFACT_ATTRIBUTES.map { |k| [ k,options[k]] }.flatten]
|
@@ -248,20 +286,11 @@ module Buildr
|
|
248
286
|
pom.send :apply_spec, pom_spec
|
249
287
|
pom.enhance do
|
250
288
|
mkpath File.dirname(pom.name), :verbose=>false
|
251
|
-
File.open(pom.name, "w")
|
252
|
-
xml = Builder::XmlMarkup.new(:target=>file, :indent=>2)
|
253
|
-
xml.instruct!
|
254
|
-
xml.project do
|
255
|
-
xml.modelVersion "4.0.0"
|
256
|
-
xml.groupId pom.group
|
257
|
-
xml.artifactId pom.id
|
258
|
-
xml.version pom.version
|
259
|
-
xml.classifier pom.classifier if pom.classifier
|
260
|
-
end
|
261
|
-
end
|
289
|
+
File.open(pom.name, "w") { |file| file.write pom.pom_xml }
|
262
290
|
end
|
263
291
|
|
264
|
-
#
|
292
|
+
# We already run build before package, but we also need to do so if the package itself is
|
293
|
+
# used as a dependency, before we get to run the package task.
|
265
294
|
task "package"=>package
|
266
295
|
package.enhance [task("build")]
|
267
296
|
|
@@ -282,7 +311,7 @@ module Buildr
|
|
282
311
|
[ installed, pom ].map(&:to_s).each { |file| rm file if File.exist?(file) }
|
283
312
|
end
|
284
313
|
end
|
285
|
-
task("
|
314
|
+
task("upload") { package.pom.invoke ; package.pom.upload ; package.upload }
|
286
315
|
|
287
316
|
# Add the package to the list of packages created by this project, and
|
288
317
|
# register it as an artifact. The later is required so if we look up the spec
|
@@ -291,6 +320,7 @@ module Buildr
|
|
291
320
|
packages << package
|
292
321
|
Artifact.register package, pom
|
293
322
|
end
|
323
|
+
package
|
294
324
|
end
|
295
325
|
|
296
326
|
# :call-seq:
|
@@ -312,15 +342,19 @@ module Buildr
|
|
312
342
|
unless Rake::Task.task_defined?(file_name)
|
313
343
|
rake_check_options options, *PACKAGE_OPTIONS + [:manifest, :meta_inf, :include]
|
314
344
|
Java::Packaging::JarTask.define_task(file_name).tap do |jar|
|
315
|
-
jar.
|
316
|
-
|
345
|
+
jar.with :manifest=>manifest, :meta_inf=>meta_inf
|
346
|
+
[:manifest, :meta_inf].each do |option|
|
347
|
+
if options.has_key?(option)
|
348
|
+
warn_deprecated "The :#{option} option in package(:jar) is deprecated, please use package(:jar).with(:#{option}=>) instead."
|
349
|
+
jar.with option=>options[option]
|
350
|
+
end
|
351
|
+
end
|
317
352
|
if options[:include]
|
353
|
+
warn_deprecated "The :include option in package(:jar) is deprecated, please use package(:jar).include(files) instead."
|
318
354
|
jar.include options[:include]
|
319
355
|
else
|
320
|
-
|
321
|
-
enhance { jar.include compile.target, :as=>"." }
|
356
|
+
jar.with compile.target unless compile.sources.empty?
|
322
357
|
end
|
323
|
-
yield jar
|
324
358
|
end
|
325
359
|
else
|
326
360
|
rake_check_options options, *PACKAGE_OPTIONS
|
@@ -332,28 +366,33 @@ module Buildr
|
|
332
366
|
unless Rake::Task.task_defined?(file_name)
|
333
367
|
rake_check_options options, *PACKAGE_OPTIONS + [:manifest, :meta_inf, :classes, :libs, :include]
|
334
368
|
Java::Packaging::WarTask.define_task(file_name).tap do |war|
|
335
|
-
war.
|
336
|
-
|
369
|
+
war.with :manifest=>manifest, :meta_inf=>meta_inf
|
370
|
+
[:manifest, :meta_inf].each do |option|
|
371
|
+
if options.has_key?(option)
|
372
|
+
warn_deprecated "The :#{option} option in package :war is deprecated, please use package(:war).with(:#{option}=>) instead."
|
373
|
+
war.with option=>options[option]
|
374
|
+
end
|
375
|
+
end
|
337
376
|
# Add libraries in WEB-INF lib, and classes in WEB-INF classes
|
338
|
-
if options
|
377
|
+
if options.has_key?(:classes)
|
378
|
+
warn_deprecated "The :classes option in package(:war) is deprecated, please use package(:war).with(:classes=>) instead."
|
339
379
|
war.with :classes=>options[:classes]
|
340
380
|
else
|
341
|
-
|
342
|
-
enhance { war.with :classes=>compile.target unless compile.sources.empty? }
|
381
|
+
war.with :classes=>compile.target unless compile.sources.empty?
|
343
382
|
end
|
344
|
-
if options
|
383
|
+
if options.has_key?(:libs)
|
384
|
+
warn_deprecated "The :libs option in package(:war) is deprecated, please use package(:war).with(:libs=>) instead."
|
345
385
|
war.with :libs=>options[:libs].collect
|
346
386
|
else
|
347
|
-
|
348
|
-
enhance { war.with :libs=>compile.classpath }
|
387
|
+
war.with :libs=>compile.classpath
|
349
388
|
end
|
350
389
|
# Add included files, or the webapp directory.
|
351
|
-
if options
|
390
|
+
if options.has_key?(:include)
|
391
|
+
warn_deprecated "The :include option in package(:war) is deprecated, please use package(:war).include(files) instead."
|
352
392
|
war.include options[:include]
|
353
|
-
|
354
|
-
|
393
|
+
else
|
394
|
+
path_to("src/main/webapp").tap { |path| war.with path if File.exist?(path) }
|
355
395
|
end
|
356
|
-
yield war
|
357
396
|
end
|
358
397
|
else
|
359
398
|
rake_check_options options, *PACKAGE_OPTIONS
|
@@ -366,9 +405,9 @@ module Buildr
|
|
366
405
|
rake_check_options options, *PACKAGE_OPTIONS + [:include]
|
367
406
|
ZipTask.define_task(file_name).tap do |zip|
|
368
407
|
if options[:include]
|
408
|
+
warn_deprecated "The :include option in package(:zip) is deprecated, please use package(:zip).include(files) instead."
|
369
409
|
zip.include options[:include]
|
370
410
|
end
|
371
|
-
yield zip
|
372
411
|
end
|
373
412
|
else
|
374
413
|
rake_check_options options, *PACKAGE_OPTIONS
|
@@ -376,6 +415,85 @@ module Buildr
|
|
376
415
|
file(file_name)
|
377
416
|
end
|
378
417
|
|
418
|
+
def package_as_sources(file_name, options) #:nodoc:
|
419
|
+
rake_check_options options, *PACKAGE_OPTIONS
|
420
|
+
options.merge!(:type=>:zip, :classifier=>"sources")
|
421
|
+
file_name = path_to(:target, Artifact.hash_to_file_name(options))
|
422
|
+
ZipTask.define_task(file_name).tap { |zip| zip.include :from=>compile.sources } unless Rake::Task.task_defined?(file_name)
|
423
|
+
file(file_name)
|
424
|
+
end
|
425
|
+
|
426
|
+
def package_as_javadoc(file_name, options) #:nodoc:
|
427
|
+
rake_check_options options, *PACKAGE_OPTIONS
|
428
|
+
options.merge!(:type=>:zip, :classifier=>"javadoc")
|
429
|
+
file_name = path_to(:target, Artifact.hash_to_file_name(options))
|
430
|
+
unless Rake::Task.task_defined?(file_name)
|
431
|
+
ZipTask.define_task(file_name).tap { |zip| zip.include :from=>javadoc.target }
|
432
|
+
javadoc.options[:windowtitle] ||= project.comment || project.name
|
433
|
+
end
|
434
|
+
file(file_name)
|
435
|
+
end
|
436
|
+
|
437
|
+
end
|
438
|
+
|
439
|
+
class Project
|
440
|
+
|
441
|
+
# :call-seq:
|
442
|
+
# package_with_sources(options?)
|
443
|
+
#
|
444
|
+
# Call this when you want the project (and all its sub-projects) to create a source distribution.
|
445
|
+
# You can use the source distribution in an IDE when debugging.
|
446
|
+
#
|
447
|
+
# A source distribution is a ZIP package with the classifier "sources", which includes all the
|
448
|
+
# sources used by the compile task.
|
449
|
+
#
|
450
|
+
# Packages use the project's manifest and meta_inf properties, which you can override by passing
|
451
|
+
# different values (e.g. false to exclude the manifest) in the options.
|
452
|
+
#
|
453
|
+
# To create source distributions only for specific projects, use the :only and :except options,
|
454
|
+
# for example:
|
455
|
+
# package_with_sources :only=>["foo:bar", "foo:baz"]
|
456
|
+
#
|
457
|
+
# (Same as calling package :sources on each project/sub-project that has source directories.)
|
458
|
+
def package_with_sources(options = nil)
|
459
|
+
options ||= {}
|
460
|
+
enhance do
|
461
|
+
selected = options[:only] ? projects(options[:only]) :
|
462
|
+
options[:except] ? ([self] + projects - projects(options[:except])) :
|
463
|
+
[self] + projects
|
464
|
+
selected.reject { |project| project.compile.sources.empty? }.
|
465
|
+
each { |project| project.package(:sources) }
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
# :call-seq:
|
470
|
+
# package_with_javadoc(options?)
|
471
|
+
#
|
472
|
+
# Call this when you want the project (and all its sub-projects) to create a JavaDoc distribution.
|
473
|
+
# You can use the JavaDoc distribution in an IDE when coding against the API.
|
474
|
+
#
|
475
|
+
# A JavaDoc distribution is a ZIP package with the classifier "javadoc", which includes all the
|
476
|
+
# sources used by the compile task.
|
477
|
+
#
|
478
|
+
# Packages use the project's manifest and meta_inf properties, which you can override by passing
|
479
|
+
# different values (e.g. false to exclude the manifest) in the options.
|
480
|
+
#
|
481
|
+
# To create JavaDoc distributions only for specific projects, use the :only and :except options,
|
482
|
+
# for example:
|
483
|
+
# package_with_javadoc :only=>["foo:bar", "foo:baz"]
|
484
|
+
#
|
485
|
+
# (Same as calling package :javadoc on each project/sub-project that has source directories.)
|
486
|
+
def package_with_javadoc(options = nil)
|
487
|
+
options ||= {}
|
488
|
+
enhance do
|
489
|
+
selected = options[:only] ? projects(options[:only]) :
|
490
|
+
options[:except] ? ([self] + projects - projects(options[:except])) :
|
491
|
+
[self] + projects
|
492
|
+
selected.reject { |project| project.compile.sources.empty? }.
|
493
|
+
each { |project| project.package(:javadoc) }
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
379
497
|
end
|
380
498
|
|
381
499
|
end
|