buildr 1.3.0-java
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 +780 -0
- data/DISCLAIMER +7 -0
- data/KEYS +151 -0
- data/LICENSE +176 -0
- data/NOTICE +31 -0
- data/README +173 -0
- data/Rakefile +63 -0
- data/addon/buildr/antlr.rb +65 -0
- data/addon/buildr/cobertura.rb +232 -0
- data/addon/buildr/hibernate.rb +142 -0
- data/addon/buildr/javacc.rb +85 -0
- data/addon/buildr/jdepend.rb +60 -0
- data/addon/buildr/jetty.rb +248 -0
- data/addon/buildr/nailgun.rb +892 -0
- data/addon/buildr/openjpa.rb +90 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper.java +144 -0
- data/addon/buildr/xmlbeans.rb +93 -0
- data/bin/buildr +21 -0
- data/buildr.gemspec +50 -0
- data/doc/css/default.css +225 -0
- data/doc/css/print.css +95 -0
- data/doc/css/syntax.css +43 -0
- data/doc/images/apache-incubator-logo.png +0 -0
- data/doc/images/buildr-hires.png +0 -0
- data/doc/images/buildr.png +0 -0
- data/doc/images/note.png +0 -0
- data/doc/images/tip.png +0 -0
- data/doc/images/zbuildr.tif +0 -0
- data/doc/pages/artifacts.textile +317 -0
- data/doc/pages/building.textile +501 -0
- data/doc/pages/contributing.textile +178 -0
- data/doc/pages/download.textile +25 -0
- data/doc/pages/extending.textile +229 -0
- data/doc/pages/getting_started.textile +337 -0
- data/doc/pages/index.textile +63 -0
- data/doc/pages/mailing_lists.textile +17 -0
- data/doc/pages/more_stuff.textile +367 -0
- data/doc/pages/packaging.textile +592 -0
- data/doc/pages/projects.textile +449 -0
- data/doc/pages/recipes.textile +127 -0
- data/doc/pages/settings_profiles.textile +339 -0
- data/doc/pages/testing.textile +475 -0
- data/doc/pages/troubleshooting.textile +121 -0
- data/doc/pages/whats_new.textile +389 -0
- data/doc/print.haml +52 -0
- data/doc/print.toc.yaml +28 -0
- data/doc/scripts/buildr-git.rb +411 -0
- data/doc/scripts/install-jruby.sh +44 -0
- data/doc/scripts/install-linux.sh +64 -0
- data/doc/scripts/install-osx.sh +52 -0
- data/doc/site.haml +55 -0
- data/doc/site.toc.yaml +44 -0
- data/lib/buildr.rb +47 -0
- data/lib/buildr/core.rb +27 -0
- data/lib/buildr/core/application.rb +373 -0
- data/lib/buildr/core/application_cli.rb +134 -0
- data/lib/buildr/core/build.rb +262 -0
- data/lib/buildr/core/checks.rb +382 -0
- data/lib/buildr/core/common.rb +155 -0
- data/lib/buildr/core/compile.rb +594 -0
- data/lib/buildr/core/environment.rb +120 -0
- data/lib/buildr/core/filter.rb +258 -0
- data/lib/buildr/core/generate.rb +195 -0
- data/lib/buildr/core/help.rb +118 -0
- data/lib/buildr/core/progressbar.rb +156 -0
- data/lib/buildr/core/project.rb +890 -0
- data/lib/buildr/core/test.rb +690 -0
- data/lib/buildr/core/transports.rb +486 -0
- data/lib/buildr/core/util.rb +235 -0
- data/lib/buildr/ide.rb +19 -0
- data/lib/buildr/ide/eclipse.rb +181 -0
- data/lib/buildr/ide/idea.ipr.template +300 -0
- data/lib/buildr/ide/idea.rb +194 -0
- data/lib/buildr/ide/idea7x.ipr.template +290 -0
- data/lib/buildr/ide/idea7x.rb +210 -0
- data/lib/buildr/java.rb +26 -0
- data/lib/buildr/java/ant.rb +71 -0
- data/lib/buildr/java/bdd_frameworks.rb +267 -0
- data/lib/buildr/java/commands.rb +210 -0
- data/lib/buildr/java/compilers.rb +432 -0
- data/lib/buildr/java/deprecated.rb +141 -0
- data/lib/buildr/java/groovyc.rb +137 -0
- data/lib/buildr/java/jruby.rb +99 -0
- data/lib/buildr/java/org/apache/buildr/BuildrNail$Main.class +0 -0
- data/lib/buildr/java/org/apache/buildr/BuildrNail.class +0 -0
- data/lib/buildr/java/org/apache/buildr/BuildrNail.java +41 -0
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +116 -0
- data/lib/buildr/java/packaging.rb +706 -0
- data/lib/buildr/java/pom.rb +178 -0
- data/lib/buildr/java/rjb.rb +142 -0
- data/lib/buildr/java/test_frameworks.rb +290 -0
- data/lib/buildr/java/version_requirement.rb +172 -0
- data/lib/buildr/packaging.rb +21 -0
- data/lib/buildr/packaging/artifact.rb +729 -0
- data/lib/buildr/packaging/artifact_namespace.rb +957 -0
- data/lib/buildr/packaging/artifact_search.rb +140 -0
- data/lib/buildr/packaging/gems.rb +102 -0
- data/lib/buildr/packaging/package.rb +233 -0
- data/lib/buildr/packaging/tar.rb +104 -0
- data/lib/buildr/packaging/zip.rb +719 -0
- data/rakelib/apache.rake +126 -0
- data/rakelib/changelog.rake +56 -0
- data/rakelib/doc.rake +103 -0
- data/rakelib/package.rake +44 -0
- data/rakelib/release.rake +53 -0
- data/rakelib/rspec.rake +81 -0
- data/rakelib/rubyforge.rake +45 -0
- data/rakelib/scm.rake +49 -0
- data/rakelib/setup.rake +59 -0
- data/rakelib/stage.rake +45 -0
- data/spec/application_spec.rb +316 -0
- data/spec/archive_spec.rb +494 -0
- data/spec/artifact_namespace_spec.rb +635 -0
- data/spec/artifact_spec.rb +738 -0
- data/spec/build_spec.rb +193 -0
- data/spec/checks_spec.rb +537 -0
- data/spec/common_spec.rb +579 -0
- data/spec/compile_spec.rb +561 -0
- data/spec/groovy_compilers_spec.rb +239 -0
- data/spec/java_bdd_frameworks_spec.rb +238 -0
- data/spec/java_compilers_spec.rb +446 -0
- data/spec/java_packaging_spec.rb +1042 -0
- data/spec/java_test_frameworks_spec.rb +414 -0
- data/spec/packaging_helper.rb +63 -0
- data/spec/packaging_spec.rb +589 -0
- data/spec/project_spec.rb +739 -0
- data/spec/sandbox.rb +116 -0
- data/spec/scala_compilers_spec.rb +239 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helpers.rb +283 -0
- data/spec/test_spec.rb +871 -0
- data/spec/transport_spec.rb +300 -0
- data/spec/version_requirement_spec.rb +115 -0
- metadata +324 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations under
|
|
14
|
+
# the License.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# Base module for all things Java.
|
|
18
|
+
module Java
|
|
19
|
+
|
|
20
|
+
# JDK commands: java, javac, javadoc, etc.
|
|
21
|
+
module Commands
|
|
22
|
+
|
|
23
|
+
class << self
|
|
24
|
+
|
|
25
|
+
# :call-seq:
|
|
26
|
+
# java(class, *args, options?)
|
|
27
|
+
#
|
|
28
|
+
# Runs Java with the specified arguments.
|
|
29
|
+
#
|
|
30
|
+
# The last argument may be a Hash with additional options:
|
|
31
|
+
# * :classpath -- One or more file names, tasks or artifact specifications.
|
|
32
|
+
# These are all expanded into artifacts, and all tasks are invoked.
|
|
33
|
+
# * :java_args -- Any additional arguments to pass (e.g. -hotspot, -xms)
|
|
34
|
+
# * :properties -- Hash of system properties (e.g. 'path'=>base_dir).
|
|
35
|
+
# * :name -- Shows this name, otherwise shows the first argument (the class name).
|
|
36
|
+
# * :verbose -- If true, prints the command and all its argument.
|
|
37
|
+
def java(*args, &block)
|
|
38
|
+
options = Hash === args.last ? args.pop : {}
|
|
39
|
+
options[:verbose] ||= Buildr.application.options.trace || false
|
|
40
|
+
rake_check_options options, :classpath, :java_args, :properties, :name, :verbose
|
|
41
|
+
|
|
42
|
+
name = options[:name] || "java #{args.first}"
|
|
43
|
+
cmd_args = [path_to_bin('java')]
|
|
44
|
+
classpath = classpath_from(options)
|
|
45
|
+
cmd_args << '-classpath' << classpath.join(File::PATH_SEPARATOR) unless classpath.empty?
|
|
46
|
+
options[:properties].each { |k, v| cmd_args << "-D#{k}=#{v}" } if options[:properties]
|
|
47
|
+
cmd_args += (options[:java_args] || (ENV['JAVA_OPTS'] || ENV['JAVA_OPTIONS']).to_s.split).flatten
|
|
48
|
+
cmd_args += args.flatten.compact
|
|
49
|
+
unless Buildr.application.options.dryrun
|
|
50
|
+
puts "Running #{name}" if verbose
|
|
51
|
+
block = lambda { |ok, res| fail "Failed to execute #{name}, see errors above" unless ok } unless block
|
|
52
|
+
puts cmd_args.join(' ') if Buildr.application.options.trace
|
|
53
|
+
system(*cmd_args).tap do |ok|
|
|
54
|
+
block.call ok, $?
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# :call-seq:
|
|
60
|
+
# apt(*files, options)
|
|
61
|
+
#
|
|
62
|
+
# Runs Apt with the specified arguments.
|
|
63
|
+
#
|
|
64
|
+
# The last argument may be a Hash with additional options:
|
|
65
|
+
# * :compile -- If true, compile source files to class files.
|
|
66
|
+
# * :source -- Specifies source compatibility with a given JVM release.
|
|
67
|
+
# * :output -- Directory where to place the generated source files, or the
|
|
68
|
+
# generated class files when compiling.
|
|
69
|
+
# * :classpath -- One or more file names, tasks or artifact specifications.
|
|
70
|
+
# These are all expanded into artifacts, and all tasks are invoked.
|
|
71
|
+
def apt(*args)
|
|
72
|
+
options = Hash === args.last ? args.pop : {}
|
|
73
|
+
rake_check_options options, :compile, :source, :output, :classpath
|
|
74
|
+
|
|
75
|
+
files = args.flatten.map(&:to_s).
|
|
76
|
+
collect { |arg| File.directory?(arg) ? FileList["#{arg}/**/*.java"] : arg }.flatten
|
|
77
|
+
cmd_args = [ Buildr.application.options.trace ? '-verbose' : '-nowarn' ]
|
|
78
|
+
if options[:compile]
|
|
79
|
+
cmd_args << '-d' << options[:output].to_s
|
|
80
|
+
else
|
|
81
|
+
cmd_args << '-nocompile' << '-s' << options[:output].to_s
|
|
82
|
+
end
|
|
83
|
+
cmd_args << '-source' << options[:source] if options[:source]
|
|
84
|
+
classpath = classpath_from(options)
|
|
85
|
+
tools = File.expand_path('lib/tools.jar', ENV['JAVA_HOME']) if ENV['JAVA_HOME']
|
|
86
|
+
classpath << tools if tools && File.exist?(tools)
|
|
87
|
+
cmd_args << '-classpath' << classpath.join(File::PATH_SEPARATOR) unless classpath.empty?
|
|
88
|
+
cmd_args += files
|
|
89
|
+
unless Buildr.application.options.dryrun
|
|
90
|
+
puts 'Running apt' if verbose
|
|
91
|
+
puts (['apt'] + cmd_args).join(' ') if Buildr.application.options.trace
|
|
92
|
+
Java.load
|
|
93
|
+
Java.com.sun.tools.apt.Main.process(cmd_args.to_java(Java.java.lang.String)) == 0 or
|
|
94
|
+
fail 'Failed to process annotations, see errors above'
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# :call-seq:
|
|
99
|
+
# javac(*files, options)
|
|
100
|
+
#
|
|
101
|
+
# Runs Javac with the specified arguments.
|
|
102
|
+
#
|
|
103
|
+
# The last argument may be a Hash with additional options:
|
|
104
|
+
# * :output -- Target directory for all compiled class files.
|
|
105
|
+
# * :classpath -- One or more file names, tasks or artifact specifications.
|
|
106
|
+
# These are all expanded into artifacts, and all tasks are invoked.
|
|
107
|
+
# * :sourcepath -- Additional source paths to use.
|
|
108
|
+
# * :javac_args -- Any additional arguments to pass (e.g. -extdirs, -encoding)
|
|
109
|
+
# * :name -- Shows this name, otherwise shows the working directory.
|
|
110
|
+
def javac(*args)
|
|
111
|
+
options = Hash === args.last ? args.pop : {}
|
|
112
|
+
rake_check_options options, :classpath, :sourcepath, :output, :javac_args, :name
|
|
113
|
+
|
|
114
|
+
files = args.flatten.each { |f| f.invoke if f.respond_to?(:invoke) }.map(&:to_s).
|
|
115
|
+
collect { |arg| File.directory?(arg) ? FileList["#{arg}/**/*.java"] : arg }.flatten
|
|
116
|
+
name = options[:name] || Dir.pwd
|
|
117
|
+
|
|
118
|
+
cmd_args = []
|
|
119
|
+
classpath = classpath_from(options)
|
|
120
|
+
cmd_args << '-classpath' << classpath.join(File::PATH_SEPARATOR) unless classpath.empty?
|
|
121
|
+
cmd_args << '-sourcepath' << options[:sourcepath].join(File::PATH_SEPARATOR) if options[:sourcepath]
|
|
122
|
+
cmd_args << '-d' << options[:output].to_s if options[:output]
|
|
123
|
+
cmd_args += options[:javac_args].flatten if options[:javac_args]
|
|
124
|
+
cmd_args += files
|
|
125
|
+
unless Buildr.application.options.dryrun
|
|
126
|
+
puts "Compiling #{files.size} source files in #{name}" if verbose
|
|
127
|
+
puts (['javac'] + cmd_args).join(' ') if Buildr.application.options.trace
|
|
128
|
+
Java.load
|
|
129
|
+
Java.com.sun.tools.javac.Main.compile(cmd_args.to_java(Java.java.lang.String)) == 0 or
|
|
130
|
+
fail 'Failed to compile, see errors above'
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# :call-seq:
|
|
135
|
+
# javadoc(*files, options)
|
|
136
|
+
#
|
|
137
|
+
# Runs Javadocs with the specified files and options.
|
|
138
|
+
#
|
|
139
|
+
# This method accepts the following special options:
|
|
140
|
+
# * :output -- The output directory
|
|
141
|
+
# * :classpath -- Array of classpath dependencies.
|
|
142
|
+
# * :sourcepath -- Array of sourcepaths (paths or tasks).
|
|
143
|
+
# * :name -- Shows this name, otherwise shows the working directory.
|
|
144
|
+
#
|
|
145
|
+
# All other options are passed to Javadoc as following:
|
|
146
|
+
# * true -- As is, for example, :author=>true becomes -author
|
|
147
|
+
# * false -- Prefixed, for example, :index=>false becomes -noindex
|
|
148
|
+
# * string -- Option with value, for example, :windowtitle=>'My project' becomes -windowtitle "My project"
|
|
149
|
+
# * array -- Option with set of values separated by spaces.
|
|
150
|
+
def javadoc(*args)
|
|
151
|
+
options = Hash === args.last ? args.pop : {}
|
|
152
|
+
|
|
153
|
+
cmd_args = [ '-d', options[:output], Buildr.application.options.trace ? '-verbose' : '-quiet' ]
|
|
154
|
+
options.reject { |key, value| [:output, :name, :sourcepath, :classpath].include?(key) }.
|
|
155
|
+
each { |key, value| value.invoke if value.respond_to?(:invoke) }.
|
|
156
|
+
each do |key, value|
|
|
157
|
+
case value
|
|
158
|
+
when true, nil
|
|
159
|
+
cmd_args << "-#{key}"
|
|
160
|
+
when false
|
|
161
|
+
cmd_args << "-no#{key}"
|
|
162
|
+
when Hash
|
|
163
|
+
value.each { |k,v| cmd_args << "-#{key}" << k.to_s << v.to_s }
|
|
164
|
+
else
|
|
165
|
+
cmd_args += Array(value).map { |item| ["-#{key}", item.to_s] }.flatten
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
[:sourcepath, :classpath].each do |option|
|
|
169
|
+
options[option].to_a.flatten.tap do |paths|
|
|
170
|
+
cmd_args << "-#{option}" << paths.flatten.map(&:to_s).join(File::PATH_SEPARATOR) unless paths.empty?
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
cmd_args += args.flatten.uniq
|
|
174
|
+
name = options[:name] || Dir.pwd
|
|
175
|
+
unless Buildr.application.options.dryrun
|
|
176
|
+
puts "Generating Javadoc for #{name}" if verbose
|
|
177
|
+
puts (['javadoc'] + cmd_args).join(' ') if Buildr.application.options.trace
|
|
178
|
+
Java.load
|
|
179
|
+
Java.com.sun.tools.javadoc.Main.execute(cmd_args.to_java(Java.java.lang.String)) == 0 or
|
|
180
|
+
fail 'Failed to generate Javadocs, see errors above'
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
protected
|
|
185
|
+
|
|
186
|
+
# :call-seq:
|
|
187
|
+
# path_to_bin(cmd?) => path
|
|
188
|
+
#
|
|
189
|
+
# Returns the path to the specified Java command (with no argument to java itself).
|
|
190
|
+
def path_to_bin(name = nil)
|
|
191
|
+
home = ENV['JAVA_HOME'] or fail 'Are we forgetting something? JAVA_HOME not set.'
|
|
192
|
+
File.expand_path(File.join(home, 'bin', name.to_s))
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# :call-seq:
|
|
196
|
+
# classpath_from(options) => files
|
|
197
|
+
#
|
|
198
|
+
# Extracts the classpath from the options, expands it by calling artifacts, invokes
|
|
199
|
+
# each of the artifacts and returns an array of paths.
|
|
200
|
+
def classpath_from(options)
|
|
201
|
+
Buildr.artifacts(options[:classpath] || []).map(&:to_s).
|
|
202
|
+
map { |t| task(t).invoke; File.expand_path(t) }
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
end
|
|
210
|
+
|
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations under
|
|
14
|
+
# the License.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
require 'buildr/core/project'
|
|
18
|
+
require 'buildr/core/common'
|
|
19
|
+
require 'buildr/core/compile'
|
|
20
|
+
require 'buildr/packaging'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module Buildr
|
|
24
|
+
module Compiler
|
|
25
|
+
|
|
26
|
+
# Javac compiler:
|
|
27
|
+
# compile.using(:javac)
|
|
28
|
+
# Used by default if .java files are found in the src/main/java directory (or src/test/java)
|
|
29
|
+
# and sets the target directory to target/classes (or target/test/classes).
|
|
30
|
+
#
|
|
31
|
+
# Accepts the following options:
|
|
32
|
+
# * :warnings -- Issue warnings when compiling. True when running in verbose mode.
|
|
33
|
+
# * :debug -- Generates bytecode with debugging information. Set from the debug
|
|
34
|
+
# environment variable/global option.
|
|
35
|
+
# * :deprecation -- If true, shows deprecation messages. False by default.
|
|
36
|
+
# * :source -- Source code compatibility.
|
|
37
|
+
# * :target -- Bytecode compatibility.
|
|
38
|
+
# * :lint -- Lint option is one of true, false (default), name (e.g. 'cast') or array.
|
|
39
|
+
# * :other -- Array of options passed to the compiler (e.g. '-implicit:none')
|
|
40
|
+
class Javac < Base
|
|
41
|
+
|
|
42
|
+
OPTIONS = [:warnings, :debug, :deprecation, :source, :target, :lint, :other]
|
|
43
|
+
|
|
44
|
+
specify :language=>:java, :target=>'classes', :target_ext=>'class', :packaging=>:jar
|
|
45
|
+
|
|
46
|
+
def initialize(project, options) #:nodoc:
|
|
47
|
+
super
|
|
48
|
+
options[:debug] = Buildr.options.debug if options[:debug].nil?
|
|
49
|
+
options[:warnings] = verbose if options[:warnings].nil?
|
|
50
|
+
options[:deprecation] ||= false
|
|
51
|
+
options[:lint] ||= false
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def compile(sources, target, dependencies) #:nodoc:
|
|
55
|
+
check_options options, OPTIONS
|
|
56
|
+
cmd_args = []
|
|
57
|
+
tools = File.expand_path('lib/tools.jar', ENV['JAVA_HOME']) if ENV['JAVA_HOME']
|
|
58
|
+
dependencies << tools if tools && File.exist?(tools)
|
|
59
|
+
cmd_args << '-classpath' << dependencies.join(File::PATH_SEPARATOR) unless dependencies.empty?
|
|
60
|
+
source_paths = sources.select { |source| File.directory?(source) }
|
|
61
|
+
cmd_args << '-sourcepath' << source_paths.join(File::PATH_SEPARATOR) unless source_paths.empty?
|
|
62
|
+
cmd_args << '-d' << File.expand_path(target)
|
|
63
|
+
cmd_args += javac_args
|
|
64
|
+
cmd_args += files_from_sources(sources)
|
|
65
|
+
unless Buildr.application.options.dryrun
|
|
66
|
+
puts (['javac'] + cmd_args).join(' ') if Buildr.application.options.trace
|
|
67
|
+
Java.load
|
|
68
|
+
Java.com.sun.tools.javac.Main.compile(cmd_args.to_java(Java.java.lang.String)) == 0 or
|
|
69
|
+
fail 'Failed to compile, see errors above'
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
|
|
75
|
+
def javac_args #:nodoc:
|
|
76
|
+
args = []
|
|
77
|
+
args << '-nowarn' unless options[:warnings]
|
|
78
|
+
args << '-verbose' if Buildr.application.options.trace
|
|
79
|
+
args << '-g' if options[:debug]
|
|
80
|
+
args << '-deprecation' if options[:deprecation]
|
|
81
|
+
args << '-source' << options[:source].to_s if options[:source]
|
|
82
|
+
args << '-target' << options[:target].to_s if options[:target]
|
|
83
|
+
case options[:lint]
|
|
84
|
+
when Array then args << "-Xlint:#{options[:lint].join(',')}"
|
|
85
|
+
when String then args << "-Xlint:#{options[:lint]}"
|
|
86
|
+
when true then args << '-Xlint'
|
|
87
|
+
end
|
|
88
|
+
args + Array(options[:other])
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# Scalac compiler:
|
|
95
|
+
# compile.using(:scalac)
|
|
96
|
+
# Used by default if .scala files are found in the src/main/scala directory (or src/test/scala)
|
|
97
|
+
# and sets the target directory to target/classes (or target/test/classes).
|
|
98
|
+
#
|
|
99
|
+
# Accepts the following options:
|
|
100
|
+
# * :warnings -- Generate warnings if true (opposite of -nowarn).
|
|
101
|
+
# * :deprecation -- Output source locations where deprecated APIs are used.
|
|
102
|
+
# * :optimise -- Generates faster bytecode by applying optimisations to the program.
|
|
103
|
+
# * :source -- Source compatibility with specified release.
|
|
104
|
+
# * :target -- Class file compatibility with specified release.
|
|
105
|
+
# * :debug -- Generate debugging info.
|
|
106
|
+
# * :other -- Array of options to pass to the Scalac compiler as is, e.g. -Xprint-types
|
|
107
|
+
class Scalac < Base
|
|
108
|
+
class << self
|
|
109
|
+
def scala_home
|
|
110
|
+
@home ||= ENV['SCALA_HOME']
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def dependencies
|
|
114
|
+
[ 'scala-library.jar', 'scala-compiler.jar'].map { |jar| File.expand_path("lib/#{jar}", scala_home) }
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def use_fsc
|
|
118
|
+
ENV["USE_FSC"] =~ /^(yes|on|true)$/i
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
OPTIONS = [:warnings, :deprecation, :optimise, :source, :target, :debug, :other]
|
|
123
|
+
Java.classpath << dependencies unless Scalac.use_fsc
|
|
124
|
+
|
|
125
|
+
specify :language=>:scala, :target=>'classes', :target_ext=>'class', :packaging=>:jar
|
|
126
|
+
|
|
127
|
+
def initialize(project, options) #:nodoc:
|
|
128
|
+
super
|
|
129
|
+
options[:debug] = Buildr.options.debug if options[:debug].nil?
|
|
130
|
+
options[:warnings] = verbose if options[:warnings].nil?
|
|
131
|
+
options[:deprecation] ||= false
|
|
132
|
+
options[:optimise] ||= false
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def compile(sources, target, dependencies) #:nodoc:
|
|
136
|
+
check_options options, OPTIONS
|
|
137
|
+
|
|
138
|
+
cmd_args = []
|
|
139
|
+
cmd_args << '-classpath' << (dependencies + Scalac.dependencies).join(File::PATH_SEPARATOR)
|
|
140
|
+
source_paths = sources.select { |source| File.directory?(source) }
|
|
141
|
+
cmd_args << '-sourcepath' << source_paths.join(File::PATH_SEPARATOR) unless source_paths.empty?
|
|
142
|
+
cmd_args << '-d' << File.expand_path(target)
|
|
143
|
+
cmd_args += scalac_args
|
|
144
|
+
cmd_args += files_from_sources(sources)
|
|
145
|
+
|
|
146
|
+
unless Buildr.application.options.dryrun
|
|
147
|
+
Scalac.scala_home or fail 'Are we forgetting something? SCALA_HOME not set.'
|
|
148
|
+
puts (['scalac'] + cmd_args).join(' ') if Buildr.application.options.trace
|
|
149
|
+
if Scalac.use_fsc
|
|
150
|
+
system(([File.expand_path('bin/fsc', Scalac.scala_home)] + cmd_args).join(' ')) or
|
|
151
|
+
fail 'Failed to compile, see errors above'
|
|
152
|
+
else
|
|
153
|
+
Java.load
|
|
154
|
+
Java.scala.tools.nsc.Main.process(cmd_args.to_java(Java.java.lang.String))
|
|
155
|
+
fail 'Failed to compile, see errors above' if Java.scala.tools.nsc.Main.reporter.hasErrors
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
private
|
|
161
|
+
|
|
162
|
+
# Returns Scalac command line arguments from the set of options.
|
|
163
|
+
def scalac_args #:nodoc:
|
|
164
|
+
args = []
|
|
165
|
+
args << "-nowarn" unless options[:warnings]
|
|
166
|
+
args << "-verbose" if Buildr.application.options.trace
|
|
167
|
+
args << "-g" if options[:debug]
|
|
168
|
+
args << "-deprecation" if options[:deprecation]
|
|
169
|
+
args << "-optimise" if options[:optimise]
|
|
170
|
+
args << "-source" << options[:source].to_s if options[:source]
|
|
171
|
+
args << "-target:jvm-" + options[:target].to_s if options[:target]
|
|
172
|
+
args + Array(options[:other])
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
# Methods added to Project for creating JavaDoc documentation.
|
|
180
|
+
module Javadoc
|
|
181
|
+
|
|
182
|
+
# A convenient task for creating Javadocs from the project's compile task. Minimizes all
|
|
183
|
+
# the hard work to calling #from and #using.
|
|
184
|
+
#
|
|
185
|
+
# For example:
|
|
186
|
+
# javadoc.from(projects('myapp:foo', 'myapp:bar')).using(:windowtitle=>'My App')
|
|
187
|
+
# Or, short and sweet:
|
|
188
|
+
# desc 'My App'
|
|
189
|
+
# define 'myapp' do
|
|
190
|
+
# . . .
|
|
191
|
+
# javadoc projects('myapp:foo', 'myapp:bar')
|
|
192
|
+
# end
|
|
193
|
+
class JavadocTask < Rake::Task
|
|
194
|
+
|
|
195
|
+
def initialize(*args) #:nodoc:
|
|
196
|
+
super
|
|
197
|
+
@options = {}
|
|
198
|
+
@classpath = []
|
|
199
|
+
@sourcepath = []
|
|
200
|
+
@files = FileList[]
|
|
201
|
+
enhance do |task|
|
|
202
|
+
rm_rf target.to_s, :verbose=>false
|
|
203
|
+
generate source_files, File.expand_path(target.to_s), options.merge(:classpath=>classpath, :sourcepath=>sourcepath)
|
|
204
|
+
touch target.to_s, :verbose=>false
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
# The target directory for the generated Javadoc files.
|
|
209
|
+
attr_reader :target
|
|
210
|
+
|
|
211
|
+
# :call-seq:
|
|
212
|
+
# into(path) => self
|
|
213
|
+
#
|
|
214
|
+
# Sets the target directory and returns self. This will also set the Javadoc task
|
|
215
|
+
# as a prerequisite to a file task on the target directory.
|
|
216
|
+
#
|
|
217
|
+
# For example:
|
|
218
|
+
# package :zip, :classifier=>'docs', :include=>javadoc.target
|
|
219
|
+
def into(path)
|
|
220
|
+
@target = file(path.to_s).enhance([self]) unless @target && @target.to_s == path.to_s
|
|
221
|
+
self
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# :call-seq:
|
|
225
|
+
# include(*files) => self
|
|
226
|
+
#
|
|
227
|
+
# Includes additional source files and directories when generating the documentation
|
|
228
|
+
# and returns self. When specifying a directory, includes all .java files in that directory.
|
|
229
|
+
def include(*files)
|
|
230
|
+
@files.include *files.flatten.compact
|
|
231
|
+
self
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
# :call-seq:
|
|
235
|
+
# exclude(*files) => self
|
|
236
|
+
#
|
|
237
|
+
# Excludes source files and directories from generating the documentation.
|
|
238
|
+
def exclude(*files)
|
|
239
|
+
@files.exclude *files
|
|
240
|
+
self
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Classpath dependencies.
|
|
244
|
+
attr_accessor :classpath
|
|
245
|
+
|
|
246
|
+
# :call-seq:
|
|
247
|
+
# with(*artifacts) => self
|
|
248
|
+
#
|
|
249
|
+
# Adds files and artifacts as classpath dependencies, and returns self.
|
|
250
|
+
def with(*specs)
|
|
251
|
+
@classpath |= Buildr.artifacts(specs.flatten).uniq
|
|
252
|
+
self
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# Additional sourcepaths that are not part of the documented files.
|
|
256
|
+
attr_accessor :sourcepath
|
|
257
|
+
|
|
258
|
+
# Returns the Javadoc options.
|
|
259
|
+
attr_reader :options
|
|
260
|
+
|
|
261
|
+
# :call-seq:
|
|
262
|
+
# using(options) => self
|
|
263
|
+
#
|
|
264
|
+
# Sets the Javadoc options from a hash and returns self.
|
|
265
|
+
#
|
|
266
|
+
# For example:
|
|
267
|
+
# javadoc.using :windowtitle=>'My application'
|
|
268
|
+
def using(*args)
|
|
269
|
+
args.pop.each { |key, value| @options[key.to_sym] = value } if Hash === args.last
|
|
270
|
+
args.each { |key| @options[key.to_sym] = true }
|
|
271
|
+
self
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
# :call-seq:
|
|
275
|
+
# from(*sources) => self
|
|
276
|
+
#
|
|
277
|
+
# Includes files, directories and projects in the Javadoc documentation and returns self.
|
|
278
|
+
#
|
|
279
|
+
# You can call this method with Java source files and directories containing Java source files
|
|
280
|
+
# to include these files in the Javadoc documentation, similar to #include. You can also call
|
|
281
|
+
# this method with projects. When called with a project, it includes all the source files compiled
|
|
282
|
+
# by that project and classpath dependencies used when compiling.
|
|
283
|
+
#
|
|
284
|
+
# For example:
|
|
285
|
+
# javadoc.from projects('myapp:foo', 'myapp:bar')
|
|
286
|
+
def from(*sources)
|
|
287
|
+
sources.flatten.each do |source|
|
|
288
|
+
case source
|
|
289
|
+
when Project
|
|
290
|
+
self.enhance source.prerequisites
|
|
291
|
+
self.include source.compile.sources
|
|
292
|
+
self.with source.compile.dependencies
|
|
293
|
+
when Rake::Task, String
|
|
294
|
+
self.include source
|
|
295
|
+
else
|
|
296
|
+
fail "Don't know how to generate Javadocs from #{source || 'nil'}"
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
self
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
def prerequisites() #:nodoc:
|
|
303
|
+
super + @files + classpath + sourcepath
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
def source_files() #:nodoc:
|
|
307
|
+
@source_files ||= @files.map(&:to_s).
|
|
308
|
+
map { |file| File.directory?(file) ? FileList[File.join(file, "**/*.java")] : file }.
|
|
309
|
+
flatten.reject { |file| @files.exclude?(file) }
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def needed?() #:nodoc:
|
|
313
|
+
return false if source_files.empty?
|
|
314
|
+
return true unless File.exist?(target.to_s)
|
|
315
|
+
source_files.map { |src| File.stat(src.to_s).mtime }.max > File.stat(target.to_s).mtime
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
private
|
|
319
|
+
|
|
320
|
+
def generate(sources, target, options = {})
|
|
321
|
+
cmd_args = [ '-d', target, Buildr.application.options.trace ? '-verbose' : '-quiet' ]
|
|
322
|
+
options.reject { |key, value| [:sourcepath, :classpath].include?(key) }.
|
|
323
|
+
each { |key, value| value.invoke if value.respond_to?(:invoke) }.
|
|
324
|
+
each do |key, value|
|
|
325
|
+
case value
|
|
326
|
+
when true, nil
|
|
327
|
+
cmd_args << "-#{key}"
|
|
328
|
+
when false
|
|
329
|
+
cmd_args << "-no#{key}"
|
|
330
|
+
when Hash
|
|
331
|
+
value.each { |k,v| cmd_args << "-#{key}" << k.to_s << v.to_s }
|
|
332
|
+
else
|
|
333
|
+
cmd_args += Array(value).map { |item| ["-#{key}", item.to_s] }.flatten
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
[:sourcepath, :classpath].each do |option|
|
|
337
|
+
Array(options[option]).flatten.tap do |paths|
|
|
338
|
+
cmd_args << "-#{option}" << paths.flatten.map(&:to_s).join(File::PATH_SEPARATOR) unless paths.empty?
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
cmd_args += sources.flatten.uniq
|
|
342
|
+
unless Buildr.application.options.dryrun
|
|
343
|
+
puts "Generating Javadoc for #{name}" if verbose
|
|
344
|
+
puts (['javadoc'] + cmd_args).join(' ') if Buildr.application.options.trace
|
|
345
|
+
Java.load
|
|
346
|
+
Java.com.sun.tools.javadoc.Main.execute(cmd_args.to_java(Java.java.lang.String)) == 0 or
|
|
347
|
+
fail 'Failed to generate Javadocs, see errors above'
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
include Extension
|
|
355
|
+
|
|
356
|
+
first_time do
|
|
357
|
+
desc 'Create the Javadocs for this project'
|
|
358
|
+
Project.local_task('javadoc')
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
before_define do |project|
|
|
362
|
+
JavadocTask.define_task('javadoc').tap do |javadoc|
|
|
363
|
+
javadoc.into project.path_to(:target, :javadoc)
|
|
364
|
+
javadoc.using :windowtitle=>project.comment || project.name
|
|
365
|
+
end
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
after_define do |project|
|
|
369
|
+
project.javadoc.from project
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
# :call-seq:
|
|
373
|
+
# javadoc(*sources) => JavadocTask
|
|
374
|
+
#
|
|
375
|
+
# This method returns the project's Javadoc task. It also accepts a list of source files,
|
|
376
|
+
# directories and projects to include when generating the Javadocs.
|
|
377
|
+
#
|
|
378
|
+
# By default the Javadoc task uses all the source directories from compile.sources and generates
|
|
379
|
+
# Javadocs in the target/javadoc directory. This method accepts sources and adds them by calling
|
|
380
|
+
# JavadocsTask#from.
|
|
381
|
+
#
|
|
382
|
+
# For example, if you want to generate Javadocs for a given project that includes all source files
|
|
383
|
+
# in two of its sub-projects:
|
|
384
|
+
# javadoc projects('myapp:foo', 'myapp:bar').using(:windowtitle=>'Docs for foo and bar')
|
|
385
|
+
def javadoc(*sources, &block)
|
|
386
|
+
task('javadoc').from(*sources).enhance &block
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
# Methods added to Project to support the Java Annotation Processor.
|
|
393
|
+
module Apt
|
|
394
|
+
|
|
395
|
+
# :call-seq:
|
|
396
|
+
# apt(*sources) => task
|
|
397
|
+
#
|
|
398
|
+
# Returns a task that will use Java#apt to generate source files in target/generated/apt,
|
|
399
|
+
# from all the source directories passed as arguments. Uses the compile.sources list if
|
|
400
|
+
# on arguments supplied.
|
|
401
|
+
#
|
|
402
|
+
# For example:
|
|
403
|
+
#
|
|
404
|
+
def apt(*sources)
|
|
405
|
+
sources = compile.sources if sources.empty?
|
|
406
|
+
file(path_to(:target, 'generated/apt')=>sources) do |task|
|
|
407
|
+
cmd_args = [ Buildr.application.options.trace ? '-verbose' : '-nowarn' ]
|
|
408
|
+
cmd_args << '-nocompile' << '-s' << task.name
|
|
409
|
+
cmd_args << '-source' << compile.options.source if compile.options.source
|
|
410
|
+
classpath = Buildr.artifacts(compile.dependencies).map(&:to_s).each { |t| task(t).invoke }
|
|
411
|
+
cmd_args << '-classpath' << classpath.join(File::PATH_SEPARATOR) unless classpath.empty?
|
|
412
|
+
cmd_args += (sources.map(&:to_s) - [task.name]).
|
|
413
|
+
map { |file| File.directory?(file) ? FileList["#{file}/**/*.java"] : file }.flatten
|
|
414
|
+
unless Buildr.application.options.dryrun
|
|
415
|
+
puts 'Running apt' if verbose
|
|
416
|
+
puts (['apt'] + cmd_args).join(' ') if Buildr.application.options.trace
|
|
417
|
+
Java.com.sun.tools.apt.Main.process(cmd_args.to_java(Java.java.lang.String)) == 0 or
|
|
418
|
+
fail 'Failed to process annotations, see errors above'
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
Buildr::Compiler << Buildr::Compiler::Javac
|
|
428
|
+
Buildr::Compiler << Buildr::Compiler::Scalac
|
|
429
|
+
class Buildr::Project
|
|
430
|
+
include Buildr::Javadoc
|
|
431
|
+
include Buildr::Apt
|
|
432
|
+
end
|