buildr 1.2.10 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. data/CHANGELOG +566 -268
  2. data/DISCLAIMER +7 -1
  3. data/KEYS +151 -0
  4. data/NOTICE +23 -8
  5. data/README +122 -22
  6. data/Rakefile +49 -229
  7. data/{lib → addon}/buildr/antlr.rb +23 -10
  8. data/addon/buildr/cobertura.rb +232 -0
  9. data/{lib → addon}/buildr/hibernate.rb +20 -4
  10. data/{lib → addon}/buildr/javacc.rb +27 -12
  11. data/addon/buildr/jdepend.rb +60 -0
  12. data/{lib → addon}/buildr/jetty.rb +34 -18
  13. data/addon/buildr/nailgun.rb +892 -0
  14. data/{lib → addon}/buildr/openjpa.rb +23 -6
  15. data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
  16. data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
  17. data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
  18. data/{lib/buildr/jetty → addon/buildr/org/apache/buildr}/JettyWrapper.java +19 -0
  19. data/{lib → addon}/buildr/xmlbeans.rb +39 -14
  20. data/bin/buildr +21 -7
  21. data/buildr.gemspec +50 -0
  22. data/doc/css/default.css +225 -0
  23. data/doc/css/print.css +95 -0
  24. data/doc/css/syntax.css +43 -0
  25. data/doc/images/apache-incubator-logo.png +0 -0
  26. data/doc/images/buildr-hires.png +0 -0
  27. data/doc/images/buildr.png +0 -0
  28. data/doc/images/note.png +0 -0
  29. data/doc/images/tip.png +0 -0
  30. data/doc/images/zbuildr.tif +0 -0
  31. data/doc/pages/artifacts.textile +317 -0
  32. data/doc/pages/building.textile +501 -0
  33. data/doc/pages/contributing.textile +178 -0
  34. data/doc/pages/download.textile +25 -0
  35. data/doc/pages/extending.textile +229 -0
  36. data/doc/pages/getting_started.textile +337 -0
  37. data/doc/pages/index.textile +63 -0
  38. data/doc/pages/mailing_lists.textile +17 -0
  39. data/doc/pages/more_stuff.textile +367 -0
  40. data/doc/pages/packaging.textile +592 -0
  41. data/doc/pages/projects.textile +449 -0
  42. data/doc/pages/recipes.textile +127 -0
  43. data/doc/pages/settings_profiles.textile +339 -0
  44. data/doc/pages/testing.textile +475 -0
  45. data/doc/pages/troubleshooting.textile +121 -0
  46. data/doc/pages/whats_new.textile +389 -0
  47. data/doc/print.haml +52 -0
  48. data/doc/print.toc.yaml +28 -0
  49. data/doc/scripts/buildr-git.rb +411 -0
  50. data/doc/scripts/install-jruby.sh +44 -0
  51. data/doc/scripts/install-linux.sh +64 -0
  52. data/doc/scripts/install-osx.sh +52 -0
  53. data/doc/site.haml +55 -0
  54. data/doc/site.toc.yaml +44 -0
  55. data/lib/buildr.rb +28 -45
  56. data/lib/buildr/core.rb +27 -0
  57. data/lib/buildr/core/application.rb +373 -0
  58. data/lib/buildr/core/application_cli.rb +134 -0
  59. data/lib/{core → buildr/core}/build.rb +91 -77
  60. data/lib/{core → buildr/core}/checks.rb +116 -95
  61. data/lib/buildr/core/common.rb +155 -0
  62. data/lib/buildr/core/compile.rb +594 -0
  63. data/lib/buildr/core/environment.rb +120 -0
  64. data/lib/buildr/core/filter.rb +258 -0
  65. data/lib/{core → buildr/core}/generate.rb +22 -5
  66. data/lib/buildr/core/help.rb +118 -0
  67. data/lib/buildr/core/progressbar.rb +156 -0
  68. data/lib/{core → buildr/core}/project.rb +468 -213
  69. data/lib/buildr/core/test.rb +690 -0
  70. data/lib/{core → buildr/core}/transports.rb +107 -127
  71. data/lib/buildr/core/util.rb +235 -0
  72. data/lib/buildr/ide.rb +19 -0
  73. data/lib/{java → buildr/ide}/eclipse.rb +86 -60
  74. data/lib/{java → buildr/ide}/idea.ipr.template +16 -0
  75. data/lib/buildr/ide/idea.rb +194 -0
  76. data/lib/buildr/ide/idea7x.ipr.template +290 -0
  77. data/lib/buildr/ide/idea7x.rb +210 -0
  78. data/lib/buildr/java.rb +26 -0
  79. data/lib/buildr/java/ant.rb +71 -0
  80. data/lib/buildr/java/bdd_frameworks.rb +267 -0
  81. data/lib/buildr/java/commands.rb +210 -0
  82. data/lib/buildr/java/compilers.rb +432 -0
  83. data/lib/buildr/java/deprecated.rb +141 -0
  84. data/lib/buildr/java/groovyc.rb +137 -0
  85. data/lib/buildr/java/jruby.rb +99 -0
  86. data/lib/buildr/java/org/apache/buildr/BuildrNail$Main.class +0 -0
  87. data/lib/buildr/java/org/apache/buildr/BuildrNail.class +0 -0
  88. data/lib/buildr/java/org/apache/buildr/BuildrNail.java +41 -0
  89. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  90. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +116 -0
  91. data/lib/buildr/java/packaging.rb +706 -0
  92. data/lib/{java → buildr/java}/pom.rb +20 -4
  93. data/lib/buildr/java/rjb.rb +142 -0
  94. data/lib/buildr/java/test_frameworks.rb +290 -0
  95. data/lib/buildr/java/version_requirement.rb +172 -0
  96. data/lib/buildr/packaging.rb +21 -0
  97. data/lib/{java → buildr/packaging}/artifact.rb +170 -179
  98. data/lib/buildr/packaging/artifact_namespace.rb +957 -0
  99. data/lib/buildr/packaging/artifact_search.rb +140 -0
  100. data/lib/buildr/packaging/gems.rb +102 -0
  101. data/lib/buildr/packaging/package.rb +233 -0
  102. data/lib/{tasks → buildr/packaging}/tar.rb +18 -1
  103. data/lib/{tasks → buildr/packaging}/zip.rb +153 -105
  104. data/rakelib/apache.rake +126 -0
  105. data/rakelib/changelog.rake +56 -0
  106. data/rakelib/doc.rake +103 -0
  107. data/rakelib/package.rake +44 -0
  108. data/rakelib/release.rake +53 -0
  109. data/rakelib/rspec.rake +81 -0
  110. data/rakelib/rubyforge.rake +45 -0
  111. data/rakelib/scm.rake +49 -0
  112. data/rakelib/setup.rake +59 -0
  113. data/rakelib/stage.rake +45 -0
  114. data/spec/application_spec.rb +316 -0
  115. data/spec/archive_spec.rb +494 -0
  116. data/spec/artifact_namespace_spec.rb +635 -0
  117. data/spec/artifact_spec.rb +738 -0
  118. data/spec/build_spec.rb +193 -0
  119. data/spec/checks_spec.rb +537 -0
  120. data/spec/common_spec.rb +579 -0
  121. data/spec/compile_spec.rb +561 -0
  122. data/spec/groovy_compilers_spec.rb +239 -0
  123. data/spec/java_bdd_frameworks_spec.rb +238 -0
  124. data/spec/java_compilers_spec.rb +446 -0
  125. data/spec/java_packaging_spec.rb +1042 -0
  126. data/spec/java_test_frameworks_spec.rb +414 -0
  127. data/spec/packaging_helper.rb +63 -0
  128. data/spec/packaging_spec.rb +589 -0
  129. data/spec/project_spec.rb +739 -0
  130. data/spec/sandbox.rb +116 -0
  131. data/spec/scala_compilers_spec.rb +239 -0
  132. data/spec/spec.opts +6 -0
  133. data/spec/spec_helpers.rb +283 -0
  134. data/spec/test_spec.rb +871 -0
  135. data/spec/transport_spec.rb +300 -0
  136. data/spec/version_requirement_spec.rb +115 -0
  137. metadata +188 -77
  138. data/lib/buildr/cobertura.rb +0 -89
  139. data/lib/buildr/jdepend.rb +0 -40
  140. data/lib/buildr/jetty/JettyWrapper$1.class +0 -0
  141. data/lib/buildr/jetty/JettyWrapper$BuildrHandler.class +0 -0
  142. data/lib/buildr/jetty/JettyWrapper.class +0 -0
  143. data/lib/buildr/scala.rb +0 -368
  144. data/lib/core/application.rb +0 -188
  145. data/lib/core/common.rb +0 -562
  146. data/lib/core/help.rb +0 -72
  147. data/lib/core/rake_ext.rb +0 -81
  148. data/lib/java/ant.rb +0 -71
  149. data/lib/java/compile.rb +0 -589
  150. data/lib/java/idea.rb +0 -159
  151. data/lib/java/java.rb +0 -432
  152. data/lib/java/packaging.rb +0 -581
  153. data/lib/java/test.rb +0 -795
  154. data/lib/tasks/concat.rb +0 -35
