buildr 0.18.0 → 0.19.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 +62 -4
- data/LICENSE +1 -1
- data/README +64 -1
- data/lib/buildr.rb +27 -28
- data/lib/core/build.rb +39 -30
- data/lib/core/project.rb +323 -247
- data/lib/core/rake_ext.rb +116 -0
- data/lib/core/transports.rb +81 -36
- data/lib/java/ant.rb +78 -0
- data/lib/{core → java}/artifact.rb +212 -109
- data/lib/java/compile.rb +158 -78
- data/lib/java/eclipse.rb +27 -12
- data/lib/java/java.rb +269 -111
- data/lib/java/javacc.rb +53 -69
- data/lib/java/jetty.rb +203 -92
- data/lib/java/jetty/JettyWrapper$BuildrHandler.class +0 -0
- data/lib/java/jetty/JettyWrapper.class +0 -0
- data/lib/java/jetty/JettyWrapper.java +69 -20
- data/lib/java/openjpa.rb +57 -45
- data/lib/java/packaging.rb +248 -116
- data/lib/java/test.rb +261 -128
- data/lib/java/xmlbeans.rb +55 -49
- data/lib/tasks/concat.rb +34 -0
- data/lib/tasks/download.rb +5 -0
- data/lib/tasks/filter.rb +107 -55
- data/lib/tasks/zip.rb +283 -155
- metadata +25 -5
- data/lib/core/core.rb +0 -155
data/lib/java/openjpa.rb
CHANGED
@@ -1,51 +1,63 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module OpenJPA
|
4
|
-
|
5
|
-
VERSION = "0.9.7-incubating-SNAPSHOT"
|
6
|
-
|
7
|
-
REQUIRES = [ "org.apache.openjpa:openjpa-all:jar:#{VERSION}",
|
8
|
-
"commons-collections:commons-collections:jar:3.1",
|
9
|
-
"commons-dbcp:commons-dbcp:jar:1.2.1",
|
10
|
-
"commons-lang:commons-lang:jar:2.1",
|
11
|
-
"commons-pool:commons-pool:jar:1.2",
|
12
|
-
"javax.persistence:persistence-api:jar:1.0",
|
13
|
-
"org.apache.geronimo.specs:geronimo-j2ee-connector_1.5_spec:jar:1.0",
|
14
|
-
"org.apache.geronimo.specs:geronimo-jta_1.0.1B_spec:jar:1.0",
|
15
|
-
"net.sourceforge.serp:serp:jar:1.11.0" ]
|
16
|
-
|
17
|
-
OPTIONS = [ :verbose, :noop, :cp, :classpath, :properties ]
|
18
|
-
|
19
|
-
def self.enhance(options)
|
20
|
-
options[:verbose] ||= Rake.application.options.trace || false
|
21
|
-
fu_check_options options, *OPTIONS + [:output]
|
22
|
-
|
23
|
-
runtool options.merge(:class=>"org.apache.openjpa.enhance.PCEnhancer", :name=>"Enhancer",
|
24
|
-
:args=>{ "-p"=>options[:properties], "-d"=>options[:output] },
|
25
|
-
:classpath=>options[:classpath] + [options[:output]])
|
26
|
-
end
|
1
|
+
require "java/java"
|
27
2
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
3
|
+
module Buildr
|
4
|
+
module Java
|
5
|
+
module OpenJPA
|
6
|
+
|
7
|
+
VERSION = "0.9.7-incubating-SNAPSHOT"
|
8
|
+
|
9
|
+
REQUIRES = [ "org.apache.openjpa:openjpa-all:jar:#{VERSION}",
|
10
|
+
"commons-collections:commons-collections:jar:3.1",
|
11
|
+
"commons-dbcp:commons-dbcp:jar:1.2.1",
|
12
|
+
"commons-lang:commons-lang:jar:2.1",
|
13
|
+
"commons-pool:commons-pool:jar:1.2",
|
14
|
+
"javax.persistence:persistence-api:jar:1.0",
|
15
|
+
"org.apache.geronimo.specs:geronimo-j2ee-connector_1.5_spec:jar:1.0",
|
16
|
+
"org.apache.geronimo.specs:geronimo-jta_1.0.1B_spec:jar:1.0",
|
17
|
+
"net.sourceforge.serp:serp:jar:1.11.0" ]
|
18
|
+
|
19
|
+
OPTIONS = [ :verbose, :noop, :classpath, :properties ]
|
20
|
+
|
21
|
+
class << self
|
22
|
+
|
23
|
+
def enhance(options)
|
24
|
+
fu_check_options options, *OPTIONS + [:output]
|
25
|
+
runtool options.merge(:class=>"org.apache.openjpa.enhance.PCEnhancer", :name=>"Enhancer",
|
26
|
+
:args=>{ "-p"=>options[:properties], "-d"=>options[:output].to_s },
|
27
|
+
:classpath=>options[:classpath])
|
28
|
+
end
|
29
|
+
|
30
|
+
def mapping_tool(options)
|
31
|
+
fu_check_options options, *OPTIONS + [:action, :sql]
|
32
|
+
runtool options.merge(:class=>"org.apache.openjpa.jdbc.meta.MappingTool", :name=>"Mapping Tool",
|
33
|
+
:args=>{ "-p"=>options[:properties], "-sql"=>options[:sql], "-sa"=>options[:action] })
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def runtool(options)
|
39
|
+
args = [options[:class]] + options[:args].select { |n, v| v }.map { |n, v| [ n, v ] }.flatten
|
40
|
+
args << { :classpath=>requires + (options[:classpath] || []),
|
41
|
+
:name=>"OpenJPA #{options[:name]}", :verbose=>options[:verbose] }
|
42
|
+
Java.java *args
|
43
|
+
end
|
44
|
+
|
45
|
+
def requires()
|
46
|
+
@required ||= artifacts(REQUIRES).each { |artifact| artifact.invoke }.map(&:to_s)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
def open_jpa_enhance(options = nil)
|
52
|
+
jpa_options = { :output=>compile.target, :classpath=>[compile.classpath, compile.target.to_s],
|
53
|
+
:properties=>path_to("src/main/resources/META-INF/persistence.xml") }
|
54
|
+
Java::OpenJPA.enhance jpa_options.merge(options || {})
|
55
|
+
end
|
44
56
|
|
45
|
-
def self.requires()
|
46
|
-
@required ||= artifacts(REQUIRES).each { |artifact| artifact.invoke }.map(&:to_s)
|
47
57
|
end
|
48
|
-
|
49
58
|
end
|
50
59
|
|
60
|
+
class Project
|
61
|
+
include Java::OpenJPA
|
62
|
+
end
|
51
63
|
end
|
data/lib/java/packaging.rb
CHANGED
@@ -1,20 +1,52 @@
|
|
1
|
+
require "core/project"
|
2
|
+
require "java/artifact"
|
3
|
+
require "java/java"
|
4
|
+
require "java/compile"
|
5
|
+
require "tasks/zip"
|
6
|
+
|
7
|
+
|
1
8
|
module Buildr
|
2
9
|
module Java
|
3
10
|
|
11
|
+
# This module includes comming packaging classes. Each one is also reflected by
|
12
|
+
# a packaging method. Generally, you would want to use the packaging method from
|
13
|
+
# the project definition, since it does all the heavy lifting.
|
4
14
|
module Packaging
|
5
15
|
|
6
16
|
MANIFEST_HEADER = "Manifest-Version: 1.0\nCreated-By: Buildr\n"
|
7
17
|
|
18
|
+
# Extends the ZipTask to create a JAR file.
|
19
|
+
#
|
20
|
+
# This task supports two additional attributes: manifest and meta-inf.
|
21
|
+
#
|
22
|
+
# The manifest attribute specifies how to create the MANIFEST.MF file.
|
23
|
+
# * A hash of manifest properties (name/value pairs).
|
24
|
+
# * An array of hashes, one for each section of the manifest.
|
25
|
+
# * A string providing the name of an existing manifest file.
|
26
|
+
# * Proc or method called to return the contents of the manifest file.
|
27
|
+
# * False to not generate a manifest file.
|
28
|
+
#
|
29
|
+
# The meta-inf attribute lists one or more files that should be copied into
|
30
|
+
# the META-INF directory.
|
31
|
+
#
|
32
|
+
# For example:
|
33
|
+
# package(:jar).using(:manifest=>"src/MANIFEST.MF")
|
34
|
+
# package(:jar).meta_inf << file("README")
|
8
35
|
class JarTask < ZipTask
|
36
|
+
|
37
|
+
# Specifies how to create the manifest file.
|
9
38
|
attr_accessor :manifest
|
39
|
+
|
40
|
+
# Specifies files to include in the META-INF directory.
|
10
41
|
attr_accessor :meta_inf
|
11
42
|
|
12
|
-
def initialize(*args)
|
43
|
+
def initialize(*args) #:nodoc:
|
13
44
|
super
|
14
45
|
@manifest = true
|
46
|
+
@meta_inf = []
|
15
47
|
end
|
16
48
|
|
17
|
-
def []=(key, value)
|
49
|
+
def []=(key, value) #:nodoc:
|
18
50
|
if key.to_sym == :manifest
|
19
51
|
self.manifest = value
|
20
52
|
elsif key.to_sym == :meta_inf
|
@@ -25,11 +57,16 @@ module Buildr
|
|
25
57
|
value
|
26
58
|
end
|
27
59
|
|
60
|
+
def prerequisites() #:nodoc:
|
61
|
+
super + [ String === manifest ? file(manifest) : nil ].compact +
|
62
|
+
meta_inf.map { |file| String === file ? file(file) : file }
|
63
|
+
end
|
64
|
+
|
28
65
|
protected
|
29
66
|
|
30
|
-
def create(zip)
|
67
|
+
def create(zip) #:nodoc:
|
31
68
|
zip.mkdir "META-INF"
|
32
|
-
meta_inf.each { |file| zip.add "META-INF/#{File.basename(file)}", file }
|
69
|
+
meta_inf.map(&:to_s).uniq.each { |file| zip.add "META-INF/#{File.basename(file)}", file }
|
33
70
|
unless manifest == false
|
34
71
|
zip.file.open("META-INF/MANIFEST.MF", "w") do |output|
|
35
72
|
output.write MANIFEST_HEADER
|
@@ -56,14 +93,24 @@ module Buildr
|
|
56
93
|
|
57
94
|
end
|
58
95
|
|
96
|
+
# Extends the JarTask to create a WAR file.
|
97
|
+
#
|
98
|
+
# Supports all the same options as JarTask, in additon to these two options:
|
99
|
+
# * :libs -- An array of files, tasks, artifact specifications, etc that will be added
|
100
|
+
# to the WEB-INF/lib directory.
|
101
|
+
# * :classes -- A directory containing class files for inclusion in the WEB-INF/classes
|
102
|
+
# directory.
|
103
|
+
#
|
104
|
+
# For example:
|
105
|
+
# package(:war).using(:libs=>"log4j:log4j:jar:1.1")
|
59
106
|
class WarTask < JarTask
|
60
107
|
|
61
|
-
def []=(key, value)
|
108
|
+
def []=(key, value) #:nodoc:
|
62
109
|
case key.to_sym
|
63
110
|
when :libs
|
64
111
|
self.include artifacts(value), :path=>"WEB-INF/lib"
|
65
112
|
when :classes
|
66
|
-
self.include value, :path=>"WEB-INF/classes"
|
113
|
+
self.include value, :path=>"WEB-INF/classes", :as=>"."
|
67
114
|
else
|
68
115
|
super key, value
|
69
116
|
end
|
@@ -76,155 +123,240 @@ module Buildr
|
|
76
123
|
end
|
77
124
|
|
78
125
|
|
79
|
-
# Create a JAR from all the pre-requisites.
|
80
|
-
#
|
81
|
-
# For example:
|
82
|
-
# jar "lib-1.0.jar"=>["target/classes", "MANIFEST,MF"]
|
83
|
-
def jar(file)
|
84
|
-
Packaging::JarTask.define_task(file)
|
85
|
-
end
|
86
|
-
|
87
126
|
class Project
|
88
127
|
|
89
|
-
# Group used for packaging. Inherited from parent project.
|
90
|
-
|
128
|
+
# Group used for packaging. Inherited from parent project. Defaults to the top-level project name.
|
129
|
+
attr_accessor :group
|
130
|
+
inherited_attr(:group) { |project| project.name }
|
91
131
|
# Version used for packaging. Inherited from parent project.
|
132
|
+
attr_accessor :version
|
92
133
|
inherited_attr :version
|
93
|
-
# Manifest used for packaging. Inherited from parent project.
|
134
|
+
# Manifest used for packaging. Inherited from parent project. The default value
|
135
|
+
# is a hash that includes the Build-By, Build-Jdk and Implementation-Version values.
|
136
|
+
# The later is taken from the project's version number.
|
137
|
+
attr_accessor :manifest
|
94
138
|
inherited_attr :manifest do |project|
|
95
139
|
manifest = { "Build-By"=>ENV['USER'], "Build-Jdk"=>Java.version }
|
96
140
|
manifest["Implementation-Version"] = project.version if project.version
|
97
141
|
manifest
|
98
142
|
end
|
99
|
-
# Files to always include in the package META-INF directory.
|
100
|
-
|
101
|
-
|
143
|
+
# Files to always include in the package META-INF directory. The default value include
|
144
|
+
# the LICENSE file if one exists in the project's base directory.
|
145
|
+
attr_accessor :meta_inf
|
146
|
+
inherited_attr(:meta_inf) do |project|
|
147
|
+
license = project.file("LICENSE")
|
148
|
+
File.exist?(license.to_s) ? [license] : []
|
102
149
|
end
|
103
150
|
|
104
|
-
# The project
|
105
|
-
#
|
106
|
-
|
151
|
+
# The project's identifier. Same as the project name, with colons replaced by dashes.
|
152
|
+
# The ID for project foo:bar is foo-bar.
|
153
|
+
attr_reader :id
|
107
154
|
def id()
|
108
155
|
name.gsub(":", "-")
|
109
156
|
end
|
110
|
-
inherited_attr :webapp_src_dir do File.join(src_dir, "main", "webapp") end
|
111
157
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
158
|
+
# :call-seq:
|
159
|
+
# package(type, options?) => task
|
160
|
+
#
|
161
|
+
# Defines and returns a package created by this project.
|
162
|
+
#
|
163
|
+
# The first argument declares the package type. For example, :jar to create a JAR file.
|
164
|
+
# The second argument provides additional options used when defining the package.
|
165
|
+
#
|
166
|
+
# The following options are supported by all package types:
|
167
|
+
# * :file_name -- The package file name. By default it uses the artifact identifier,
|
168
|
+
# version number and file type to create a file name (id-version.type).
|
169
|
+
# * :id -- The artifact identifier. By default, uses the project's #id property.
|
170
|
+
# * :group -- The group identifier. By default, uses the project's #group property.
|
171
|
+
# * :version -- The version number. By default, uses the project's #version property.
|
172
|
+
# * :classifier -- Artifact classifier. By default, the artifact has no classifier.
|
173
|
+
#
|
174
|
+
# The JAR packager adds the following options:
|
175
|
+
# * :manifest -- Specifies how to create the MANIFEST.MF. By default, uses the project's
|
176
|
+
# #manifest property.
|
177
|
+
# * :meta_inf -- Specifies files to be included in the META-INF directory. By default,
|
178
|
+
# uses the project's #meta-inf property.
|
179
|
+
# * :include -- List of files and directories to include in the JAR. By default,
|
180
|
+
# includes the contents of the target/classes directory.
|
181
|
+
#
|
182
|
+
# The WAR packager adds the following options:
|
183
|
+
# * :manifest -- See JAR.
|
184
|
+
# * :meta_inf -- See JAR.
|
185
|
+
# * :classes -- Directories of class files to include in WEB-INF/classes. By default,
|
186
|
+
# includes the contents of the target/classes directory.
|
187
|
+
# * :libs -- Artifacts and files to include in WEB-INF/libs. By default, includes the
|
188
|
+
# compile classpath.
|
189
|
+
# * :include -- List of files and directories to include in the JAR. By default,
|
190
|
+
# includes the contents of the src/main/webapp directory.
|
191
|
+
#
|
192
|
+
# The ZIP packager adds the following options:
|
193
|
+
# * :include -- List of file and directories to include in the ZIP.
|
194
|
+
#
|
195
|
+
# In addition, you can always enhance the package task directly, e.g. by calling the
|
196
|
+
# ZipTask#include and ZipTask#with methods.
|
197
|
+
#
|
198
|
+
# For example:
|
199
|
+
# define "project" do
|
200
|
+
# define "beans" do
|
201
|
+
# package :jar
|
202
|
+
# end
|
203
|
+
# define "webapp" do
|
204
|
+
# compile.with project("beans")
|
205
|
+
# package :war
|
206
|
+
# end
|
207
|
+
# package :zip, :classifier=>"sources", :include=>"."
|
208
|
+
# end
|
209
|
+
#
|
210
|
+
# The first time you call package, it defines the new task. Afterwards, it only uses some of the
|
211
|
+
# options (file_name, id, etc) to find an existing package task and return it.
|
212
|
+
#
|
213
|
+
# For example:
|
214
|
+
# # Create a new package that includes an existing package.
|
215
|
+
# package(:war).include project("foo:bar").package(:jar)
|
216
|
+
#
|
217
|
+
# A package is also an artifact. The following tasks operate on packages created by the project:
|
218
|
+
# rake deploy # Deploy packages created by the project
|
219
|
+
# rake install # Install packages created by the project
|
220
|
+
# rake package # Create packages
|
221
|
+
# rake uninstall # Remove previously installed packages
|
222
|
+
#
|
223
|
+
# If you want to add additional packaging types, implement a method with the name package_as_[type]
|
224
|
+
# that accepts two arguments, the file name and a hash of options. The method must yield to the
|
225
|
+
# block with the package only when first called to define the package, and must return the package
|
226
|
+
# from each call.
|
227
|
+
def package(type, options = nil)
|
228
|
+
options = options.nil? ? {} : options.dup
|
229
|
+
options[:id] ||= self.id
|
120
230
|
options[:group] ||= self.group
|
121
231
|
options[:version] ||= self.version
|
122
|
-
options[:
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
232
|
+
options[:type] = type
|
233
|
+
file_name = options[:file_name] || path_to("target", Artifact.hash_to_file_name(options))
|
234
|
+
|
235
|
+
packager = method("package_as_#{type}") rescue
|
236
|
+
fail("Do not know how to create a package of type #{:type}")
|
237
|
+
packager.call(file_name, options) do |package|
|
238
|
+
# Make it an artifact using the specifications, and tell it how to create a POM.
|
239
|
+
package.extend ActsAsArtifact
|
240
|
+
package.send :apply_spec, options
|
241
|
+
package.pom.enhance do |pom|
|
242
|
+
mkpath File.dirname(pom.name), :verbose=>false
|
243
|
+
File.open(pom.name, "w") do |file|
|
244
|
+
xml = Builder::XmlMarkup.new(:target=>file, :indent=>2)
|
245
|
+
xml.instruct!
|
246
|
+
xml.project do
|
247
|
+
xml.modelVersion "4.0.0"
|
248
|
+
xml.groupId options[:group]
|
249
|
+
xml.artifactId options[:id]
|
250
|
+
xml.version options[:version]
|
251
|
+
xml.classifier options[:classifier] if options[:classifier]
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
142
255
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
256
|
+
# Make sure the package task creates it, and it invokes the build task first.
|
257
|
+
task "package"=>package
|
258
|
+
package.enhance [task("build")]
|
259
|
+
|
260
|
+
# Install the artifact along with its POM. Since the artifact (package task) is created
|
261
|
+
# in the target directory, we need to copy it into the local repository. However, the
|
262
|
+
# POM artifact (created by calling artifact on its spec) is already mapped to its right
|
263
|
+
# place in the local repository, so we only need to invoke it.
|
264
|
+
installed = file(repositories.locate(package)=>package) { |task|
|
265
|
+
verbose(Rake.application.options.trace || false) do
|
266
|
+
mkpath File.dirname(task.name), :verbose=>false
|
267
|
+
cp package.name, task.name
|
268
|
+
end
|
269
|
+
puts "Installed #{task.name}" if verbose
|
270
|
+
}
|
271
|
+
task "install"=>[installed, package.pom]
|
272
|
+
task "uninstall" do |task|
|
273
|
+
verbose(Rake.application.options.trace || false) do
|
274
|
+
[ installed, package.pom ].map(&:to_s).each { |file| rm file if File.exist?(file) }
|
275
|
+
end
|
147
276
|
end
|
277
|
+
task("deploy") { deploy(installed, package.pom) }
|
278
|
+
|
279
|
+
# Add the package to the list of packages created by this project, and
|
280
|
+
# register it as an artifact. The later is required so if we look up the spec
|
281
|
+
# we find the package in the project's target directory, instead of finding it
|
282
|
+
# in the local repository and attempting to install it.
|
283
|
+
packages << package
|
284
|
+
Artifact.register package, package.pom
|
148
285
|
end
|
149
|
-
|
150
|
-
task("deploy") { deploy(package, package.pom) }
|
151
|
-
|
152
|
-
packages << package
|
153
|
-
Artifact.register package, package.pom
|
154
|
-
package
|
155
286
|
end
|
156
287
|
|
288
|
+
# :call-seq:
|
289
|
+
# packages() => tasks
|
290
|
+
#
|
291
|
+
# Returns all packages created by this project. A project may create any number of packages.
|
292
|
+
#
|
293
|
+
# This method is used whenever you pass a project to Buildr#artifact or any other method
|
294
|
+
# that accepts artifact specifications and projects. You can use it to list all packages
|
295
|
+
# created by the project. If you want to return a specific package, it is often more
|
296
|
+
# convenient to call #package with the type.
|
157
297
|
def packages()
|
158
298
|
@packages ||= []
|
159
299
|
end
|
160
300
|
|
161
301
|
protected
|
162
302
|
|
163
|
-
def package_as_jar(
|
164
|
-
unless Rake::Task.task_defined?(
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
task.manifest = options[:manifest] if options[:manifest]
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
def package_as_war(file, options)
|
180
|
-
unless Rake::Task.task_defined?(file)
|
181
|
-
returning(Java::Packaging::WarTask.define_task(file)) do |task|
|
182
|
-
package_extend task, options
|
183
|
-
task.include path_to(:webapp_src_dir, "*")
|
184
|
-
task.with :classes=>path_to(:java_target_dir, "**")
|
185
|
-
task.manifest = manifest.merge("Implementation-Title"=>self.comment)
|
186
|
-
task.meta_inf = meta_inf
|
303
|
+
def package_as_jar(file_name, options) #:nodoc:
|
304
|
+
unless Rake::Task.task_defined?(file_name)
|
305
|
+
Java::Packaging::JarTask.define_task(file_name).tap do |jar|
|
306
|
+
jar.manifest = options[:manifest] || manifest.merge("Implementation-Title"=>self.comment)
|
307
|
+
jar.meta_inf = options[:meta_inf] || meta_inf
|
308
|
+
if options[:include]
|
309
|
+
jar.include options[:include]
|
310
|
+
else
|
311
|
+
# Can only decide on this once we're done configuring the compile task.
|
312
|
+
enhance { jar.include compile.target, :as=>"." }
|
313
|
+
end
|
314
|
+
yield jar
|
187
315
|
end
|
188
316
|
end
|
189
|
-
|
190
|
-
returning(Java::Packaging::WarTask.define_task(file)) do |task|
|
191
|
-
task.include options[:include] if options[:include]
|
192
|
-
# Add libraries in WEB-INF lib, and classes in WEB-INF classes
|
193
|
-
task.with :libs=>options[:libs].collect if options[:libs]
|
194
|
-
task.with :classes=>options[:classes] if options[:classes]
|
195
|
-
task.manifest = options[:manifest] if options[:manifest]
|
196
|
-
end
|
317
|
+
file(file_name)
|
197
318
|
end
|
198
319
|
|
199
|
-
def
|
200
|
-
unless Rake::Task.task_defined?(
|
201
|
-
|
202
|
-
|
203
|
-
|
320
|
+
def package_as_war(file_name, options) #:nodoc:
|
321
|
+
unless Rake::Task.task_defined?(file_name)
|
322
|
+
Java::Packaging::WarTask.define_task(file_name).tap do |war|
|
323
|
+
war.manifest = options[:manifest] || manifest.merge("Implementation-Title"=>self.comment)
|
324
|
+
war.meta_inf = options[:meta_inf] || meta_inf
|
325
|
+
# Add libraries in WEB-INF lib, and classes in WEB-INF classes
|
326
|
+
if options[:classes]
|
327
|
+
war.with :classes=>options[:classes]
|
328
|
+
else
|
329
|
+
# Can only decide on this once we're done configuring the compile task.
|
330
|
+
enhance { war.with :classes=>compile.target unless compile.sources.empty? }
|
331
|
+
end
|
332
|
+
if options[:libs]
|
333
|
+
war.with :libs=>options[:libs].collect
|
334
|
+
else
|
335
|
+
# Can only decide on this once we're done configuring the compile task.
|
336
|
+
enhance { war.with :libs=>compile.classpath }
|
337
|
+
end
|
338
|
+
# Add included files, or the webapp directory.
|
339
|
+
if options[:include]
|
340
|
+
war.include options[:include]
|
341
|
+
elsif File.exist?(path_to("src/main/webapp"))
|
342
|
+
war.include path_to("src/main/webapp"), :as=>"."
|
343
|
+
end
|
344
|
+
yield war
|
204
345
|
end
|
205
346
|
end
|
206
|
-
|
207
|
-
task.include options[:include] if options[:include]
|
208
|
-
end
|
347
|
+
file(file_name)
|
209
348
|
end
|
210
349
|
|
211
|
-
def
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
File.open(task.name, "w") do |file|
|
217
|
-
xml = Builder::XmlMarkup.new(:target=>file, :indent=>2)
|
218
|
-
xml.instruct!
|
219
|
-
xml.project do
|
220
|
-
xml.modelVersion "4.0.0."
|
221
|
-
xml.groupId spec[:group]
|
222
|
-
xml.artifactId spec[:id]
|
223
|
-
xml.version spec[:version]
|
224
|
-
xml.classifier spec[:classifier] if spec[:classifier]
|
350
|
+
def package_as_zip(file_name, options) #:nodoc:
|
351
|
+
unless Rake::Task.task_defined?(file_name)
|
352
|
+
ZipTask.define_task(file_name).tap do |zip|
|
353
|
+
if options[:include]
|
354
|
+
zip.include options[:include]
|
225
355
|
end
|
356
|
+
yield zip
|
226
357
|
end
|
227
358
|
end
|
359
|
+
file(file_name)
|
228
360
|
end
|
229
361
|
|
230
362
|
end
|