buildr 1.3.2-java → 1.3.3-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 +66 -4
- data/{README → README.rdoc} +29 -16
- data/Rakefile +16 -20
- data/_buildr +38 -0
- data/addon/buildr/cobertura.rb +49 -45
- data/addon/buildr/emma.rb +238 -0
- data/addon/buildr/jetty.rb +1 -1
- data/addon/buildr/nailgun.rb +585 -661
- data/{lib/buildr/java → addon/buildr}/org/apache/buildr/BuildrNail$Main.class +0 -0
- data/{lib/buildr/java → addon/buildr}/org/apache/buildr/BuildrNail.class +0 -0
- data/{lib/buildr/java → addon/buildr}/org/apache/buildr/BuildrNail.java +0 -0
- data/bin/buildr +9 -2
- data/buildr.buildfile +53 -0
- data/buildr.gemspec +21 -14
- data/doc/css/default.css +51 -48
- data/doc/css/print.css +60 -55
- data/doc/images/favicon.png +0 -0
- data/doc/images/growl-icon.tiff +0 -0
- data/doc/images/project-structure.png +0 -0
- data/doc/pages/artifacts.textile +46 -156
- data/doc/pages/building.textile +63 -323
- data/doc/pages/contributing.textile +112 -102
- data/doc/pages/download.textile +19 -27
- data/doc/pages/extending.textile +27 -81
- data/doc/pages/getting_started.textile +44 -119
- data/doc/pages/index.textile +26 -47
- data/doc/pages/languages.textile +407 -0
- data/doc/pages/more_stuff.textile +92 -173
- data/doc/pages/packaging.textile +71 -239
- data/doc/pages/projects.textile +58 -233
- data/doc/pages/recipes.textile +19 -43
- data/doc/pages/settings_profiles.textile +39 -104
- data/doc/pages/testing.textile +41 -304
- data/doc/pages/troubleshooting.textile +29 -47
- data/doc/pages/whats_new.textile +69 -167
- data/doc/print.haml +0 -1
- data/doc/print.toc.yaml +1 -0
- data/doc/scripts/buildr-git.rb +1 -1
- data/doc/site.haml +1 -0
- data/doc/site.toc.yaml +8 -5
- data/{KEYS → etc/KEYS} +0 -0
- data/etc/git-svn-authors +16 -0
- data/lib/buildr.rb +2 -5
- data/lib/buildr/core/application.rb +192 -98
- data/lib/buildr/core/build.rb +140 -91
- data/lib/buildr/core/checks.rb +5 -5
- data/lib/buildr/core/common.rb +1 -1
- data/lib/buildr/core/compile.rb +12 -10
- data/lib/buildr/core/filter.rb +151 -46
- data/lib/buildr/core/generate.rb +9 -9
- data/lib/buildr/core/progressbar.rb +1 -1
- data/lib/buildr/core/project.rb +8 -7
- data/lib/buildr/core/test.rb +51 -26
- data/lib/buildr/core/transports.rb +22 -38
- data/lib/buildr/core/util.rb +78 -26
- data/lib/buildr/groovy.rb +18 -0
- data/lib/buildr/groovy/bdd.rb +105 -0
- data/lib/buildr/groovy/compiler.rb +138 -0
- data/lib/buildr/ide/eclipse.rb +102 -71
- data/lib/buildr/ide/idea.rb +7 -12
- data/lib/buildr/ide/idea7x.rb +7 -8
- data/lib/buildr/java.rb +4 -7
- data/lib/buildr/java/ant.rb +26 -5
- data/lib/buildr/java/bdd.rb +449 -0
- data/lib/buildr/java/commands.rb +9 -9
- data/lib/buildr/java/{compilers.rb → compiler.rb} +8 -90
- data/lib/buildr/java/jruby.rb +29 -11
- data/lib/buildr/java/jtestr_runner.rb.erb +116 -0
- data/lib/buildr/java/packaging.rb +23 -16
- data/lib/buildr/java/pom.rb +1 -1
- data/lib/buildr/java/rjb.rb +21 -8
- data/lib/buildr/java/test_result.rb +308 -0
- data/lib/buildr/java/tests.rb +324 -0
- data/lib/buildr/packaging/artifact.rb +12 -11
- data/lib/buildr/packaging/artifact_namespace.rb +7 -4
- data/lib/buildr/packaging/gems.rb +3 -3
- data/lib/buildr/packaging/zip.rb +13 -10
- data/lib/buildr/resources/buildr.icns +0 -0
- data/lib/buildr/scala.rb +19 -0
- data/lib/buildr/scala/compiler.rb +109 -0
- data/lib/buildr/scala/tests.rb +203 -0
- data/rakelib/apache.rake +71 -45
- data/rakelib/doc.rake +2 -2
- data/rakelib/package.rake +3 -2
- data/rakelib/rspec.rake +23 -21
- data/rakelib/setup.rake +34 -9
- data/rakelib/stage.rake +4 -1
- data/spec/addon/cobertura_spec.rb +77 -0
- data/spec/addon/emma_spec.rb +120 -0
- data/spec/addon/test_coverage_spec.rb +255 -0
- data/spec/{application_spec.rb → core/application_spec.rb} +82 -4
- data/spec/{artifact_namespace_spec.rb → core/artifact_namespace_spec.rb} +12 -1
- data/spec/core/build_spec.rb +415 -0
- data/spec/{checks_spec.rb → core/checks_spec.rb} +2 -2
- data/spec/{common_spec.rb → core/common_spec.rb} +119 -30
- data/spec/{compile_spec.rb → core/compile_spec.rb} +17 -13
- data/spec/core/generate_spec.rb +33 -0
- data/spec/{project_spec.rb → core/project_spec.rb} +9 -6
- data/spec/{test_spec.rb → core/test_spec.rb} +222 -28
- data/spec/{transport_spec.rb → core/transport_spec.rb} +5 -9
- data/spec/groovy/bdd_spec.rb +80 -0
- data/spec/{groovy_compilers_spec.rb → groovy/compiler_spec.rb} +1 -1
- data/spec/ide/eclipse_spec.rb +243 -0
- data/spec/{java_spec.rb → java/ant.rb} +7 -17
- data/spec/java/bdd_spec.rb +358 -0
- data/spec/{java_compilers_spec.rb → java/compiler_spec.rb} +1 -1
- data/spec/java/java_spec.rb +88 -0
- data/spec/{java_packaging_spec.rb → java/packaging_spec.rb} +65 -4
- data/spec/{java_test_frameworks_spec.rb → java/tests_spec.rb} +31 -10
- data/spec/{archive_spec.rb → packaging/archive_spec.rb} +12 -2
- data/spec/{artifact_spec.rb → packaging/artifact_spec.rb} +12 -5
- data/spec/{packaging_helper.rb → packaging/packaging_helper.rb} +0 -0
- data/spec/{packaging_spec.rb → packaging/packaging_spec.rb} +1 -1
- data/spec/sandbox.rb +22 -5
- data/spec/{scala_compilers_spec.rb → scala/compiler_spec.rb} +1 -1
- data/spec/{scala_test_frameworks_spec.rb → scala/tests_spec.rb} +11 -12
- data/spec/spec_helpers.rb +38 -17
- metadata +93 -70
- data/lib/buildr/java/bdd_frameworks.rb +0 -265
- data/lib/buildr/java/groovyc.rb +0 -137
- data/lib/buildr/java/test_frameworks.rb +0 -450
- data/spec/build_spec.rb +0 -193
- data/spec/java_bdd_frameworks_spec.rb +0 -238
- data/spec/spec.opts +0 -6
|
@@ -120,7 +120,7 @@ module Buildr
|
|
|
120
120
|
mkpath File.dirname(installed)
|
|
121
121
|
cp name, installed
|
|
122
122
|
end
|
|
123
|
-
|
|
123
|
+
info "Installed #{installed}"
|
|
124
124
|
end
|
|
125
125
|
end
|
|
126
126
|
|
|
@@ -161,7 +161,7 @@ module Buildr
|
|
|
161
161
|
uri.password = upload_to[:password] if upload_to[:password]
|
|
162
162
|
|
|
163
163
|
# Upload artifact relative to base URL, need to create path before uploading.
|
|
164
|
-
|
|
164
|
+
info "Deploying #{to_spec}"
|
|
165
165
|
path = group.gsub('.', '/') + "/#{id}/#{version}/#{File.basename(name)}"
|
|
166
166
|
URI.upload uri + path, name, :permissions=>upload_to[:permissions]
|
|
167
167
|
end
|
|
@@ -298,7 +298,7 @@ module Buildr
|
|
|
298
298
|
# so don't perform it if the task found a different way to create the artifact.
|
|
299
299
|
task.enhance do
|
|
300
300
|
unless File.exist?(name)
|
|
301
|
-
|
|
301
|
+
info "Downloading #{to_spec}"
|
|
302
302
|
download
|
|
303
303
|
pom.invoke rescue nil if pom && pom != self
|
|
304
304
|
end
|
|
@@ -320,7 +320,7 @@ module Buildr
|
|
|
320
320
|
mkpath File.dirname(name)
|
|
321
321
|
pom.invoke unless type == :pom
|
|
322
322
|
cp path, name
|
|
323
|
-
|
|
323
|
+
info "Installed #{path} as #{to_spec}"
|
|
324
324
|
end
|
|
325
325
|
end
|
|
326
326
|
unless type == :pom
|
|
@@ -346,7 +346,7 @@ module Buildr
|
|
|
346
346
|
# This method attempts to download the artifact from each repository in the order in
|
|
347
347
|
# which they are returned from #remote, until successful. It always downloads the POM first.
|
|
348
348
|
def download
|
|
349
|
-
|
|
349
|
+
trace "Downloading #{to_spec}"
|
|
350
350
|
remote = Buildr.repositories.remote.map { |repo_url| URI === repo_url ? repo_url : URI.parse(repo_url) }
|
|
351
351
|
remote = remote.each { |repo_url| repo_url.path += '/' unless repo_url.path[-1] == '/' }
|
|
352
352
|
fail 'No remote repositories defined!' if remote.empty?
|
|
@@ -358,8 +358,8 @@ module Buildr
|
|
|
358
358
|
rescue URI::NotFoundError
|
|
359
359
|
false
|
|
360
360
|
rescue Exception=>error
|
|
361
|
-
|
|
362
|
-
|
|
361
|
+
info error
|
|
362
|
+
trace error.backtrace.join("\n")
|
|
363
363
|
false
|
|
364
364
|
end
|
|
365
365
|
end
|
|
@@ -602,7 +602,7 @@ module Buildr
|
|
|
602
602
|
# artifacts(*spec) => artifacts
|
|
603
603
|
#
|
|
604
604
|
# Handles multiple artifacts at a time. This method is the plural equivalent of
|
|
605
|
-
# #
|
|
605
|
+
# #artifact, but can do more things.
|
|
606
606
|
#
|
|
607
607
|
# Returns an array of artifacts built using the supplied
|
|
608
608
|
# specifications, each of which can be:
|
|
@@ -671,10 +671,11 @@ module Buildr
|
|
|
671
671
|
# :call-seq:
|
|
672
672
|
# group(ids, :under=>group_name, :version=>number) => artifacts
|
|
673
673
|
#
|
|
674
|
-
# Convenience method for defining multiple artifacts that belong to the same group and version.
|
|
675
|
-
# Accepts multiple artifact identifiers
|
|
674
|
+
# Convenience method for defining multiple artifacts that belong to the same group, type and version.
|
|
675
|
+
# Accepts multiple artifact identifiers followed by two or three hash values:
|
|
676
676
|
# * :under -- The group identifier
|
|
677
677
|
# * :version -- The version number
|
|
678
|
+
# * :type -- The artifact type (optional)
|
|
678
679
|
#
|
|
679
680
|
# For example:
|
|
680
681
|
# group 'xbean', 'xbean_xpath', 'xmlpublic', :under=>'xmlbeans', :version=>'2.1.0'
|
|
@@ -682,7 +683,7 @@ module Buildr
|
|
|
682
683
|
# group %w{xbean xbean_xpath xmlpublic}, :under=>'xmlbeans', :version=>'2.1.0'
|
|
683
684
|
def group(*args)
|
|
684
685
|
hash = args.pop
|
|
685
|
-
args.flatten.map { |id| artifact :group=>hash[:under], :version=>hash[:version], :id=>id }
|
|
686
|
+
args.flatten.map { |id| artifact :group=>hash[:under], :type=>hash[:type], :version=>hash[:version], :id=>id }
|
|
686
687
|
end
|
|
687
688
|
|
|
688
689
|
# :call-seq:
|
|
@@ -697,10 +697,13 @@ module Buildr
|
|
|
697
697
|
raise "Unsatisfied dependency #{previous} " +
|
|
698
698
|
"not satisfied by #{artifact}" unless satisfied
|
|
699
699
|
previous.version = artifact.version # OK, set new version
|
|
700
|
+
artifact = previous # use the same object for aliases
|
|
700
701
|
else # not a requirement, set the new values
|
|
701
|
-
previous.
|
|
702
|
+
unless artifact.id == previous.id && name != previous.name
|
|
703
|
+
previous.copy_attrs(artifact)
|
|
704
|
+
artifact = previous
|
|
705
|
+
end
|
|
702
706
|
end
|
|
703
|
-
artifact = previous # use the same object for aliases
|
|
704
707
|
else
|
|
705
708
|
if unvers.nil? && # we only have the version
|
|
706
709
|
(previous = get(unvers, true, false, false))
|
|
@@ -722,8 +725,8 @@ module Buildr
|
|
|
722
725
|
group(name, *(names + [{:namespace => self}]))
|
|
723
726
|
elsif artifact.id
|
|
724
727
|
unvers = artifact.unversioned_spec
|
|
725
|
-
registry[
|
|
726
|
-
registry.alias
|
|
728
|
+
registry[name] = artifact
|
|
729
|
+
registry.alias unvers, name
|
|
727
730
|
else
|
|
728
731
|
registry[name] = artifact
|
|
729
732
|
end
|
|
@@ -40,11 +40,11 @@ module Buildr
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def install
|
|
43
|
-
Util.
|
|
43
|
+
Util::Gems.command 'install', name
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def uninstall
|
|
47
|
-
Util.
|
|
47
|
+
Util::Gems.command 'uninstall', spec.name, '-v', spec.version.to_s
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def upload
|
|
@@ -79,7 +79,7 @@ module Buildr
|
|
|
79
79
|
|
|
80
80
|
def package_as_gem(file_name) #:nodoc:
|
|
81
81
|
PackageGemTask.define_task(file_name).tap do |gem|
|
|
82
|
-
%{ lib test doc }.each do |dir|
|
|
82
|
+
%w{ lib test doc }.each do |dir|
|
|
83
83
|
gem.include :from=>_(dir), :path=>dir if File.directory?(_(dir))
|
|
84
84
|
end
|
|
85
85
|
gem.spec do |spec|
|
data/lib/buildr/packaging/zip.rb
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
# the License.
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
$LOADED_FEATURES.unshift 'ftools' if RUBY_VERSION >= '1.9.0'
|
|
17
18
|
require 'zip/zip'
|
|
18
19
|
require 'zip/zipfilesystem'
|
|
19
20
|
|
|
@@ -45,11 +46,11 @@ module Buildr
|
|
|
45
46
|
if File.directory?(path)
|
|
46
47
|
in_directory path do |file, rel_path|
|
|
47
48
|
dest = "#{@path}#{rel_path}"
|
|
48
|
-
|
|
49
|
+
trace "Adding #{dest}"
|
|
49
50
|
file_map[dest] = file
|
|
50
51
|
end
|
|
51
52
|
else
|
|
52
|
-
|
|
53
|
+
trace "Adding #{@path}#{File.basename(path)}"
|
|
53
54
|
file_map["#{@path}#{File.basename(path)}"] = path
|
|
54
55
|
end
|
|
55
56
|
end
|
|
@@ -150,11 +151,11 @@ module Buildr
|
|
|
150
151
|
path = rel_path.split('/')[1..-1]
|
|
151
152
|
path.unshift as unless as == '.'
|
|
152
153
|
dest = "#{@path}#{path.join('/')}"
|
|
153
|
-
|
|
154
|
+
trace "Adding #{dest}"
|
|
154
155
|
file_map[dest] = file
|
|
155
156
|
end
|
|
156
157
|
else
|
|
157
|
-
|
|
158
|
+
trace "Adding #{@path}#{as}"
|
|
158
159
|
file_map["#{@path}#{as}"] = file
|
|
159
160
|
end
|
|
160
161
|
end
|
|
@@ -218,7 +219,7 @@ module Buildr
|
|
|
218
219
|
if @includes.any? { |pattern| File.fnmatch(pattern, entry.name, File::FNM_PATHNAME) } &&
|
|
219
220
|
!@excludes.any? { |pattern| File.fnmatch(pattern, entry.name, File::FNM_PATHNAME) }
|
|
220
221
|
dest = path =~ /^\/?$/ ? entry.name : Util.relative_path(path + "/" + entry.name)
|
|
221
|
-
|
|
222
|
+
trace "Adding #{dest}"
|
|
222
223
|
file_map[dest] = lambda { |output| output.write source.read(entry) }
|
|
223
224
|
end
|
|
224
225
|
end
|
|
@@ -546,7 +547,7 @@ module Buildr
|
|
|
546
547
|
patterns.map(entries).each do |dest, entry|
|
|
547
548
|
next if entry.directory?
|
|
548
549
|
dest = File.expand_path(dest, target.to_s)
|
|
549
|
-
|
|
550
|
+
trace "Extracting #{dest}"
|
|
550
551
|
mkpath File.dirname(dest), :verbose=>false rescue nil
|
|
551
552
|
entry.extract(dest) { true }
|
|
552
553
|
end
|
|
@@ -653,10 +654,12 @@ module Buildr
|
|
|
653
654
|
includes = @include || ['**/*']
|
|
654
655
|
excludes = @exclude || []
|
|
655
656
|
entries.inject({}) do |map, entry|
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
657
|
+
if entry.name =~ /^#{@path}/
|
|
658
|
+
short = entry.name.sub(@path, '')
|
|
659
|
+
if includes.any? { |pat| File.fnmatch(pat, short, File::FNM_PATHNAME) } &&
|
|
660
|
+
!excludes.any? { |pat| File.fnmatch(pat, short, File::FNM_PATHNAME) }
|
|
661
|
+
map[short] = entry
|
|
662
|
+
end
|
|
660
663
|
end
|
|
661
664
|
map
|
|
662
665
|
end
|
|
Binary file
|
data/lib/buildr/scala.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
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/scala/compiler'
|
|
18
|
+
require 'buildr/scala/tests'
|
|
19
|
+
Object::Scala = Buildr::Scala
|
|
@@ -0,0 +1,109 @@
|
|
|
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
|
+
require 'buildr/core/project'
|
|
17
|
+
require 'buildr/core/common'
|
|
18
|
+
require 'buildr/core/compile'
|
|
19
|
+
require 'buildr/packaging'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
module Buildr::Scala
|
|
23
|
+
|
|
24
|
+
# Scalac compiler:
|
|
25
|
+
# compile.using(:scalac)
|
|
26
|
+
# Used by default if .scala files are found in the src/main/scala directory (or src/test/scala)
|
|
27
|
+
# and sets the target directory to target/classes (or target/test/classes).
|
|
28
|
+
#
|
|
29
|
+
# Accepts the following options:
|
|
30
|
+
# * :warnings -- Generate warnings if true (opposite of -nowarn).
|
|
31
|
+
# * :deprecation -- Output source locations where deprecated APIs are used.
|
|
32
|
+
# * :optimise -- Generates faster bytecode by applying optimisations to the program.
|
|
33
|
+
# * :target -- Class file compatibility with specified release.
|
|
34
|
+
# * :debug -- Generate debugging info.
|
|
35
|
+
# * :other -- Array of options to pass to the Scalac compiler as is, e.g. -Xprint-types
|
|
36
|
+
class Scalac < Buildr::Compiler::Base
|
|
37
|
+
class << self
|
|
38
|
+
def scala_home
|
|
39
|
+
@home ||= ENV['SCALA_HOME']
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def dependencies
|
|
43
|
+
[ 'scala-library.jar', 'scala-compiler.jar'].map { |jar| File.expand_path("lib/#{jar}", scala_home) }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def use_fsc
|
|
47
|
+
ENV["USE_FSC"] =~ /^(yes|on|true)$/i
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
OPTIONS = [:warnings, :deprecation, :optimise, :target, :debug, :other]
|
|
52
|
+
Java.classpath << dependencies
|
|
53
|
+
|
|
54
|
+
specify :language=>:scala, :target=>'classes', :target_ext=>'class', :packaging=>:jar
|
|
55
|
+
|
|
56
|
+
def initialize(project, options) #:nodoc:
|
|
57
|
+
super
|
|
58
|
+
options[:debug] = Buildr.options.debug if options[:debug].nil?
|
|
59
|
+
options[:warnings] = verbose if options[:warnings].nil?
|
|
60
|
+
options[:deprecation] ||= false
|
|
61
|
+
options[:optimise] ||= false
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def compile(sources, target, dependencies) #:nodoc:
|
|
65
|
+
check_options options, OPTIONS
|
|
66
|
+
|
|
67
|
+
cmd_args = []
|
|
68
|
+
cmd_args << '-classpath' << (dependencies + Scalac.dependencies).join(File::PATH_SEPARATOR)
|
|
69
|
+
source_paths = sources.select { |source| File.directory?(source) }
|
|
70
|
+
cmd_args << '-sourcepath' << source_paths.join(File::PATH_SEPARATOR) unless source_paths.empty?
|
|
71
|
+
cmd_args << '-d' << File.expand_path(target)
|
|
72
|
+
cmd_args += scalac_args
|
|
73
|
+
cmd_args += files_from_sources(sources)
|
|
74
|
+
|
|
75
|
+
unless Buildr.application.options.dryrun
|
|
76
|
+
Scalac.scala_home or fail 'Are we forgetting something? SCALA_HOME not set.'
|
|
77
|
+
trace((['scalac'] + cmd_args).join(' '))
|
|
78
|
+
if Scalac.use_fsc
|
|
79
|
+
system(([File.expand_path('bin/fsc', Scalac.scala_home)] + cmd_args).join(' ')) or
|
|
80
|
+
fail 'Failed to compile, see errors above'
|
|
81
|
+
else
|
|
82
|
+
Java.load
|
|
83
|
+
Java.scala.tools.nsc.Main.process(cmd_args.to_java(Java.java.lang.String))
|
|
84
|
+
fail 'Failed to compile, see errors above' if Java.scala.tools.nsc.Main.reporter.hasErrors
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
private
|
|
90
|
+
|
|
91
|
+
# Returns Scalac command line arguments from the set of options.
|
|
92
|
+
def scalac_args #:nodoc:
|
|
93
|
+
args = []
|
|
94
|
+
args << "-nowarn" unless options[:warnings]
|
|
95
|
+
args << "-verbose" if Buildr.application.options.trace
|
|
96
|
+
args << "-g" if options[:debug]
|
|
97
|
+
args << "-deprecation" if options[:deprecation]
|
|
98
|
+
args << "-optimise" if options[:optimise]
|
|
99
|
+
args << "-target:jvm-" + options[:target].to_s if options[:target]
|
|
100
|
+
args + Array(options[:other])
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Scala compiler comes first, ahead of Javac, this allows it to pick
|
|
108
|
+
# projects that mix Scala and Java code by spotting Scala code first.
|
|
109
|
+
Buildr::Compiler.compilers.unshift Buildr::Scala::Scalac
|
|
@@ -0,0 +1,203 @@
|
|
|
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/build'
|
|
18
|
+
require 'buildr/core/compile'
|
|
19
|
+
require 'buildr/java/ant'
|
|
20
|
+
require 'buildr/java/tests'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module Buildr::Scala
|
|
24
|
+
|
|
25
|
+
# Scala::Specs is available when using Scala::Test
|
|
26
|
+
module ScalaSpecs
|
|
27
|
+
VERSION = '1.2.9'
|
|
28
|
+
|
|
29
|
+
class << self
|
|
30
|
+
def version
|
|
31
|
+
Buildr.settings.build['scala.specs'] || VERSION
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def dependencies
|
|
35
|
+
["org.specs:specs:jar:#{version}"]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
def const_missing(const)
|
|
40
|
+
return super unless const == :REQUIRES # TODO: remove in 1.5
|
|
41
|
+
Buildr.application.deprecated "Please use Scala::Specs.dependencies/.version instead of ScalaSpecs::REQUIRES/VERSION"
|
|
42
|
+
dependencies
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# Scala::Check is available when using Scala::Test
|
|
49
|
+
module ScalaCheck
|
|
50
|
+
VERSION = '1.3'
|
|
51
|
+
|
|
52
|
+
class << self
|
|
53
|
+
def version
|
|
54
|
+
Buildr.settings.build['scala.check'] || VERSION
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def dependencies
|
|
58
|
+
["org.scalacheck:scalacheck:jar:#{version}"]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
def const_missing(const)
|
|
63
|
+
return super unless const == :REQUIRES # TODO: remove in 1.5
|
|
64
|
+
Buildr.application.deprecated "Please use Scala::Check.dependencies/.version instead of ScalaCheck::REQUIRES/VERSION"
|
|
65
|
+
dependencies
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# ScalaTest framework, the default test framework for Scala tests.
|
|
72
|
+
#
|
|
73
|
+
# Support the following options:
|
|
74
|
+
# * :properties -- Hash of system properties available to the test case.
|
|
75
|
+
# * :environment -- Hash of environment variables available to the test case.
|
|
76
|
+
# * :java_args -- Arguments passed as is to the JVM.
|
|
77
|
+
class ScalaTest < TestFramework::Java
|
|
78
|
+
|
|
79
|
+
VERSION = '0.9.3'
|
|
80
|
+
|
|
81
|
+
class << self
|
|
82
|
+
def version
|
|
83
|
+
Buildr.settings.build['scala.test'] || VERSION
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def dependencies
|
|
87
|
+
["org.scalatest:scalatest:jar:#{version}"] + ScalaSpecs.dependencies +
|
|
88
|
+
ScalaCheck.dependencies + JMock.dependencies
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def applies_to?(project) #:nodoc:
|
|
92
|
+
project.test.compile.language == :scala
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
private
|
|
96
|
+
def const_missing(const)
|
|
97
|
+
return super unless const == :REQUIRES # TODO: remove in 1.5
|
|
98
|
+
Buildr.application.deprecated "Please use Scala::Test.dependencies/.version instead of ScalaTest::REQUIRES/VERSION"
|
|
99
|
+
dependencies
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# annotation-based group inclusion
|
|
104
|
+
attr_accessor :group_includes
|
|
105
|
+
|
|
106
|
+
# annotation-based group exclusion
|
|
107
|
+
attr_accessor :group_excludes
|
|
108
|
+
|
|
109
|
+
def initialize(test_task, options)
|
|
110
|
+
super
|
|
111
|
+
@group_includes = []
|
|
112
|
+
@group_excludes = []
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def tests(dependencies) #:nodoc:
|
|
116
|
+
suites = filter_classes(dependencies, :interfaces => %w{org.scalatest.Suite})
|
|
117
|
+
# we should really filter using :class => %w{org.specs.Specification} instead of naming convention
|
|
118
|
+
specs = filter_classes(dependencies, :class_names => [/Specs?$/])
|
|
119
|
+
[suites, specs].flatten
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def run(tests, dependencies) #:nodoc:
|
|
123
|
+
mkpath task.report_to.to_s
|
|
124
|
+
success = []
|
|
125
|
+
scalatest = tests.select { |t| t !~ /Specs?$/ }
|
|
126
|
+
specs = tests.select { |t| t =~ /Specs?$/ }
|
|
127
|
+
|
|
128
|
+
# Specs
|
|
129
|
+
nostacktrace = (options[:nostacktrace]) ? "-ns" : ""
|
|
130
|
+
cmd_options = { :properties => options[:properties],
|
|
131
|
+
:java_args => options[:java_args],
|
|
132
|
+
:classpath => dependencies}
|
|
133
|
+
specs.each do |spec|
|
|
134
|
+
Java.load
|
|
135
|
+
begin
|
|
136
|
+
Java::Commands.java(spec, cmd_options)
|
|
137
|
+
rescue => e
|
|
138
|
+
print e.message
|
|
139
|
+
else
|
|
140
|
+
success << spec
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# ScalaTest
|
|
145
|
+
reporter_options = 'TFGBSAR' # testSucceeded, testFailed, testIgnored, suiteAborted, runStopped, runAborted, runCompleted
|
|
146
|
+
scalatest.each do |suite|
|
|
147
|
+
info "ScalaTest #{suite.inspect}"
|
|
148
|
+
# Use Ant to execute the ScalaTest task, gives us performance and reporting.
|
|
149
|
+
reportFile = File.join(task.report_to.to_s, "TEST-#{suite}.txt")
|
|
150
|
+
taskdef = Buildr.artifacts(self.class.dependencies).each(&:invoke).map(&:to_s)
|
|
151
|
+
Buildr.ant('scalatest') do |ant|
|
|
152
|
+
ant.taskdef :name=>'scalatest', :classname=>'org.scalatest.tools.ScalaTestTask',
|
|
153
|
+
:classpath=>taskdef.join(File::PATH_SEPARATOR)
|
|
154
|
+
ant.scalatest :runpath=>dependencies.join(File::PATH_SEPARATOR) do
|
|
155
|
+
ant.suite :classname=>suite
|
|
156
|
+
ant.reporter :type=>'stdout', :config=>reporter_options
|
|
157
|
+
ant.reporter :type=>'file', :filename=> reportFile, :config=>reporter_options
|
|
158
|
+
ant.includes group_includes.join(" ") if group_includes
|
|
159
|
+
ant.excludes group_excludes.join(" ") if group_excludes
|
|
160
|
+
(options[:properties] || []).each { |name, value| ant.property :name=>name, :value=>value }
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Parse for failures, errors, etc.
|
|
165
|
+
# This is a bit of a pain right now because ScalaTest doesn't flush its
|
|
166
|
+
# output synchronously before the Ant test finishes so we have to loop
|
|
167
|
+
# and wait for an indication that the test run was completed.
|
|
168
|
+
failed = false
|
|
169
|
+
completed = false
|
|
170
|
+
wait = 0
|
|
171
|
+
while (!completed) do
|
|
172
|
+
File.open(reportFile, "r") do |input|
|
|
173
|
+
while (line = input.gets) do
|
|
174
|
+
failed = (line =~ /(TEST FAILED -)|(RUN STOPPED)|(RUN ABORTED)/) unless failed
|
|
175
|
+
completed |= (line =~ /Run completed\./)
|
|
176
|
+
break if (failed || completed)
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
wait += 1
|
|
180
|
+
break if (failed || wait > 10)
|
|
181
|
+
unless completed
|
|
182
|
+
sleep(1)
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
success << suite if (completed && !failed)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
success
|
|
189
|
+
end # run
|
|
190
|
+
|
|
191
|
+
end # ScalaTest
|
|
192
|
+
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
# Backwards compatibility stuff. Remove in 1.5.
|
|
197
|
+
module Buildr
|
|
198
|
+
ScalaSpecs = Scala::ScalaSpecs
|
|
199
|
+
ScalaCheck = Scala::ScalaCheck
|
|
200
|
+
ScalaTest = Scala::ScalaTest
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
Buildr::TestFramework << Buildr::Scala::ScalaTest
|