buildr 1.3.3-java → 1.3.4-java
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +76 -0
- data/NOTICE +1 -1
- data/README.rdoc +9 -21
- data/Rakefile +17 -34
- data/_buildr +3 -12
- data/{doc/print.toc.yaml → _jbuildr} +14 -14
- data/addon/buildr/cobertura.rb +5 -219
- data/addon/buildr/drb.rb +281 -0
- data/addon/buildr/emma.rb +5 -221
- data/addon/buildr/nailgun.rb +93 -689
- data/bin/buildr +0 -9
- data/buildr.buildfile +4 -4
- data/buildr.gemspec +27 -21
- data/doc/_layouts/default.html +82 -0
- data/doc/_layouts/preface.html +22 -0
- data/doc/{pages/artifacts.textile → artifacts.textile} +82 -42
- data/doc/{pages/building.textile → building.textile} +89 -47
- data/doc/{pages/contributing.textile → contributing.textile} +53 -45
- data/doc/css/default.css +6 -5
- data/doc/css/print.css +17 -24
- data/doc/css/syntax.css +7 -36
- data/doc/download.textile +68 -0
- data/doc/{pages/extending.textile → extending.textile} +45 -24
- data/doc/{pages/getting_started.textile → getting_started.textile} +158 -88
- data/doc/images/asf-logo.gif +0 -0
- data/doc/images/note.png +0 -0
- data/doc/index.textile +47 -0
- data/doc/{pages/languages.textile → languages.textile} +108 -54
- data/doc/mailing_lists.textile +25 -0
- data/doc/{pages/more_stuff.textile → more_stuff.textile} +152 -73
- data/doc/{pages/packaging.textile → packaging.textile} +181 -96
- data/doc/preface.textile +28 -0
- data/doc/{pages/projects.textile → projects.textile} +55 -40
- data/doc/scripts/buildr-git.rb +364 -264
- data/doc/scripts/gitflow.rb +296 -0
- data/doc/scripts/install-jruby.sh +2 -2
- data/doc/scripts/install-linux.sh +6 -6
- data/doc/scripts/install-osx.sh +2 -2
- data/doc/{pages/settings_profiles.textile → settings_profiles.textile} +83 -45
- data/doc/{pages/testing.textile → testing.textile} +77 -41
- data/lib/buildr.rb +5 -5
- data/lib/buildr/core.rb +2 -0
- data/lib/buildr/core/application.rb +321 -151
- data/lib/buildr/core/build.rb +298 -167
- data/lib/buildr/core/checks.rb +4 -132
- data/lib/buildr/core/common.rb +1 -5
- data/lib/buildr/core/compile.rb +3 -9
- data/lib/buildr/core/environment.rb +12 -3
- data/lib/buildr/core/filter.rb +20 -18
- data/lib/buildr/core/generate.rb +36 -36
- data/lib/buildr/core/help.rb +2 -1
- data/lib/buildr/core/osx.rb +46 -0
- data/lib/buildr/core/progressbar.rb +1 -1
- data/lib/buildr/core/project.rb +7 -34
- data/lib/buildr/core/test.rb +12 -6
- data/lib/buildr/core/transports.rb +13 -11
- data/lib/buildr/core/util.rb +14 -23
- data/lib/buildr/groovy/bdd.rb +3 -2
- data/lib/buildr/groovy/compiler.rb +1 -1
- data/lib/buildr/ide/eclipse.rb +31 -21
- data/lib/buildr/ide/idea.rb +3 -2
- data/lib/buildr/ide/idea7x.rb +6 -4
- data/lib/buildr/java/ant.rb +3 -1
- data/lib/buildr/java/bdd.rb +9 -7
- data/lib/buildr/java/cobertura.rb +243 -0
- data/lib/buildr/java/compiler.rb +5 -4
- data/lib/buildr/java/emma.rb +244 -0
- data/lib/buildr/java/packaging.rb +11 -8
- data/lib/buildr/java/pom.rb +0 -4
- data/lib/buildr/java/rjb.rb +1 -1
- data/lib/buildr/java/test_result.rb +5 -7
- data/lib/buildr/java/tests.rb +17 -11
- data/lib/buildr/packaging.rb +5 -2
- data/lib/buildr/packaging/archive.rb +488 -0
- data/lib/buildr/packaging/artifact.rb +48 -29
- data/lib/buildr/packaging/artifact_namespace.rb +6 -6
- data/lib/buildr/packaging/gems.rb +4 -4
- data/lib/buildr/packaging/package.rb +3 -2
- data/lib/buildr/packaging/tar.rb +85 -3
- data/lib/buildr/packaging/version_requirement.rb +172 -0
- data/lib/buildr/packaging/zip.rb +24 -682
- data/lib/buildr/packaging/ziptask.rb +313 -0
- data/lib/buildr/scala.rb +5 -0
- data/lib/buildr/scala/bdd.rb +100 -0
- data/lib/buildr/scala/compiler.rb +45 -4
- data/lib/buildr/scala/tests.rb +12 -59
- data/rakelib/checks.rake +57 -0
- data/rakelib/doc.rake +58 -68
- data/rakelib/jekylltask.rb +110 -0
- data/rakelib/package.rake +35 -37
- data/rakelib/release.rake +119 -35
- data/rakelib/rspec.rake +29 -39
- data/rakelib/setup.rake +21 -59
- data/rakelib/stage.rake +184 -26
- data/spec/addon/drb_spec.rb +328 -0
- data/spec/core/application_spec.rb +32 -25
- data/spec/core/build_spec.rb +336 -126
- data/spec/core/checks_spec.rb +292 -310
- data/spec/core/common_spec.rb +8 -2
- data/spec/core/compile_spec.rb +17 -1
- data/spec/core/generate_spec.rb +3 -3
- data/spec/core/project_spec.rb +18 -10
- data/spec/core/test_spec.rb +8 -1
- data/spec/core/transport_spec.rb +40 -3
- data/spec/core/util_spec.rb +67 -0
- data/spec/ide/eclipse_spec.rb +96 -28
- data/spec/ide/idea7x_spec.rb +84 -0
- data/spec/java/ant.rb +5 -0
- data/spec/java/bdd_spec.rb +12 -3
- data/spec/{addon → java}/cobertura_spec.rb +6 -6
- data/spec/{addon → java}/emma_spec.rb +5 -6
- data/spec/java/java_spec.rb +12 -2
- data/spec/java/packaging_spec.rb +31 -2
- data/spec/{addon → java}/test_coverage_spec.rb +3 -3
- data/spec/java/tests_spec.rb +5 -0
- data/spec/packaging/archive_spec.rb +11 -1
- data/spec/{core → packaging}/artifact_namespace_spec.rb +10 -2
- data/spec/packaging/artifact_spec.rb +44 -3
- data/spec/packaging/packaging_spec.rb +1 -1
- data/spec/sandbox.rb +17 -14
- data/spec/scala/bdd_spec.rb +150 -0
- data/spec/scala/compiler_spec.rb +27 -0
- data/spec/scala/scala.rb +38 -0
- data/spec/scala/tests_spec.rb +78 -33
- data/spec/spec_helpers.rb +29 -5
- data/spec/version_requirement_spec.rb +6 -0
- metadata +176 -172
- data/DISCLAIMER +0 -7
- data/doc/images/apache-incubator-logo.png +0 -0
- data/doc/pages/download.textile +0 -51
- data/doc/pages/index.textile +0 -42
- data/doc/pages/mailing_lists.textile +0 -17
- data/doc/pages/recipes.textile +0 -103
- data/doc/pages/troubleshooting.textile +0 -103
- data/doc/pages/whats_new.textile +0 -323
- data/doc/print.haml +0 -51
- data/doc/site.haml +0 -56
- data/doc/site.toc.yaml +0 -47
- data/etc/git-svn-authors +0 -16
- data/lib/buildr/core/application_cli.rb +0 -139
- data/rakelib/apache.rake +0 -191
- data/rakelib/changelog.rake +0 -57
- data/rakelib/rubyforge.rake +0 -53
- data/rakelib/scm.rake +0 -49
Binary file
|
data/doc/images/note.png
CHANGED
File without changes
|
data/doc/index.textile
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
title: Welcome
|
4
|
+
---
|
5
|
+
|
6
|
+
h2(#what_is_apache_buildr). What is Apache Buildr?
|
7
|
+
|
8
|
+
Apache Buildr is a build system for Java-based applications, including support for Scala, Groovy and a growing number of JVM languages and tools. We wanted something that's simple and intuitive to use, so we only need to tell it what to do, and it takes care of the rest. But also something we can easily extend for those one-off tasks, with a language that's a joy to use. And of course, we wanted it to be fast, reliable and have outstanding dependency management.
|
9
|
+
|
10
|
+
Here's what we got:
|
11
|
+
|
12
|
+
* A simple way to specify projects, and build large projects out of smaller sub-projects.
|
13
|
+
* Pre-canned tasks that require the least amount of configuration, keeping the build script DRY and simple.
|
14
|
+
* Compiling, copying and filtering resources, JUnit/TestNG test cases, APT source code generation, Javadoc and more.
|
15
|
+
* A dependency mechanism that only builds what has changed since the last release.
|
16
|
+
* A drop-in replacement for Maven 2.0, Buildr uses the same file layout, artifact specifications, local and remote repositories.
|
17
|
+
* All your Ant tasks are belong to us! Anything you can do with Ant, you can do with Buildr.
|
18
|
+
* No overhead for building "plugins" or configuration. Just write new tasks or functions.
|
19
|
+
* Buildr is Ruby all the way down. No one-off task is too demanding when you write code using variables, functions and objects.
|
20
|
+
* Simple way to upgrade to new versions.
|
21
|
+
* Did we mention fast?
|
22
|
+
|
23
|
+
So let's get started. You can "read the documentation online":getting_started.html, or "download the PDF":buildr.pdf.
|
24
|
+
|
25
|
+
|
26
|
+
h2(#news). Project News
|
27
|
+
|
28
|
+
New in Buildr 1.3.4:
|
29
|
+
|
30
|
+
* We graduated from the Apache Incubator! This is our first release as a top-level Apache project: http://buildr.apache.org. New site, new mailing lists, SVN, Git, etc.
|
31
|
+
* Support for Git version control system
|
32
|
+
* Improved all-around Scala support, including joint Java-Scala compilation and upgraded to Scala 2.7.3 dependencies: ScalaSpecs 1.4.3, ScalaCheck 1.5 and ScalaTest 0.9.5
|
33
|
+
* New 'artifacts:sources' task to download source code for artifact jars
|
34
|
+
* Source code attachments for external dependencies in Eclipse and IDEA projects
|
35
|
+
* Dependency upgrades such as Rake 0.8.4, Net-SSH 2.0.11, RSpec 1.2.2, JRuby 1.1.6.
|
36
|
+
* Documentation now uses "Jekyll":http://github.com/mojombo/jekyll/ to generate web site and PDF document. This replaces Docter so less code to
|
37
|
+
maintain and the same Textile/Liquid mechanism as when using Github pages.
|
38
|
+
* And 20 or so bug fixes.
|
39
|
+
|
40
|
+
See the "CHANGELOG":CHANGELOG for full details.
|
41
|
+
|
42
|
+
|
43
|
+
h2(#legal). Legal Notices
|
44
|
+
|
45
|
+
The Apache Software Foundation is a non-profit organization, consider "sponsoring":http://www.apache.org/foundation/sponsorship.html and check the "thanks":http://www.apache.org/foundation/thanks.html page.
|
46
|
+
|
47
|
+
"ColorCons":http://www.mouserunner.com/Spheres_ColoCons1_Free_Icons.html, copyright of Ken Saunders. "DejaVu fonts":http://dejavu.sourceforge.net, copyright of Bitstream, Inc.
|
@@ -1,7 +1,10 @@
|
|
1
|
-
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
title: Languages
|
4
|
+
---
|
2
5
|
|
3
6
|
|
4
|
-
h2. Java
|
7
|
+
h2(#java). Java
|
5
8
|
|
6
9
|
|
7
10
|
h3. Compiling Java
|
@@ -43,9 +46,11 @@ The JUnit test framework supports the following options:
|
|
43
46
|
|
44
47
|
For example, to pass properties to the test case:
|
45
48
|
|
46
|
-
|
49
|
+
<notextile>
|
50
|
+
{% highlight ruby %}
|
47
51
|
test.using :properties=>{ :currency=>'USD' }
|
48
|
-
}
|
52
|
+
{% endhighlight %}
|
53
|
+
</notextile>
|
49
54
|
|
50
55
|
There are benefits to running test cases in separate VMs. The default forking mode is @:once@, and you can change it by setting the @:fork@ option.
|
51
56
|
|
@@ -58,28 +63,34 @@ You can see your tests running in the console, and if any tests fail, Buildr wil
|
|
58
63
|
|
59
64
|
In addition, you can get a consolidated XML or HTML report by running the @junit:report@ task. For example:
|
60
65
|
|
61
|
-
|
66
|
+
<notextile>
|
67
|
+
{% highlight sh %}
|
62
68
|
$ buildr test junit:report test=all
|
63
69
|
$ firefox report/junit/html/index.html
|
64
|
-
}
|
70
|
+
{% endhighlight %}
|
71
|
+
</notextile>
|
65
72
|
|
66
73
|
The @junit:report@ task generates a report from all tests run so far. If you run tests in a couple of projects, it will generate a report only for these two projects. The example above runs tests in all the projects before generating the reports.
|
67
74
|
|
68
75
|
You can use the @build.yaml@ settings file to specify a particular version of JUnit or JMock. For example, to force your build to use JUnit version 4.4 and JMock 2.0:
|
69
76
|
|
70
|
-
|
77
|
+
<notextile>
|
78
|
+
{% highlight yaml %}
|
71
79
|
junit: 4.4
|
72
80
|
jmock: 2.0
|
73
|
-
}
|
81
|
+
{% endhighlight %}
|
82
|
+
</notextile>
|
74
83
|
|
75
84
|
|
76
85
|
h4. TestNG
|
77
86
|
|
78
87
|
You can use "TestNG":http://testng.org instead of JUnit. To select TestNG as the test framework, add this to your project:
|
79
88
|
|
80
|
-
|
89
|
+
<notextile>
|
90
|
+
{% highlight ruby %}
|
81
91
|
test.using :testng
|
82
|
-
}
|
92
|
+
{% endhighlight %}
|
93
|
+
</notextile>
|
83
94
|
|
84
95
|
Like all other options you can set with @test.using@, it affects the projects and all its sub-projects, so you only need to do this once at the top-most project to use TestNG throughout. You can also mix TestNG and JUnit by setting different projects to use different frameworks, but you can't mix both frameworks in the same project. (And yes, @test.using :junit@ will switch a project back to using JUnit)
|
85
96
|
|
@@ -93,9 +104,11 @@ The TestNG test framework supports the following options:
|
|
93
104
|
|
94
105
|
You can use the @build.yaml@ settings file to specify a particular version of TestNG, for example, to force your build to use TestNG 5.7:
|
95
106
|
|
96
|
-
|
107
|
+
<notextile>
|
108
|
+
{% highlight yaml %}
|
97
109
|
testng: 5.7
|
98
|
-
}
|
110
|
+
{% endhighlight %}
|
111
|
+
</notextile>
|
99
112
|
|
100
113
|
|
101
114
|
h4. JBehave
|
@@ -106,9 +119,11 @@ To use JBehave in your project you can select it with @test.using :jbehave@.
|
|
106
119
|
|
107
120
|
This framework will search for the following patterns under your project:
|
108
121
|
|
109
|
-
|
122
|
+
<notextile>
|
123
|
+
{% highlight text %}
|
110
124
|
src/spec/java/**/*Behaviour.java
|
111
|
-
}
|
125
|
+
{% endhighlight %}
|
126
|
+
</notextile>
|
112
127
|
|
113
128
|
Supports the following options:
|
114
129
|
|
@@ -118,34 +133,52 @@ Supports the following options:
|
|
118
133
|
|
119
134
|
You can use the @build.yaml@ settings file to specify a particular version of JBehave, for example, to force your build to use JBehave 1.0.1:
|
120
135
|
|
121
|
-
|
136
|
+
<notextile>
|
137
|
+
{% highlight yaml %}
|
122
138
|
jbehave: 1.0.1
|
123
|
-
}
|
139
|
+
{% endhighlight %}
|
140
|
+
</notextile>
|
124
141
|
|
125
142
|
|
126
|
-
h2. Scala
|
143
|
+
h2(#scala). Scala
|
127
144
|
|
128
145
|
Before using Scala features, you must first set the @SCALA_HOME@ environment variable to point to the root of your Scala distribution.
|
129
146
|
|
130
147
|
On Windows:
|
131
148
|
|
132
|
-
|
133
|
-
|
134
|
-
|
149
|
+
<notextile>
|
150
|
+
{% highlight sh %}
|
151
|
+
> set SCALA_HOME=C:\Path\To\Scala-2.7.3
|
152
|
+
{% endhighlight %}
|
153
|
+
</notextile>
|
135
154
|
|
136
155
|
On Linux and other Unix variants,
|
137
156
|
|
138
|
-
|
139
|
-
|
140
|
-
|
157
|
+
<notextile>
|
158
|
+
{% highlight sh %}
|
159
|
+
> export SCALA_HOME=/path/to/scala-2.7.3
|
160
|
+
{% endhighlight %}
|
161
|
+
</notextile>
|
141
162
|
|
142
|
-
The @SCALA_HOME@ base directory should be such that Scala core libraries are
|
163
|
+
The @SCALA_HOME@ base directory should be such that Scala core libraries are located directly under the "lib" subdirectory, and Scala scripts are under the "bin" directory. This step is not necessary if you installed Scala using MacPorts (OS X).
|
164
|
+
|
165
|
+
You must also require the Scala compiler in your buildfile:
|
166
|
+
|
167
|
+
<notextile>
|
168
|
+
{% highlight ruby %}
|
169
|
+
require 'buildr/scala'
|
170
|
+
{% endhighlight %}
|
171
|
+
</notextile>
|
143
172
|
|
144
173
|
h3. Compiling Scala
|
145
174
|
|
146
175
|
The Scala compiler looks for source files in the project's @src/main/scala@ directory, and defaults to compiling them into the @target/classes@ directory. It looks for test cases in the project's @src/test/scala@ and defaults to compile them into the @target/test/classes@ directory.
|
147
176
|
|
148
|
-
|
177
|
+
Any Java source files found in the @src/main/java@ directory will be compiled using the Scala/Java joint compiler into the @target/classes@ directory. Both the Java and the Scala sources are compiled with an inclusive classpath, meaning that you may have a Java class which depends upon a Scala class which depends upon a Java class, all within the same project. The Java sources will be compiled with the same dependencies as the Scala sources with the addition of the @scala-library.jar@ file as required for Scala interop.
|
178
|
+
|
179
|
+
Note that you cannot use the Groovy *and* the Scala joint compilers in the same project. If both are required, the Groovy joint compiler will take precedence.
|
180
|
+
+
|
181
|
+
If you point the @compile@ task at any other source directory, it will use the Scala compiler if any of these directories contains files with the extension @.scala@. The joint compilation of Java sources may only be pointed at an alternative directory using the feature to redefine the @_(:src, :main, :java)@ path.
|
149
182
|
|
150
183
|
When using the Scala compiler, if you don't specify the packaging type, it defaults to JAR.
|
151
184
|
|
@@ -158,6 +191,7 @@ The Scala compiler supports the following options:
|
|
158
191
|
| @:other@ | Array of options passed to the compiler (e.g. @:other=>'-Xprint-types'@). |
|
159
192
|
| @:target@ | Bytecode compatibility (e.g. '1.4'). |
|
160
193
|
| @:warnings@ | Issue warnings when compiling. True when running in verbose mode. |
|
194
|
+
| @:javac@ | A hash of options passed to the @javac@ compiler verbatim. |
|
161
195
|
|
162
196
|
h4. Fast Scala Compiler
|
163
197
|
|
@@ -171,34 +205,37 @@ For example, @src/main/scala/com/example/MyClass.scala@ should generate at least
|
|
171
205
|
|
172
206
|
h3. Testing with Scala
|
173
207
|
|
174
|
-
Buildr supports
|
175
|
-
|
176
|
-
Scala testing is automatically enabled if you have any @.scala@ source files under @src/test/scala@. If you are not using this convention, you can explicit set the test framework by doing,
|
208
|
+
Buildr supports two main Scala testing frameworks: "ScalaTest":http://www.artima.com/scalatest and "Specs":http://code.google.com/p/specs/. "ScalaCheck":http://code.google.com/p/scalacheck/ is also supported within the confines of either of these two frameworks. Thus, your Specs may use ScalaCheck properties, as may your ScalaTest suites.
|
177
209
|
|
178
|
-
|
210
|
+
<notextile>
|
211
|
+
{% highlight ruby %}
|
179
212
|
test.using(:scalatest)
|
180
|
-
}
|
181
|
-
|
182
|
-
The @:scalatest@ test framework handles ScalaTest, Specs and ScalaCheck therefore all 3 frameworks may be used within the same project.
|
213
|
+
{% endhighlight %}
|
214
|
+
</notextile>
|
183
215
|
|
184
216
|
h4. ScalaTest
|
185
217
|
|
218
|
+
ScalaTest support is activated automatically when there are any @.scala@ source files contained in the @src/test/scala@ directory. If you are not using this directory convention, you may force the test framework by using the @test.using :scalatest@ directive.
|
219
|
+
|
186
220
|
Buildr automatically detects and runs tests that extend the @org.scalatest.Suite@ interface.
|
187
221
|
|
188
222
|
A very simplistic test class might look like,
|
189
223
|
|
190
|
-
|
224
|
+
<notextile>
|
225
|
+
{% highlight scala %}
|
191
226
|
class MySuite extends org.scalatest.FunSuite {
|
192
227
|
test("addition") {
|
193
228
|
val sum = 1 + 1
|
194
229
|
assert(sum === 2)
|
195
230
|
}
|
196
231
|
}
|
197
|
-
}
|
232
|
+
{% endhighlight %}
|
233
|
+
</notextile>
|
198
234
|
|
199
235
|
You can also pass properties to your tests by doing @test.using :properties => { 'name'=>'value' }@, and by overriding the @Suite.runTests@ method in a manner similar to:
|
200
236
|
|
201
|
-
|
237
|
+
<notextile>
|
238
|
+
{% highlight scala %}
|
202
239
|
import org.scalatest._
|
203
240
|
|
204
241
|
class PropertyTestSuite extends FunSuite {
|
@@ -217,15 +254,19 @@ class PropertyTestSuite extends FunSuite {
|
|
217
254
|
includes, excludes, properties)
|
218
255
|
}
|
219
256
|
}
|
220
|
-
}
|
257
|
+
{% endhighlight %}
|
258
|
+
</notextile>
|
221
259
|
|
222
260
|
h4. Specs
|
223
261
|
|
224
|
-
|
262
|
+
Specs is automatically selected whenever there are @.scala@ source files under the @src/spec/scala@ directory. It is also possible to force selection of the test framework by using the @test.using :specs@ directive. This can sometimes be useful when Scala sources may be found in *both* @src/test/scala@ and @src/spec/scala@. Normally in such cases, ScalaTest will have selection precedence, meaning that in case of a conflict between it and Specs, ScalaTest will be chosen.
|
263
|
+
|
264
|
+
Any objects which extend the @org.specs.Specification@ superclass will be automatically detected and run. Note that any *classes* which extend @Specification@ will also be invoked. As such classes will not have a @main@ method, such an invocation will raise an error.
|
225
265
|
|
226
266
|
A simple specification might look like this:
|
227
267
|
|
228
|
-
|
268
|
+
<notextile>
|
269
|
+
{% highlight scala %}
|
229
270
|
import org.specs._
|
230
271
|
import org.specs.runner._
|
231
272
|
|
@@ -236,13 +277,15 @@ object StringSpecs extends Specification {
|
|
236
277
|
}
|
237
278
|
}
|
238
279
|
}
|
239
|
-
}
|
280
|
+
{% endhighlight %}
|
281
|
+
</notextile>
|
240
282
|
|
241
283
|
h4. ScalaCheck
|
242
284
|
|
243
285
|
You may use ScalaCheck inside ScalaTest- and Specs-inherited classes. Here is an example illustrating checks inside a ScalaTest suite,
|
244
286
|
|
245
|
-
|
287
|
+
<notextile>
|
288
|
+
{% highlight scala %}
|
246
289
|
import org.scalatest.prop.PropSuite
|
247
290
|
import org.scalacheck.Arbitrary._
|
248
291
|
import org.scalacheck.Prop._
|
@@ -261,18 +304,21 @@ class MySuite extends PropSuite {
|
|
261
304
|
(a: List[Int], b: List[Int]) => a.size + b.size == (a ::: b).size
|
262
305
|
)
|
263
306
|
}
|
264
|
-
}
|
307
|
+
{% endhighlight %}
|
308
|
+
</notextile>
|
265
309
|
|
266
310
|
|
267
|
-
h2. Groovy
|
311
|
+
h2(#groovy). Groovy
|
268
312
|
|
269
313
|
h3. Compiling Groovy
|
270
314
|
|
271
315
|
Before using the Groovy compiler, you must first require it on your buildfile:
|
272
316
|
|
273
|
-
|
317
|
+
<notextile>
|
318
|
+
{% highlight ruby %}
|
274
319
|
require 'buildr/java/groovyc'
|
275
|
-
}
|
320
|
+
{% endhighlight %}
|
321
|
+
</notextile>
|
276
322
|
|
277
323
|
Once loaded, the groovyc compiler will be automatically selected if any .groovy source files are found under @src/main/groovy@ directory, compiling them by default into the @target/classes@ directory.
|
278
324
|
|
@@ -313,10 +359,12 @@ To use this framework in your project you can select it with @test.using :easyb@
|
|
313
359
|
|
314
360
|
This framework will search for the following patterns under your project:
|
315
361
|
|
316
|
-
|
362
|
+
<notextile>
|
363
|
+
{% highlight text %}
|
317
364
|
src/spec/groovy/**/*Behavior.groovy
|
318
365
|
src/spec/groovy/**/*Story.groovy
|
319
|
-
}
|
366
|
+
{% endhighlight %}
|
367
|
+
</notextile>
|
320
368
|
|
321
369
|
Supports the following options:
|
322
370
|
|
@@ -326,13 +374,13 @@ Supports the following options:
|
|
326
374
|
| @:format@ | Report format, either @:txt@ or @:xml@ |
|
327
375
|
|
328
376
|
|
329
|
-
h2. Ruby
|
377
|
+
h2(#ruby). Ruby
|
330
378
|
|
331
379
|
h3. Testing with Ruby
|
332
380
|
|
333
381
|
Buildr provides integration with some ruby testing frameworks, allowing you to test your Java code with state of the art tools.
|
334
382
|
|
335
|
-
Testing code is written in "Ruby":http://www.ruby-lang.org/en/ language, and is run by using "JRuby":http://jruby.codehaus.org/.That means you have access to all your Java classes and any Java or Ruby tool out there.
|
383
|
+
Testing code is written in "Ruby":http://www.ruby-lang.org/en/ language, and is run by using "JRuby":http://jruby.codehaus.org/. That means you have access to all your Java classes and any Java or Ruby tool out there.
|
336
384
|
|
337
385
|
Because of the use of JRuby, you will notice that running ruby tests is faster when running Buildr on JRuby, as in this case there's no need to run another JVM.
|
338
386
|
|
@@ -340,9 +388,11 @@ p(tip). When not running on JRuby, Buildr will use the @JRUBY_HOME@ environment
|
|
340
388
|
|
341
389
|
You can use the @build.yaml@ settings file to specify a particular version of JRuby (defaults to @1.1.4@). For example:
|
342
390
|
|
343
|
-
|
391
|
+
<notextile>
|
392
|
+
{% highlight yaml %}
|
344
393
|
jruby: 1.1.3
|
345
|
-
}
|
394
|
+
{% endhighlight %}
|
395
|
+
</notextile>
|
346
396
|
|
347
397
|
h4. RSpec
|
348
398
|
|
@@ -352,9 +402,11 @@ To use this framework in your project you can select it with @test.using :rspec@
|
|
352
402
|
|
353
403
|
This framework will search for the following patterns under your project:
|
354
404
|
|
355
|
-
|
405
|
+
<notextile>
|
406
|
+
{% highlight text %}
|
356
407
|
src/spec/ruby/**/*_spec.rb
|
357
|
-
}
|
408
|
+
{% endhighlight %}
|
409
|
+
</notextile>
|
358
410
|
|
359
411
|
Supports the following options:
|
360
412
|
|
@@ -375,9 +427,11 @@ To use this framework in your project you can select it with @test.using :jtestr
|
|
375
427
|
|
376
428
|
You can use the @build.yaml@ settings file to specify a particular version of JtestR (defaults to @0.3.1@). For example:
|
377
429
|
|
378
|
-
|
430
|
+
<notextile>
|
431
|
+
{% highlight yaml %}
|
379
432
|
jtestr: 0.3.1
|
380
|
-
}
|
433
|
+
{% endhighlight %}
|
434
|
+
</notextile>
|
381
435
|
|
382
436
|
To customize TestNG/JUnit versions refer to their respective section.
|
383
437
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
title: Mailing Lists
|
4
|
+
---
|
5
|
+
|
6
|
+
<form action="http://buildr.markmail.org/search/">Search all Buildr archives: <input type="text" name="q" size="50"/> <input type="submit" value="Search"/></form><br/>
|
7
|
+
|
8
|
+
|_. users |_. For developers working with Buildr |
|
9
|
+
| Post | "users@buildr.apache.org":mailto:users@buildr.apache.org |
|
10
|
+
| Search | "http://buildr.markmail.org/search/list:users":http://buildr.markmail.org/search/list:users |
|
11
|
+
| Subscribe | "users-subscribe@buildr.apache.org":mailto:users-subscribe@buildr.apache.org |
|
12
|
+
| Unsubscribe | "users-unsubscribe@buildr.apache.org":mailto:users-unsubscribe@buildr.apache.org |
|
13
|
+
|_. dev |_. For development of Buildr itself |
|
14
|
+
| Post | "dev@buildr.apache.org":mailto:dev@buildr.apache.org |
|
15
|
+
| Search | "http://buildr.markmail.org/search/list:dev":http://buildr.markmail.org/search/list:dev |
|
16
|
+
| Subscribe | "dev-subscribe@buildr.apache.org":mailto:dev-subscribe@buildr.apache.org |
|
17
|
+
| Unsubscribe | "dev-unsubscribe@buildr.apache.org":mailto:dev-unsubscribe@buildr.apache.org |
|
18
|
+
|_. commits |_. Commit messages and JIRA status |
|
19
|
+
| Search | "http://buildr.markmail.org/search/list:commits":http://buildr.markmail.org/search/list:commits |
|
20
|
+
| Subscribe | "commits-subscribe@buildr.apache.org":mailto:commits-subscribe@buildr.apache.org |
|
21
|
+
| Unsubscribe | "commits-unsubscribe@buildr.apache.org":mailto:commits-unsubscribe@buildr.apache.org |
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
@@ -1,7 +1,10 @@
|
|
1
|
-
|
1
|
+
---
|
2
|
+
layout: default
|
3
|
+
title: More Stuff
|
4
|
+
---
|
2
5
|
|
3
6
|
|
4
|
-
h2. Using Gems
|
7
|
+
h2(#gems). Using Gems
|
5
8
|
|
6
9
|
The purpose of the buildfile is to define your projects, and the various tasks and functions used for building them. Some of these are specific to your projects, others are more general in nature, and you may want to share them across projects.
|
7
10
|
|
@@ -15,9 +18,10 @@ You can also set up your own private repository and use it instead or in additio
|
|
15
18
|
|
16
19
|
If your build depends on other gems, you will want to specify these dependencies as part of your build and check that configuration into source control. That way you can have a specific environment that will guarantee repeatable builds, whether you're building a particular version, moving between branches, or joining an existing project. Buildr will take care of installing all the necessary dependencies, which you can then manage with the @gem@ command.
|
17
20
|
|
18
|
-
Use the @build.yaml@ file to specify these dependencies (see "Build Settings":settings_profiles.html#
|
21
|
+
Use the @build.yaml@ file to specify these dependencies (see "Build Settings":settings_profiles.html#build for more information), for example:
|
19
22
|
|
20
|
-
|
23
|
+
<notextile>
|
24
|
+
{% highlight yaml %}
|
21
25
|
# This project requires the following gems
|
22
26
|
gems:
|
23
27
|
# Suppose we want to notify developers when testcases fail.
|
@@ -25,7 +29,8 @@ gems:
|
|
25
29
|
# we test with ruby mock objects
|
26
30
|
- mocha
|
27
31
|
- ci_reporter
|
28
|
-
}
|
32
|
+
{% endhighlight %}
|
33
|
+
</notextile>
|
29
34
|
|
30
35
|
Gems contain executable code, and for that reason Buildr will not install gems without your permission. When you run a build that includes any dependencies that are not already installed on your machine, Buildr will ask for permission before installing them. On Unix-based operating systems, you will also need sudo privileges and will be asked for your password before proceeding.
|
31
36
|
|
@@ -39,28 +44,32 @@ Buildr will install the latest version that matches the version requirement. To
|
|
39
44
|
|
40
45
|
Most gems include documentation that you can access in several forms. You can use the @ri@ command line tool to find out more about a class, module or specific method. For example:
|
41
46
|
|
42
|
-
|
47
|
+
<notextile>
|
48
|
+
{% highlight sh %}
|
43
49
|
$ ri Buildr::Jetty
|
44
50
|
$ ri Buildr::Jetty.start
|
45
|
-
}
|
51
|
+
{% endhighlight %}
|
52
|
+
</notextile>
|
46
53
|
|
47
54
|
You can also access documentation from a Web browser by running @gem server@ and pointing your browser to "http://localhost:8808":http://localhost:8808. Note that after installing a new gem, you will need to restart the gem server to see its documentation.
|
48
55
|
|
49
56
|
|
50
|
-
h2. Using Java Libraries
|
57
|
+
h2(#java). Using Java Libraries
|
51
58
|
|
52
59
|
Buildr runs along side a JVM, using either RJB or JRuby. The Java module allows you to access Java classes and create Java objects.
|
53
60
|
|
54
61
|
Java classes are accessed as static methods on the @Java@ module, for example:
|
55
62
|
|
56
|
-
|
63
|
+
<notextile>
|
64
|
+
{% highlight ruby %}
|
57
65
|
str = Java.java.lang.String.new('hai!')
|
58
66
|
str.toUpperCase
|
59
67
|
=> 'HAI!'
|
60
68
|
Java.java.lang.String.isInstance(str)
|
61
69
|
=> true
|
62
70
|
Java.com.sun.tools.javac.Main.compile(args)
|
63
|
-
}
|
71
|
+
{% endhighlight %}
|
72
|
+
</notextile>
|
64
73
|
|
65
74
|
The @classpath@ attribute allows Buildr to add JARs and directories to the classpath, for example, we use it to load Ant and various Ant tasks, code generators, test frameworks, and so forth.
|
66
75
|
|
@@ -68,9 +77,11 @@ When using an artifact specification, Buildr will automatically download and ins
|
|
68
77
|
|
69
78
|
For example, Ant is loaded as follows:
|
70
79
|
|
71
|
-
|
80
|
+
<notextile>
|
81
|
+
{% highlight ruby %}
|
72
82
|
Java.classpath << 'org.apache.ant:ant:jar:1.7.0'
|
73
|
-
}
|
83
|
+
{% endhighlight %}
|
84
|
+
</notextile>
|
74
85
|
|
75
86
|
Artifacts can only be downloaded after the Buildfile has loaded, giving it a chance to specify which remote repositories to use, so adding to classpath does not by itself load any libraries. You must call @Java.load@ before accessing any Java classes to give Buildr a chance to load the libraries specified in the classpath.
|
76
87
|
|
@@ -82,39 +93,72 @@ When building an extension, make sure to follow these rules:
|
|
82
93
|
# Check on a clean build with empty local repository.
|
83
94
|
|
84
95
|
|
85
|
-
h2.
|
96
|
+
h2(#buildr-server). BuildrServer
|
86
97
|
|
87
|
-
"
|
98
|
+
Buildr provides an addon that allows you start a "dRuby":http://www.ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html server hosting a buildfile, so that you can later invoke tasks on it without having to load the complete buildr runtime again.
|
88
99
|
|
89
|
-
|
100
|
+
Usage:
|
101
|
+
|
102
|
+
<notextile>
|
103
|
+
{% highlight sh %}
|
104
|
+
buildr -r buildr/drb drb:start
|
105
|
+
{% endhighlight %}
|
106
|
+
</notextile>
|
107
|
+
|
108
|
+
To stop the BuildrServer simply use Ctrl+C or kill the process.
|
109
|
+
|
110
|
+
Once the server has been started you can invoke tasks using a simple script:
|
111
|
+
|
112
|
+
<notextile>
|
113
|
+
{% highlight ruby %}
|
114
|
+
#!/usr/bin/env ruby
|
115
|
+
require 'rubygems'
|
116
|
+
require 'buildr/drb'
|
117
|
+
Buildr::DRbApplication.run
|
118
|
+
{% endhighlight %}
|
119
|
+
</notextile>
|
120
|
+
|
121
|
+
Save this script as @dbuildr@, make it executable and use it to invoke tasks.
|
122
|
+
|
123
|
+
<notextile>
|
124
|
+
{% highlight sh %}
|
125
|
+
$ dbuildr clean compile
|
126
|
+
{% endhighlight %}
|
127
|
+
</notextile>
|
128
|
+
|
129
|
+
@dbuildr@ will start the BuildrServer if there isn't one already running.
|
130
|
+
Subsequent calls to dbuildr will act as the client and invoke the tasks you
|
131
|
+
provide to the server.
|
132
|
+
If the buildfile has been modified it will be reloaded on the BuildrServer.
|
133
|
+
|
134
|
+
h3(#nailgun). Nailgun
|
135
|
+
|
136
|
+
"Nailgun":http://www.martiansoftware.com/nailgun/index.html is a client, protocol, and server for running Java programs from the command line without incurring the JVM startup overhead. Nailgun integration is available only when running Buildr within JRuby.
|
137
|
+
|
138
|
+
JRuby users need not to create the @dbuildr@ script listed on the previous section, as they can benefit from
|
139
|
+
using a nailgun client to invoke tasks without having to wait for JVM+JRuby to load.
|
90
140
|
|
91
141
|
Start the BuildrServer by executing
|
92
142
|
|
93
|
-
|
143
|
+
<notextile>
|
144
|
+
{% highlight sh %}
|
94
145
|
$ jruby -S buildr -rbuildr/nailgun nailgun:start
|
95
|
-
}
|
146
|
+
{% endhighlight %}
|
147
|
+
</notextile>
|
96
148
|
|
97
|
-
|
149
|
+
To stop the BuildrServer simply use Ctrl+C or kill the process.
|
98
150
|
|
99
|
-
|
100
|
-
|
101
|
-
# if this project is the same nailgun:start was invoked on, it's
|
102
|
-
# runtime has been cached, so no loading is performed unless
|
103
|
-
# the buildfile has been modified. otherwise the buildfile
|
104
|
-
# will be loaded on a previously loaded fresh-buildr runtime
|
105
|
-
# and it will be cached.
|
106
|
-
cd /some/buildr/project
|
107
|
-
ng nailgun:help # display nailgun help
|
108
|
-
ng nailgun:tasks # display overview of ng tasks
|
109
|
-
ng clean compile # just invoke those two tasks
|
110
|
-
}}}
|
151
|
+
Once the server has been started you can invoke tasks using the nailgun client
|
152
|
+
installed on @$JRUBY_HOME/tool/nailgun/ng@
|
111
153
|
|
112
|
-
|
154
|
+
<notextile>
|
155
|
+
{% highlight sh %}
|
156
|
+
$ ng clean compile
|
157
|
+
{% endhighlight %}
|
158
|
+
</notextile>
|
113
159
|
|
114
|
-
Be sure to read the nailgun help by executing the @nailgun:help@ task.
|
115
160
|
|
116
|
-
|
117
|
-
h2. Growl, Qube
|
161
|
+
h2(#growl). Growl, Qube
|
118
162
|
|
119
163
|
For OS X users, Buildr supports "Growl":http://growl.info/ out of the box to send "completed and "failed" notifications to the user.
|
120
164
|
|
@@ -125,7 +169,8 @@ For other platforms or if you want to notify the user differently, Buildr offers
|
|
125
169
|
|
126
170
|
Here is an example using these extension points to send notifications using "Qube":http://launchpad.net/qube:
|
127
171
|
|
128
|
-
|
172
|
+
<notextile>
|
173
|
+
{% highlight ruby %}
|
129
174
|
# Send notifications using Qube
|
130
175
|
notify = lambda do |type, title, message|
|
131
176
|
param = case type
|
@@ -142,27 +187,40 @@ end
|
|
142
187
|
Buildr.application.on_failure do |title, message, ex|
|
143
188
|
notify['failed', title, message]
|
144
189
|
end
|
145
|
-
}
|
190
|
+
{% endhighlight %}
|
191
|
+
</notextile>
|
146
192
|
|
147
193
|
You can place this code inside @buildr.rb@ in your home directory.
|
148
194
|
|
149
|
-
h2. Eclipse, IDEA
|
195
|
+
h2(#eclipse_idea). Eclipse, IDEA
|
150
196
|
|
151
197
|
If you're using Eclipse, you can generate @.classpath@ and @.project@ from your Buildfile and use them to create a project in your workspace:
|
152
198
|
|
153
|
-
|
199
|
+
<notextile>
|
200
|
+
{% highlight sh %}
|
154
201
|
$ buildr eclipse
|
155
|
-
}
|
202
|
+
{% endhighlight %}
|
203
|
+
</notextile>
|
156
204
|
|
157
205
|
The @eclipse@ task will generate a @.classpath@ and @.project@ file for each of projects (and sub-project) that compiles source code. It will not generate files for other projects, for examples, projects you use strictly for packaging a distribution, or creating command line scripts, etc.
|
158
206
|
|
159
207
|
If you add a new project, change the dependencies, or make any other change to your Buildfile, just run the @eclipse@ task again to re-generate the Eclipse project files.
|
160
208
|
|
209
|
+
To have your libraries' source code available in Eclipse, run:
|
210
|
+
|
211
|
+
<notextile>
|
212
|
+
{% highlight sh %}
|
213
|
+
$ buildr artifacts:sources
|
214
|
+
{% endhighlight %}
|
215
|
+
</notextile>
|
216
|
+
|
161
217
|
If you prefer IntelliJ IDEA, you can always:
|
162
218
|
|
163
|
-
|
219
|
+
<notextile>
|
220
|
+
{% highlight sh %}
|
164
221
|
$ buildr idea
|
165
|
-
}
|
222
|
+
{% endhighlight %}
|
223
|
+
</notextile>
|
166
224
|
|
167
225
|
It will generate a @.iml@ file for every project (or subproject) and a @.ipr@ that you can directly open for the root project. To allow IntelliJ Idea to resolve external dependencies properly, you will need to add a @M2_REPO@ variable pointing to your Maven2 repository directory (@Settings / Path Variables@).
|
168
226
|
|
@@ -171,64 +229,78 @@ If you're using IDEA 7 or later, use the @buildr idea7x@ task instead. This tas
|
|
171
229
|
Also, check out the "Buildr plugin for IDEA":http://www.digitalsanctum.com/buildr-plug-in/ (IDEA 7 and later). Once installed, open your project with IDEA. If IDEA finds that you have Buildr installed and finds a buildfile in the project's directory, it will show all the tasks available for that project. To run a task, double-click it. When the task completes, IDEA will show the results in the Buildr Output window.
|
172
230
|
|
173
231
|
|
174
|
-
h2. Cobertura, Emma, JDepend
|
232
|
+
h2(#cobertura_emma_jdepend). Cobertura, Emma, JDepend
|
175
233
|
|
176
234
|
You can use "Cobertura":http://cobertura.sourceforge.net/ or "Emma":http://emma.sourceforge.net/ to instrument your code, run the tests and create a test coverage report in either HTML or XML format.
|
177
235
|
|
178
236
|
There are two tasks for each tool, both of which generate a test coverage report in the @reports/cobertura@ (respectively @reports/emma@) directory. For example:
|
179
237
|
|
180
|
-
|
238
|
+
<notextile>
|
239
|
+
{% highlight sh %}
|
181
240
|
$ buildr test cobertura:html
|
182
|
-
}
|
241
|
+
{% endhighlight %}
|
242
|
+
</notextile>
|
183
243
|
|
184
244
|
As you can guess, the other tasks are @cobertura:xml@, @emma:html@ and @emma:xml@.
|
185
245
|
|
186
246
|
If you want to generate a test coverage report only for a specific project, you can do so by using the project name as prefix to the tasks.
|
187
247
|
|
188
|
-
|
248
|
+
<notextile>
|
249
|
+
{% highlight sh %}
|
189
250
|
$ buildr subModule:cobertura:html
|
190
|
-
}
|
251
|
+
{% endhighlight %}
|
252
|
+
</notextile>
|
191
253
|
|
192
254
|
Each project can specify which classes to include or exclude from cobertura instrumentation by giving a class-name regexp to the @cobertura.include@ or @cobertura.exclude@ methods:
|
193
255
|
|
194
|
-
|
256
|
+
<notextile>
|
257
|
+
{% highlight ruby %}
|
195
258
|
define 'someModule' do
|
196
|
-
cobertura.include 'some.package
|
197
|
-
cobertura.include /some.(foo|bar)
|
259
|
+
cobertura.include 'some.package.==*=='
|
260
|
+
cobertura.include /some.(foo|bar).==*==/
|
198
261
|
cobertura.exclude 'some.foo.util.SimpleUtil'
|
199
|
-
cobertura.exclude
|
262
|
+
cobertura.exclude /==*==.Const(ants)?/i
|
200
263
|
end
|
201
|
-
}
|
264
|
+
{% endhighlight %}
|
265
|
+
</notextile>
|
202
266
|
|
203
267
|
Emma has @include@ and @exclude@ methods too, but they take glob patterns instead of regexps.
|
204
268
|
|
205
269
|
You can use "JDepend":http://clarkware.com/software/JDepend.html on to generate design quality metrics. There are three tasks this time, the eye candy one:
|
206
270
|
|
207
|
-
|
271
|
+
<notextile>
|
272
|
+
{% highlight sh %}
|
208
273
|
$ buildr jdepend:swing
|
209
|
-
}
|
274
|
+
{% endhighlight %}
|
275
|
+
</notextile>
|
210
276
|
|
211
277
|
The other two tasks are @jdepend:text@ and @jdepend:xml@.
|
212
278
|
|
213
279
|
We want Buildr to load fast, and not everyone cares for these tasks, so we don't include them by default. If you want to use one of them, you need to require it explicitly. The proper way to do it in Ruby:
|
214
280
|
|
215
|
-
|
216
|
-
|
217
|
-
require 'buildr/
|
281
|
+
<notextile>
|
282
|
+
{% highlight ruby %}
|
283
|
+
require 'buildr/java/cobertura'
|
284
|
+
require 'buildr/java/emma'
|
218
285
|
require 'buildr/jdepend'
|
219
|
-
}
|
286
|
+
{% endhighlight %}
|
287
|
+
</notextile>
|
220
288
|
|
221
289
|
You may want to add those to the Buildfile. Alternatively, you can use these tasks for all your projects without modifying the Buildfile. One convenient method is to add these lines to the @buildr.rb@ file in your home directory.
|
222
290
|
|
223
291
|
Another option is to require it from the command line (@--require@ or @-r@), for example:
|
224
292
|
|
225
|
-
|
293
|
+
<notextile>
|
294
|
+
<notextile>
|
295
|
+
{% highlight sh %}
|
226
296
|
$ buildr --require buildr/jdepend jdepend:swing
|
227
|
-
$ buildr -rbuildr/cobertura cobertura:html
|
228
|
-
}
|
297
|
+
$ buildr -rbuildr/java/cobertura cobertura:html
|
298
|
+
{% endhighlight %}
|
299
|
+
</notextile>
|
300
|
+
</notextile>
|
229
301
|
|
230
302
|
|
231
|
-
h2. Anything Ruby Can Do
|
303
|
+
h2(#anything_ruby). Anything Ruby Can Do
|
232
304
|
|
233
305
|
Buildr is Ruby code. That's an implementation detail for some, but a useful features for others. You can use Ruby to keep your build scripts simple and DRY, tackle ad hoc tasks and write reusable features without the complexity of "plugins".
|
234
306
|
|
@@ -236,21 +308,24 @@ We already showed you one example where Ruby could help. You can use Ruby to ma
|
|
236
308
|
|
237
309
|
You can use Ruby to perform ad hoc tasks. For example, Buildr doesn't have any pre-canned task for setting file permissions. But Ruby has a method for that, so it's just a matter of writing a task:
|
238
310
|
|
239
|
-
|
240
|
-
|
311
|
+
<notextile>
|
312
|
+
{% highlight ruby %}
|
313
|
+
bins = file('target/bin'=>FileList[_('src/main/dist/bin/==*==')]) do |task|
|
241
314
|
mkpath task.name
|
242
315
|
cp task.prerequisites, task.name
|
243
|
-
chmod 0755, FileList[task.name + '
|
316
|
+
chmod 0755, FileList[task.name + '/==*==.sh'], :verbose=>false
|
244
317
|
end
|
245
|
-
}
|
318
|
+
{% endhighlight %}
|
319
|
+
</notextile>
|
246
320
|
|
247
321
|
You can use functions to keep your code simple. For example, in the ODE project we create two binary distributions, both of which contain a common set of files, and one additional file unique to each distribution. We use a method to define the common distribution:
|
248
322
|
|
249
|
-
|
323
|
+
<notextile>
|
324
|
+
{% highlight ruby %}
|
250
325
|
def distro(project, id)
|
251
326
|
project.package(:zip, :id=>id).path("#{id}-#{version}").tap do |zip|
|
252
327
|
zip.include meta_inf + ['RELEASE_NOTES', 'README'].map { |f| path_to(f) }
|
253
|
-
zip.path('examples').include project.path_to(
|
328
|
+
zip.path('examples').include project.path_to('src/examples'), :as=>'.'
|
254
329
|
zip.merge project('ode:tools-bin').package(:zip)
|
255
330
|
zip.path('lib').include artifacts(COMMONS.logging, COMMONS.codec,
|
256
331
|
COMMONS.httpclient, COMMONS.pool, COMMONS.collections, JAXEN, SAXON,
|
@@ -262,25 +337,29 @@ def distro(project, id)
|
|
262
337
|
yield zip
|
263
338
|
end
|
264
339
|
end
|
265
|
-
}
|
340
|
+
{% endhighlight %}
|
341
|
+
</notextile>
|
266
342
|
|
267
343
|
And then use it in the project definition:
|
268
344
|
|
269
|
-
|
345
|
+
<notextile>
|
346
|
+
{% highlight ruby %}
|
270
347
|
define 'distro-axis2' do
|
271
348
|
parent.distro(self, "#{parent.id}-war") { |zip|
|
272
349
|
zip.include project('ode:axis2-war').package(:war), :as=>'ode.war' }
|
273
350
|
end
|
274
|
-
}
|
351
|
+
{% endhighlight %}
|
352
|
+
</notextile>
|
275
353
|
|
276
354
|
Ruby's functional style and blocks make some task extremely easy. For example, let's say we wanted to count how many source files we have, and total number of lines:
|
277
355
|
|
278
|
-
|
356
|
+
<notextile>
|
357
|
+
{% highlight ruby %}
|
279
358
|
sources = projects.map { |prj| prj.compile.sources.
|
280
359
|
map { |src| FileList["#{src}/**/*.java"] } }.flatten
|
281
360
|
puts "There are #{source.size} source files"
|
282
361
|
lines = sources.inject(0) { |lines, src| lines += File.readlines(src).size }
|
283
362
|
puts "That contain #{lines} lines"
|
284
|
-
}
|
285
|
-
|
363
|
+
{% endhighlight %}
|
364
|
+
</notextile>
|
286
365
|
|