buildr 0.14.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 +151 -0
- data/LICENSE +202 -0
- data/README +0 -0
- data/lib/buildr.rb +43 -0
- data/lib/core/artifact.rb +394 -0
- data/lib/core/build.rb +108 -0
- data/lib/core/core.rb +49 -0
- data/lib/core/project.rb +313 -0
- data/lib/core/transports.rb +381 -0
- data/lib/java/compile.rb +316 -0
- data/lib/java/java.rb +117 -0
- data/lib/java/javacc.rb +88 -0
- data/lib/java/openjpa.rb +52 -0
- data/lib/java/packaging.rb +217 -0
- data/lib/java/xmlbeans.rb +64 -0
- data/lib/tasks/download.rb +38 -0
- data/lib/tasks/filter.rb +96 -0
- data/lib/tasks/zip.rb +313 -0
- metadata +134 -0
data/lib/java/java.rb
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
module Buildr
|
2
|
+
module Java
|
3
|
+
|
4
|
+
JAVA_OPTIONS = [ :verbose, :noop, :cp, :classpath, :name, :java_args ]
|
5
|
+
|
6
|
+
def self.java(*args)
|
7
|
+
options = Hash === args.last ? args.pop : {}
|
8
|
+
options[:verbose] ||= Rake.application.options.trace || false
|
9
|
+
fu_check_options options, *JAVA_OPTIONS
|
10
|
+
|
11
|
+
name = options[:name] || "java #{args.first}"
|
12
|
+
cmd_args = []
|
13
|
+
classpath = classpath_from(options)
|
14
|
+
cmd_args << "-cp" << classpath unless classpath.empty?
|
15
|
+
cmd_args += options[:java_args].flatten if options[:java_args]
|
16
|
+
cmd_args += args.flatten.compact
|
17
|
+
cmd_args << { :verbose=>options[:verbose] }
|
18
|
+
unless options[:noop]
|
19
|
+
verbose { puts "Running #{name}" }
|
20
|
+
sh(path_to_bin("java"), *cmd_args) { |ok, res| fail "Failed to execute #{name}, see errors above" unless ok }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.apt(*args)
|
25
|
+
options = Hash === args.last ? args.pop : {}
|
26
|
+
options[:verbose] ||= Rake.application.options.trace || false
|
27
|
+
fu_check_options options, :verbose, :noop, :compile, :source, :output, :cp, :classpath, :sourcepath
|
28
|
+
|
29
|
+
files = args.collect { |arg| File.directory?(arg) ? FileList[File.join(arg, "**", "*.java")] : arg }.flatten
|
30
|
+
args = [ options[:verbose] ? "-verbose" : "-nowarn" ]
|
31
|
+
if options[:compile]
|
32
|
+
args << "-d" << options[:output]
|
33
|
+
else
|
34
|
+
args << "-nocompile" << "-s" << options[:output]
|
35
|
+
end
|
36
|
+
args << "-source" << options[:source] if options[:source]
|
37
|
+
classpath = classpath_from(options)
|
38
|
+
args << "-cp" << classpath unless classpath.empty?
|
39
|
+
sourcepath = (options[:sourcepath] || []).collect.join(File::PATH_SEPARATOR)
|
40
|
+
args << "-sourcepath" << sourcepath unless sourcepath.empty?
|
41
|
+
args += files
|
42
|
+
args << { :verbose=>options[:verbose] }
|
43
|
+
unless options[:noop]
|
44
|
+
verbose { puts "Running apt" }
|
45
|
+
sh(path_to_bin("apt"), *args) { |ok, res| fail "Failed to execute apt, see errors above" unless ok }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class AptTask < Rake::FileTask
|
50
|
+
|
51
|
+
def initialize(*args)
|
52
|
+
super
|
53
|
+
enhance do |task|
|
54
|
+
Java.apt *task.prerequisites + [options.merge(:output=>task.name)]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def options()
|
59
|
+
@options ||= {}
|
60
|
+
end
|
61
|
+
|
62
|
+
def using(options)
|
63
|
+
self.options.merge!(options)
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.apt_task(args)
|
70
|
+
output = args.keys.first
|
71
|
+
files = args.values.first.collect { |f| File.directory?(f) ? FileList[f + "/**/*.java"] : f }.flatten
|
72
|
+
AptTask.define_task(output=>files)
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.javac(*args)
|
76
|
+
options = Hash === args.last ? args.pop : {}
|
77
|
+
options[:verbose] ||= Rake.application.options.trace || false
|
78
|
+
fu_check_options options, :verbose, :noop, :cp, :classpath, :sourcepath, :output, :javac_args, :name
|
79
|
+
|
80
|
+
files = args.flatten.each { |f| f.invoke if f.respond_to?(:invoke) }.map(&:to_s).
|
81
|
+
collect { |arg| File.directory?(arg) ? FileList[File.join(arg, "**", "*.java")] : arg }.flatten
|
82
|
+
name = options[:name] || Dir.pwd
|
83
|
+
|
84
|
+
cmd_args = []
|
85
|
+
classpath = classpath_from(options)
|
86
|
+
#classpath += options[:output] if options[:output]
|
87
|
+
cmd_args << "-cp" << classpath unless classpath.empty?
|
88
|
+
cmd_args << "-sourcepath" << options[:sourcepath].join(File::PATH_SEPARATOR) if options[:sourcepath]
|
89
|
+
cmd_args << "-d" << options[:output] if options[:output]
|
90
|
+
cmd_args += options[:javac_args].flatten if options[:javac_args]
|
91
|
+
cmd_args += files
|
92
|
+
cmd_args << { :verbose=>options[:verbose] }
|
93
|
+
unless options[:noop] || files.empty?
|
94
|
+
verbose { puts "Compiling #{files.size} source files in #{name}" }
|
95
|
+
sh(path_to_bin("javac"), *cmd_args) { |ok, res| fail "Failed to compile, see errors above" unless ok }
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
protected
|
100
|
+
|
101
|
+
def self.path_to_bin(name)
|
102
|
+
ENV["JAVA_HOME"] ? File.join(ENV["JAVA_HOME"], "bin", name) : name
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.classpath_from(options)
|
106
|
+
classpath = (options[:classpath] || []).collect | (options[:cp] || []).collect
|
107
|
+
artifacts(classpath).each { |t| t.invoke if t.respond_to?(:invoke) }.
|
108
|
+
map(&:to_s).join(File::PATH_SEPARATOR)
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
def java(*args)
|
114
|
+
Java.java(*args)
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
data/lib/java/javacc.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
module Buildr
|
2
|
+
|
3
|
+
module JavaCC
|
4
|
+
|
5
|
+
JAVACC = "net.java.dev.javacc:javacc:jar:4.0"
|
6
|
+
JJTREE = "net.java.dev.javacc:javacc:jar:4.0"
|
7
|
+
|
8
|
+
def self.javacc(*args)
|
9
|
+
options = Hash === args.last ? args.pop.clone : {}
|
10
|
+
options[:verbose] ||= Rake.application.options.trace || false
|
11
|
+
fu_check_options options, *Java::JAVA_OPTIONS + [:output]
|
12
|
+
|
13
|
+
(options[:classpath] ||= []) << JAVACC
|
14
|
+
java_args = ["javacc"]
|
15
|
+
java_args << "-OUTPUT_DIRECTORY=#{options[:output]}" if options[:output]
|
16
|
+
java_args += args.collect { |f| File.directory?(f) ? FileList[f + "/**/*.jj"] : f }.flatten
|
17
|
+
java_args << options.reject { |k, v| !Java::JAVA_OPTIONS.include?(k) }
|
18
|
+
Java.java(*java_args)
|
19
|
+
end
|
20
|
+
|
21
|
+
class JavaCCTask < Rake::FileTask
|
22
|
+
|
23
|
+
def initialize(*args)
|
24
|
+
super
|
25
|
+
enhance do |task|
|
26
|
+
JavaCC.javacc *(task.prerequisites + [task.options.merge(:output=>task.name)])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def options()
|
31
|
+
@options ||= {}
|
32
|
+
end
|
33
|
+
|
34
|
+
def using(options)
|
35
|
+
self.options.merge!(options)
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.javacc_task(args)
|
42
|
+
output = args.keys.first
|
43
|
+
files = args.values.first.collect { |f| File.directory?(f) ? FileList[f + "/**/*.jj"] : f }.flatten
|
44
|
+
JavaCCTask.define_task(output=>files)
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.jjtree(*args)
|
48
|
+
options = Hash === args.last ? args.pop.clone : {}
|
49
|
+
options[:verbose] ||= Rake.application.options.trace || false
|
50
|
+
fu_check_options options, *Java::JAVA_OPTIONS + [:output, :build_node_files]
|
51
|
+
|
52
|
+
(options[:classpath] ||= []) << JJTREE
|
53
|
+
java_args = ["jjtree"]
|
54
|
+
java_args << "-OUTPUT_DIRECTORY=#{options[:output]}" if options[:output]
|
55
|
+
java_args << "-BUILD_NODE_FILES=#{options[:build_node_files]}" if options.has_key?(:build_node_files)
|
56
|
+
java_args += args.collect { |f| File.directory?(f) ? FileList[f + "/**/*.jjt"] : f }.flatten
|
57
|
+
java_args << options.reject { |k, v| !Java::JAVA_OPTIONS.include?(k) }
|
58
|
+
Java.java(*java_args)
|
59
|
+
end
|
60
|
+
|
61
|
+
class JJTreeTask < Rake::FileTask
|
62
|
+
|
63
|
+
def initialize(*args)
|
64
|
+
super
|
65
|
+
enhance do |task|
|
66
|
+
JavaCC.jjtree *(task.prerequisites + [task.options.merge(:output=>task.name)])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def options()
|
71
|
+
@options ||= {}
|
72
|
+
end
|
73
|
+
|
74
|
+
def using(options)
|
75
|
+
self.options.merge!(options)
|
76
|
+
self
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.jjtree_task(args)
|
82
|
+
output = args.keys.first
|
83
|
+
files = args.values.first.collect { |f| File.directory?(f) ? FileList[f + "/**/*.jjt"] : f }.flatten
|
84
|
+
JJTreeTask.define_task(output=>files)
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
data/lib/java/openjpa.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
module Buildr
|
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
|
+
end
|
26
|
+
|
27
|
+
def self.mapping_tool(options)
|
28
|
+
options[:verbose] ||= Rake.application.options.trace || false
|
29
|
+
fu_check_options options, *OPTIONS + [:action, :sql]
|
30
|
+
|
31
|
+
runtool options.merge(:class=>"org.apache.openjpa.jdbc.meta.MappingTool", :name=>"Mapping Tool",
|
32
|
+
:args=>{ "-p"=>options[:properties], "-sql"=>options[:sql], "-sa"=>options[:action] })
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def self.runtool(options)
|
38
|
+
classpath = REQUIRES + (options[:classpath] || []).collect | (options[:cp] || []).collect
|
39
|
+
classpath = artifacts(classpath).each { |t| t.invoke if t.respond_to?(:invoke) }.map(&:to_s)
|
40
|
+
cmd_args = ["-cp", classpath.join(File::PATH_SEPARATOR)]
|
41
|
+
cmd_args << options[:class]
|
42
|
+
cmd_args += options[:args].select { |n, v| v }.map { |n, v| [ n, v ] }.flatten
|
43
|
+
cmd_args << { :verbose=>options[:verbose] }
|
44
|
+
unless options[:noop]
|
45
|
+
verbose { puts "Running OpenJPA #{options[:name]}" }
|
46
|
+
sh(Java.path_to_bin("java"), *cmd_args) { |ok, res| fail "Failed to execute OpenJPA #{options[:name]}, see errors above" unless ok }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,217 @@
|
|
1
|
+
module Buildr
|
2
|
+
module Java
|
3
|
+
|
4
|
+
module Packaging
|
5
|
+
|
6
|
+
MANIFEST_HEADER = "Manifest-Version: 1.0\nCreated-By: Ruby Build System"
|
7
|
+
|
8
|
+
class JarTask < ZipTask
|
9
|
+
attr_accessor :manifest
|
10
|
+
|
11
|
+
def initialize(*args)
|
12
|
+
super
|
13
|
+
@manifest = true
|
14
|
+
end
|
15
|
+
|
16
|
+
def []=(key, value)
|
17
|
+
if key.to_sym == :manifest
|
18
|
+
self.manifest = value
|
19
|
+
else
|
20
|
+
super key, value
|
21
|
+
end
|
22
|
+
value
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def create(zip)
|
28
|
+
if manifest
|
29
|
+
zip.mkdir "META-INF"
|
30
|
+
zip.file.open("META-INF/MANIFEST.MF", "w") do |output|
|
31
|
+
output.write MANIFEST_HEADER
|
32
|
+
case manifest
|
33
|
+
when Hash
|
34
|
+
output.write manifest.map { |pair| pair.join(": ") }.join("\n")
|
35
|
+
when Array
|
36
|
+
manifest.each do |section|
|
37
|
+
output.write "\n"
|
38
|
+
output.write section.map { |pair| pair.join(": ") }.join("\n")
|
39
|
+
end
|
40
|
+
when Proc, Method
|
41
|
+
output.write manifest.call
|
42
|
+
when String
|
43
|
+
output.write File.read(manifest)
|
44
|
+
when true # Default behavior
|
45
|
+
end
|
46
|
+
output.write "\n"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
super zip
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
class WarTask < JarTask
|
55
|
+
|
56
|
+
def []=(key, value)
|
57
|
+
case key.to_sym
|
58
|
+
when :libs
|
59
|
+
self.include value, :path=>"WEB-INF/lib"
|
60
|
+
when :classes
|
61
|
+
self.include value, :path=>"WEB-INF/classes"
|
62
|
+
else
|
63
|
+
super key, value
|
64
|
+
end
|
65
|
+
value
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
# Create a JAR from all the pre-requisites.
|
75
|
+
#
|
76
|
+
# For example:
|
77
|
+
# jar "lib-1.0.jar"=>["target/classes", "MANIFEST,MF"]
|
78
|
+
def jar(file)
|
79
|
+
Packaging::JarTask.define_task(file)
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
# Global task packages all projects.
|
84
|
+
desc "Package all projects"
|
85
|
+
LocalDirectoryTask.define_task "package"
|
86
|
+
desc "Install packages created by this project"
|
87
|
+
LocalDirectoryTask.define_task "install"
|
88
|
+
desc "Uninstall packages created by this project"
|
89
|
+
LocalDirectoryTask.define_task "uninstall"
|
90
|
+
desc "Deploy packages created by this project"
|
91
|
+
LocalDirectoryTask.define_task "deploy"
|
92
|
+
|
93
|
+
|
94
|
+
class Project
|
95
|
+
|
96
|
+
# Group used for packaging. Inherited from parent project.
|
97
|
+
inherited_attr :group
|
98
|
+
# Version used for packaging. Inherited from parent project.
|
99
|
+
inherited_attr :version
|
100
|
+
|
101
|
+
inherited_attr :webapp_src_dir do File.join(src_dir, "main", "webapp") end
|
102
|
+
|
103
|
+
def package(*args)
|
104
|
+
if Hash === args.last
|
105
|
+
options = args.pop.clone
|
106
|
+
else
|
107
|
+
options = {}
|
108
|
+
end
|
109
|
+
options[:type] = args.shift if Symbol === args.first
|
110
|
+
fail "No packaging type specified" unless options[:type]
|
111
|
+
options[:group] ||= self.group
|
112
|
+
options[:version] ||= self.version
|
113
|
+
options[:id] ||= self.id
|
114
|
+
if String === args.first
|
115
|
+
file = args.shift
|
116
|
+
else
|
117
|
+
file = options.delete(:file) || path_to(:target_dir, Artifact.hash_to_file_name(options))
|
118
|
+
end
|
119
|
+
fail "One argument too many; expecting at most type, file name, and hash of options" unless args.empty?
|
120
|
+
|
121
|
+
packager = method("package_as_#{options[:type]}") rescue
|
122
|
+
fail("Do not know how to create a package of type #{options[:type]}")
|
123
|
+
package = packager.call(file, options) or fail("Do not know how to create a package of type #{options[:type]}")
|
124
|
+
|
125
|
+
task("package").enhance [package]
|
126
|
+
package.enhance [task("build")]
|
127
|
+
|
128
|
+
task "install"=>[
|
129
|
+
file_create(File.dirname(repositories.locate(package))) { |task| mkpath task.name, :verbose=>false },
|
130
|
+
file(repositories.locate(package)=>package) { |task| cp package.name, task.name },
|
131
|
+
package.pom
|
132
|
+
]
|
133
|
+
|
134
|
+
task "uninstall" do |task|
|
135
|
+
verbose(Rake.application.options.trace) do
|
136
|
+
rm repositories.locate(package)
|
137
|
+
rm repositories.locate(package.pom)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
task "deploy"=>deploy(package, package.pom)
|
142
|
+
|
143
|
+
packages << package
|
144
|
+
Artifact.register package
|
145
|
+
package
|
146
|
+
end
|
147
|
+
|
148
|
+
def packages()
|
149
|
+
@packages ||= []
|
150
|
+
end
|
151
|
+
|
152
|
+
protected
|
153
|
+
|
154
|
+
def package_as_jar(file, options)
|
155
|
+
returning(Java::Packaging::JarTask.define_task(file)) do |task|
|
156
|
+
package_extend task, options
|
157
|
+
task.include path_to(:java_target_dir, "*")
|
158
|
+
task.include options[:include] if options[:include]
|
159
|
+
task.manifest = options[:manifest] if options[:manifest]
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def package_as_war(file, options)
|
164
|
+
# Add anything we find in webapp sources directory.
|
165
|
+
returning(Java::Packaging::WarTask.define_task(file)) do |task|
|
166
|
+
package_extend task, options
|
167
|
+
task.include path_to(:webapp_src_dir, "*")
|
168
|
+
task.include options[:include] if options[:include]
|
169
|
+
# Add libraries in WEB-INF lib, and classes in WEB-INF classes
|
170
|
+
task.with :libs=>options[:libs].collect if options[:libs]
|
171
|
+
task.with :classes=>(options[:classes] || path_to(:java_target_dir, "**")) unless options[:classes] == false
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def package_as_zip(file, options)
|
176
|
+
returning(ZipTask.define_task(file)) do |task|
|
177
|
+
package_extend task, options
|
178
|
+
task.include path_to(:java_target_dir, "*")
|
179
|
+
task.include options[:include] if options[:include]
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
def package_extend(task, spec)
|
184
|
+
task.extend ActsAsArtifact
|
185
|
+
task.apply_spec spec
|
186
|
+
task.pom.enhance do |task|
|
187
|
+
mkpath File.dirname(task.name), :verbose=>false
|
188
|
+
File.open(task.name, "w") do |file|
|
189
|
+
xml = Builder::XmlMarkup.new(:target=>file, :indent=>2)
|
190
|
+
xml.instruct!
|
191
|
+
xml.project do
|
192
|
+
xml.modelVersion "4.0.0."
|
193
|
+
xml.groupId spec[:group]
|
194
|
+
xml.artifactId spec[:id]
|
195
|
+
xml.version spec[:version]
|
196
|
+
xml.classifier spec[:classifier] if spec[:classifier]
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
Project.on_create do |project|
|
206
|
+
# Recursive tasks must be defined in before_create.
|
207
|
+
desc "Create packages in this project"
|
208
|
+
project.recursive_task "package"=>"build"
|
209
|
+
desc "Install packages created by this project"
|
210
|
+
project.recursive_task "install"=>"package"
|
211
|
+
desc "Uninstall packages created by this project"
|
212
|
+
project.recursive_task "uninstall"
|
213
|
+
desc "Deploy packages created by this project"
|
214
|
+
project.recursive_task "deploy"=>"package"
|
215
|
+
end
|
216
|
+
|
217
|
+
end
|