buildr 1.2.10 → 1.3.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.
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
-