@@ -1,89 +0,0 @@
1
- module Buildr
2
-
3
- # Addes the <code>cobertura:html</code> and <code>cobertura:xml</code> tasks.
4
- # Require explicitly using <code>require "buildr/cobertura"</code>.
5
- module Cobertura
6
-
7
- class << self
8
-
9
- REQUIRES = ["net.sourceforge.cobertura:cobertura:jar:1.9", "log4j:log4j:jar:1.2.9",
10
- "asm:asm:jar:2.2.1", "asm:asm-tree:jar:2.2.1", "oro:oro:jar:2.0.8"]
11
-
12
- def requires()
13
- @requires ||= Buildr.artifacts(REQUIRES).each(&:invoke).map(&:to_s)
14
- end
15
-
16
- def report_to(file = nil)
17
- File.expand_path(File.join(*["reports/cobertura", file.to_s].compact))
18
- end
19
-
20
- def data_file()
21
- File.expand_path("reports/cobertura.ser")
22
- end
23
-
24
- end
25
-
26
- namespace "cobertura" do
27
-
28
- task "instrument" do
29
- Buildr.projects.each do |project|
30
- unless project.compile.sources.empty?
31
- # Instrumented bytecode goes in a different directory. This task creates before running the test
32
- # cases and monitors for changes in the generate bytecode.
33
- instrumented = project.file(project.path_to(:target, "instrumented")=>project.compile.target) do |task|
34
- Buildr.ant "cobertura" do |ant|
35
- ant.taskdef :classpath=>requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties"
36
- ant.send "cobertura-instrument", :todir=>task.to_s, :datafile=>data_file do
37
- ant.fileset(:dir=>project.compile.target.to_s) { ant.include :name=>"**/*.class" }
38
- end
39
- end
40
- touch task.to_s, :verbose=>false
41
- end
42
- # We now have two target directories with bytecode. It would make sense to remove compile.target
43
- # and add instrumented instead, but apparently Cobertura only creates some of the classes, so
44
- # we need both directories and instrumented must come first.
45
- project.test.classpath.unshift instrumented
46
- project.test.with requires
47
- project.test.options[:properties]["net.sourceforge.cobertura.datafile"] = data_file
48
- project.clean { rm_rf instrumented.to_s, :verbose=>false }
49
- end
50
- end
51
- end
52
-
53
- desc "Run the test cases and produce code coverage reports in #{report_to(:html)}"
54
- task "html"=>["instrument", "test"] do
55
- puts "Creating test coverage reports in #{report_to(:html)}"
56
- Buildr.ant "cobertura" do |ant|
57
- ant.taskdef :classpath=>requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties"
58
- ant.send "cobertura-report", :destdir=>report_to(:html), :format=>"html", :datafile=>data_file do
59
- Buildr.projects.map(&:compile).map(&:sources).flatten.each do |src|
60
- ant.fileset(:dir=>src.to_s) { ant.include :name=>"**/*.java" } if File.exist?(src.to_s)
61
- end
62
- end
63
- end
64
- end
65
-
66
- desc "Run the test cases and produce code coverage reports in #{report_to(:xml)}"
67
- task "xml"=>["instrument", "test"] do
68
- puts "Creating test coverage reports in #{report_to(:xml)}"
69
- Buildr.ant "cobertura" do |ant|
70
- ant.taskdef :classpath=>requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties"
71
- ant.send "cobertura-report", :destdir=>report_to(:xml), :format=>"xml", :datafile=>data_file do
72
- Buildr.projects.map(&:compile).map(&:sources).flatten.each do |src|
73
- ant.fileset :dir=>src.to_s if File.exist?(src.to_s)
74
- end
75
- end
76
- end
77
- end
78
-
79
- task "clean" do
80
- rm_rf [report_to, data_file], :verbose=>false
81
- end
82
- end
83
-
84
- task "clean" do
85
- task("cobertura:clean").invoke if Dir.pwd == Rake.application.original_dir
86
- end
87
-
88
- end
89
- end
@@ -1,40 +0,0 @@
1
- module Buildr
2
-
3
- # Addes the <code>jdepend:swing</code>, <code>jdepend:text</code> and <code>jdepend:xml</code> tasks.
4
- # Require explicitly using <code>require "buildr/jdepend"</code>.
5
- module Jdepend
6
-
7
- REQUIRES = ["jdepend:jdepend:jar:2.9.1"]
8
-
9
- class << self
10
-
11
- def requires()
12
- @requires ||= Buildr.artifacts(REQUIRES).each(&:invoke).map(&:to_s)
13
- end
14
-
15
- def paths()
16
- Project.projects.map(&:compile).each(&:invoke).map(&:target).map(&:to_s).select { |path| File.exist?(path) }
17
- end
18
-
19
- end
20
-
21
- namespace "jdepend" do
22
-
23
- desc "Runs JDepend on all your projects (Swing UI)"
24
- task "swing" do
25
- Buildr.java "jdepend.swingui.JDepend", paths, :classpath=>requires, :name=>"JDepend"
26
- end
27
-
28
- desc "Runs JDepend on all your projects (Text UI)"
29
- task "text" do
30
- Buildr.java "jdepend.textui.JDepend", paths, :classpath=>requires, :name=>"JDepend"
31
- end
32
-
33
- desc "Runs JDepend on all your projects (XML output to jdepend.xml)"
34
- task "xml" do
35
- Buildr.java "jdepend.xmlui.JDepend", "-file", "jdepend.xml", paths, :classpath=>requires, :name=>"JDepend"
36
- puts "Created jdepend.xml"
37
- end
38
- end
39
- end
40
- end
@@ -1,368 +0,0 @@
1
- require "java/java"
2
-
3
- # TODO List
4
- # -Eclipse support
5
- # -SUnit
6
- # -Cleanup compiler options
7
-
8
- module Buildr
9
-
10
- module Scala
11
- class << self
12
- def scala_home
13
- ENV["SCALA_HOME"]
14
- end
15
-
16
- def scala_lib
17
- scala_lib = scala_home + "/lib/scala-library.jar"
18
- end
19
-
20
- def scalac(*args)
21
- options = Hash === args.last ? args.pop : {}
22
- rake_check_options options, :classpath, :sourcepath, :output, :scalac_args, :name
23
-
24
- files = args.flatten.each { |f| f.invoke if f.respond_to?(:invoke) }.map(&:to_s).
25
- collect { |arg| File.directory?(arg) ? FileList["#{arg}/**/*.scala"] : arg }.flatten
26
- name = options[:name] || Dir.pwd
27
- return if files.empty?
28
-
29
- fail "Missing SCALA_HOME environment variable" unless ENV["SCALA_HOME"]
30
- fail "Invalid SCALA_HOME environment variable" unless File.directory? ENV["SCALA_HOME"]
31
-
32
- cmd_args = []
33
- use_fsc = !(ENV["USE_FSC"] =~ /^(no|off|false)$/i)
34
- classpath = classpath_from(options)
35
- scala_cp = [ classpath, FileList["#{scala_home}/lib/*"] ].flatten.join(File::PATH_SEPARATOR)
36
- cmd_args << "-cp" << scala_cp unless scala_cp.empty?
37
- cmd_args << "-sourcepath" << options[:sourcepath].join(File::PATH_SEPARATOR) if options[:sourcepath]
38
- cmd_args << "-d" << options[:output].to_s if options[:output]
39
- cmd_args += options[:scalac_args].flatten if options[:scalac_args]
40
- cmd_args += files
41
- unless Rake.application.options.dryrun
42
- puts "Compiling #{files.size} source files in #{name}" if verbose
43
- puts (["scalac"] + cmd_args).join(" ") if Rake.application.options.trace
44
- if use_fsc
45
- system ([ENV["SCALA_HOME"]+"/bin/fsc"] + cmd_args).join(" ")
46
- else
47
- Java.wrapper do |jw|
48
- jw.import("scala.tools.nsc.Main").main(cmd_args) == 0 or
49
- fail "Failed to compile, see errors above"
50
- end
51
- end
52
- end
53
- end
54
-
55
- protected
56
-
57
- # :call-seq:
58
- # classpath_from(options) => files
59
- #
60
- # Extracts the classpath from the options, expands it by calling artifacts, invokes
61
- # each of the artifacts and returns an array of paths.
62
- def classpath_from(options)
63
- classpath = (options[:classpath] || []).collect
64
- Buildr.artifacts(classpath).each { |t| t.invoke if t.respond_to?(:invoke) }.map(&:to_s)
65
- end
66
- end # Scala << self
67
-
68
-
69
- # !! This is mostly a copy-paste Buildr:Java:CompileTask !!
70
- #
71
- # Wraps Scalac in a task that does all the heavy lifting.
72
- #
73
- # Accepts multiple source directories that are invoked as prerequisites before compilation.
74
- # You can pass a task as a source directory, e.g. compile.from(apt).
75
- #
76
- # Likewise, classpath dependencies are invoked before compiling. All classpath dependencies
77
- # are evaluated as #artifacts, so you can pass artifact specifications and even projects.
78
- #
79
- # Creates a file task for the target directory, so executing that task as a dependency will
80
- # execute the compile task first.
81
- #
82
- # Compiler options are inherited form a parent task, e.g. the foo:bar:compile task inherits
83
- # its options from the foo:compile task. Even if foo is an empty project that does not compile
84
- # any classes itself, you can use it to set compile options for all its sub-projects.
85
- #
86
- # Normally, the project will take care of setting the source and target directory, and you
87
- # only need to set options and classpath dependencies. See Project#compile.
88
- class ScalaCompilerTask < Rake::Task
89
-
90
- # Compiler options, accessible from CompileTask#options.
91
- #
92
- # Supported options are:
93
- # - warnings -- Generate warnings if true (opposite of -nowarn).
94
- # - deprecation -- Output source locations where deprecated APIs are used.
95
- # - source -- Source compatibility with specified release.
96
- # - target -- Class file compatibility with specified release.
97
- # - lint -- Value to pass to xlint argument. Use true to enable default lint
98
- # options, or pass a specific setting as string or array of strings.
99
- # - debug -- Generate debugging info.
100
- # - other -- Array of options to pass to the Scalac compiler as is.
101
- #
102
- # For example:
103
- # compile.options.warnings = true
104
- # compile.options.source = options.target = "1.6"
105
- class Options
106
-
107
- include InheritedAttributes
108
-
109
- OPTIONS = [:warnings, :deprecation, :source, :target, :lint, :debug, :other]
110
-
111
- # Generate warnings (opposite of -nowarn).
112
- attr_accessor :warnings
113
- inherited_attr(:warnings) { verbose }
114
- # Output source locations where deprecated APIs are used.
115
- attr_accessor :deprecation
116
- inherited_attr :deprecation, false
117
- # Provide source compatibility with specified release.
118
- attr_accessor :source
119
- inherited_attr :source
120
- # Generate class files for specific VM version.
121
- attr_accessor :target
122
- inherited_attr :target
123
- # Values to pass to Xlint: string or array. Use true to enable
124
- # Xlint with no values.
125
- attr_accessor :lint
126
- inherited_attr :lint, false
127
- # Generate all debugging info.
128
- attr_accessor :debug
129
- inherited_attr(:debug) { Buildr.options.debug }
130
- # Array of arguments passed to the Scalac compiler as is.
131
- attr_accessor :other
132
- inherited_attr :other
133
-
134
- def initialize(parent = nil) #:nodoc:
135
- @parent = parent
136
- end
137
-
138
- attr_reader :parent # :nodoc:
139
-
140
- # Resets all the options.
141
- def clear()
142
- OPTIONS.each { |name| send "#{name}=", nil }
143
- end
144
-
145
- def to_s() #:nodoc:
146
- OPTIONS.inject({}){ |hash, name| hash[name] = send(name) ; hash }.reject{ |name,value| value.nil? }.inspect
147
- end
148
-
149
- # Returns Scalac command line arguments from the set of options.
150
- def scalac_args()
151
- args = []
152
- args << "-nowarn" unless warnings
153
- args << "-verbose" if Rake.application.options.trace
154
- args << "-g" if debug
155
- args << "-deprecation" if deprecation
156
- args << "-source" << source.to_s if source
157
- args << "-target:jvm-" + target.to_s if target
158
- case lint
159
- when Array
160
- args << "-Xlint:#{lint.join(',')}"
161
- when String
162
- args << "-Xlint:#{lint}"
163
- when true
164
- args << "-Xlint"
165
- end
166
- args.concat(other.to_a) if other
167
- args
168
- end
169
-
170
- end
171
-
172
-
173
- def initialize(*args) #:nodoc:
174
- super
175
- parent = Rake::Task["^scalac"] if name[":"] # Only if in namespace
176
- if parent && parent.respond_to?(:options)
177
- @options = Options.new(parent.options)
178
- else
179
- @options = Options.new
180
- end
181
- @sources = []
182
- @classpath = []
183
-
184
- enhance do |task|
185
- mkpath target.to_s, :verbose=>false
186
- Scala.scalac source_files.keys, :sourcepath=>sources.map(&:to_s).select { |source| File.directory?(source) }.uniq,
187
- :classpath=>classpath, :output=>target, :scalac_args=>options.scalac_args, :name=>task.name
188
- # By touching the target we let other tasks know we did something,
189
- # and also prevent recompiling again for classpath dependencies.
190
- touch target.to_s, :verbose=>false
191
- end
192
- end
193
-
194
- # Source directories and files to compile.
195
- attr_accessor :sources
196
-
197
- # :call-seq:
198
- # from(*sources) => self
199
- #
200
- # Adds source directories and files to compile, and returns self.
201
- #
202
- # For example:
203
- # compile.from("src/scala").into("classes").with("module1.jar")
204
- def from(*sources)
205
- @sources |= sources.flatten
206
- self
207
- end
208
-
209
- # Classpath dependencies.
210
- attr_accessor :classpath
211
-
212
- # :call-seq:
213
- # with(*artifacts) => self
214
- #
215
- # Adds files and artifacts as classpath dependencies, and returns self.
216
- #
217
- # Calls #artifacts on the arguments, so you can pass artifact specifications,
218
- # tasks, projects, etc. Use this rather than setting the classpath directly.
219
- #
220
- # For example:
221
- # compile.with("module1.jar", "log4j:log4j:jar:1.0", project("foo"))
222
- def with(*specs)
223
- @classpath |= Buildr.artifacts(specs.flatten).uniq
224
- self
225
- end
226
-
227
- # The target directory for the generated class files.
228
- attr_reader :target
229
-
230
- # :call-seq:
231
- # into(path) => self
232
- #
233
- # Sets the target directory and returns self. This will also set the compile task
234
- # as a prerequisite to a file task on the target directory.
235
- #
236
- # For example:
237
- # compile(src_dir).into(target_dir).with(artifacts)
238
- # Both compile.invoke and file(target_dir).invoke will compile the source files.
239
- def into(path)
240
- path = File.expand_path(path.to_s)
241
- @target = file(path).enhance([self]) unless @target && @target.to_s == path
242
- self
243
- end
244
-
245
- # Returns the compiler options.
246
- attr_reader :options
247
-
248
- # :call-seq:
249
- # using(options) => self
250
- #
251
- # Sets the compiler options from a hash and returns self.
252
- #
253
- # For example:
254
- # compile.using(:warnings=>true, :source=>"1.5")
255
- def using(*args)
256
- args.pop.each { |key, value| options.send "#{key}=", value } if Hash === args.last
257
- args.each { |key| options.send "#{key}=", value = true }
258
- self
259
- end
260
-
261
- def timestamp() #:nodoc:
262
- # If we compiled successfully, then the target directory reflects that.
263
- # If we didn't, see needed?
264
- target ? target.timestamp : Rake::EARLY
265
- end
266
-
267
- def needed?() #:nodoc:
268
- return false if source_files.empty?
269
- return true unless File.exist?(target.to_s)
270
- return true if source_files.any? { |j, c| !File.exist?(c) || File.stat(j).mtime > File.stat(c).mtime }
271
- oldest = source_files.map { |j, c| File.stat(c).mtime }.min
272
- return classpath.any? { |path| application[path].timestamp > oldest }
273
- end
274
-
275
- def prerequisites() #:nodoc:
276
- super + classpath + sources
277
- end
278
-
279
- def invoke_prerequisites() #:nodoc:
280
- prerequisites.each { |n| application[n, @scope].invoke }
281
- end
282
-
283
- # Returns the files to compile. This list is derived from the list of sources,
284
- # expanding directories into files, and includes only source files that are
285
- # newer than the corresponding class file. Includes all files if one or more
286
- # classpath dependency has been updated.
287
- def source_files()
288
- @source_files ||= @sources.map(&:to_s).inject({}) do |map, source|
289
- raise "Compile task #{name} has source files, but no target directory" unless target
290
- target_dir = target.to_s
291
- if File.directory?(source)
292
- base = Pathname.new(source)
293
- FileList["#{source}/**/*.scala"].
294
- each { |file| map[file] = File.join(target_dir, Pathname.new(file).relative_path_from(base).to_s.ext(".class")) }
295
- else
296
- map[source] = File.join(target_dir, File.basename(source).ext(".class"))
297
- end
298
- map
299
- end
300
- end
301
-
302
- def scala_lib
303
- Scala.scala_lib
304
- end
305
- end # ScalaCompilerTask
306
-
307
- end # Scala
308
-
309
- # Local task to execute the Scalac compile task of the current project.
310
- # This task is not itself a compile task.
311
- desc "Compile all scalac projects"
312
- Project.local_task("scalac") { |name| "Compiling scala sources for #{name}" }
313
-
314
- class Project
315
-
316
- # :call-seq:
317
- # compile(*sources) => CompileTask
318
- # compile(*sources) { |task| .. } => CompileTask
319
- #
320
- # The compile task does what its name suggests. This method returns the project's
321
- # CompileTask. It also accepts a list of source directories and files to compile
322
- # (equivalent to calling CompileTask#from on the task), and a block for any
323
- # post-compilation work.
324
- #
325
- # The compile task will pick all the source files in the src/main/scala directory,
326
- # and unless specified, compile them into the target/classes directory. It will pick
327
- # the default values for compiler options from the parent project's compile task.
328
- #
329
- # For example:
330
- # # Force target compatibility.
331
- # compile.options.source = "1.6"
332
- # # Include Apt-generated source files.
333
- # compile.from apt
334
- # # Include Log4J and the api sub-project artifacts.
335
- # compile.with "log4j:log4j:jar:1.2", project("api")
336
- # # Run the OpenJPA bytecode enhancer after compilation.
337
- # compile { open_jpa_enhance }
338
- #
339
- # For more information, see Scala::ScalaCompilerTask.
340
- def scalac(*sources, &block)
341
- task("scalac").from(sources).enhance &block
342
- end
343
-
344
- end # Project
345
-
346
- Project.on_define do |project|
347
- # Scalac runs after compile task (and therefore, after "prepare" and "resources")
348
- scalac = Scala::ScalaCompilerTask.define_task("scalac"=>[task("compile")])
349
- project.path_to("src/main/scala").tap { |dir| scalac.from dir if File.exist?(dir) }
350
- scalac.into project.path_to(:target, "classes")
351
- project.recursive_task("scalac")
352
-
353
- project.enhance do |project|
354
- # This comes last because the target path may change.
355
- project.packages.each do |p|
356
- p.with scalac.target if p.type == :jar
357
- p.classes = scalac.target if p.type == :war
358
- end
359
- # Work-in-progress
360
- #project.task("eclipse").classpathContainers 'ch.epfl.lamp.sdt.launching.SCALA_CONTAINER'
361
-
362
- project.build project.scalac.target
363
- project.clean { verbose(false) { rm_rf project.scalac.target.to_s } }
364
- end
365
- end
366
-
367
- end # Buildr
368
-