buildr 1.3.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. data/CHANGELOG +780 -0
  2. data/DISCLAIMER +7 -0
  3. data/KEYS +151 -0
  4. data/LICENSE +176 -0
  5. data/NOTICE +31 -0
  6. data/README +173 -0
  7. data/Rakefile +63 -0
  8. data/addon/buildr/antlr.rb +65 -0
  9. data/addon/buildr/cobertura.rb +232 -0
  10. data/addon/buildr/hibernate.rb +142 -0
  11. data/addon/buildr/javacc.rb +85 -0
  12. data/addon/buildr/jdepend.rb +60 -0
  13. data/addon/buildr/jetty.rb +248 -0
  14. data/addon/buildr/nailgun.rb +892 -0
  15. data/addon/buildr/openjpa.rb +90 -0
  16. data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
  17. data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
  18. data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
  19. data/addon/buildr/org/apache/buildr/JettyWrapper.java +144 -0
  20. data/addon/buildr/xmlbeans.rb +93 -0
  21. data/bin/buildr +21 -0
  22. data/buildr.gemspec +50 -0
  23. data/doc/css/default.css +225 -0
  24. data/doc/css/print.css +95 -0
  25. data/doc/css/syntax.css +43 -0
  26. data/doc/images/apache-incubator-logo.png +0 -0
  27. data/doc/images/buildr-hires.png +0 -0
  28. data/doc/images/buildr.png +0 -0
  29. data/doc/images/note.png +0 -0
  30. data/doc/images/tip.png +0 -0
  31. data/doc/images/zbuildr.tif +0 -0
  32. data/doc/pages/artifacts.textile +317 -0
  33. data/doc/pages/building.textile +501 -0
  34. data/doc/pages/contributing.textile +178 -0
  35. data/doc/pages/download.textile +25 -0
  36. data/doc/pages/extending.textile +229 -0
  37. data/doc/pages/getting_started.textile +337 -0
  38. data/doc/pages/index.textile +63 -0
  39. data/doc/pages/mailing_lists.textile +17 -0
  40. data/doc/pages/more_stuff.textile +367 -0
  41. data/doc/pages/packaging.textile +592 -0
  42. data/doc/pages/projects.textile +449 -0
  43. data/doc/pages/recipes.textile +127 -0
  44. data/doc/pages/settings_profiles.textile +339 -0
  45. data/doc/pages/testing.textile +475 -0
  46. data/doc/pages/troubleshooting.textile +121 -0
  47. data/doc/pages/whats_new.textile +389 -0
  48. data/doc/print.haml +52 -0
  49. data/doc/print.toc.yaml +28 -0
  50. data/doc/scripts/buildr-git.rb +411 -0
  51. data/doc/scripts/install-jruby.sh +44 -0
  52. data/doc/scripts/install-linux.sh +64 -0
  53. data/doc/scripts/install-osx.sh +52 -0
  54. data/doc/site.haml +55 -0
  55. data/doc/site.toc.yaml +44 -0
  56. data/lib/buildr.rb +47 -0
  57. data/lib/buildr/core.rb +27 -0
  58. data/lib/buildr/core/application.rb +373 -0
  59. data/lib/buildr/core/application_cli.rb +134 -0
  60. data/lib/buildr/core/build.rb +262 -0
  61. data/lib/buildr/core/checks.rb +382 -0
  62. data/lib/buildr/core/common.rb +155 -0
  63. data/lib/buildr/core/compile.rb +594 -0
  64. data/lib/buildr/core/environment.rb +120 -0
  65. data/lib/buildr/core/filter.rb +258 -0
  66. data/lib/buildr/core/generate.rb +195 -0
  67. data/lib/buildr/core/help.rb +118 -0
  68. data/lib/buildr/core/progressbar.rb +156 -0
  69. data/lib/buildr/core/project.rb +890 -0
  70. data/lib/buildr/core/test.rb +690 -0
  71. data/lib/buildr/core/transports.rb +486 -0
  72. data/lib/buildr/core/util.rb +235 -0
  73. data/lib/buildr/ide.rb +19 -0
  74. data/lib/buildr/ide/eclipse.rb +181 -0
  75. data/lib/buildr/ide/idea.ipr.template +300 -0
  76. data/lib/buildr/ide/idea.rb +194 -0
  77. data/lib/buildr/ide/idea7x.ipr.template +290 -0
  78. data/lib/buildr/ide/idea7x.rb +210 -0
  79. data/lib/buildr/java.rb +26 -0
  80. data/lib/buildr/java/ant.rb +71 -0
  81. data/lib/buildr/java/bdd_frameworks.rb +267 -0
  82. data/lib/buildr/java/commands.rb +210 -0
  83. data/lib/buildr/java/compilers.rb +432 -0
  84. data/lib/buildr/java/deprecated.rb +141 -0
  85. data/lib/buildr/java/groovyc.rb +137 -0
  86. data/lib/buildr/java/jruby.rb +99 -0
  87. data/lib/buildr/java/org/apache/buildr/BuildrNail$Main.class +0 -0
  88. data/lib/buildr/java/org/apache/buildr/BuildrNail.class +0 -0
  89. data/lib/buildr/java/org/apache/buildr/BuildrNail.java +41 -0
  90. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  91. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +116 -0
  92. data/lib/buildr/java/packaging.rb +706 -0
  93. data/lib/buildr/java/pom.rb +178 -0
  94. data/lib/buildr/java/rjb.rb +142 -0
  95. data/lib/buildr/java/test_frameworks.rb +290 -0
  96. data/lib/buildr/java/version_requirement.rb +172 -0
  97. data/lib/buildr/packaging.rb +21 -0
  98. data/lib/buildr/packaging/artifact.rb +729 -0
  99. data/lib/buildr/packaging/artifact_namespace.rb +957 -0
  100. data/lib/buildr/packaging/artifact_search.rb +140 -0
  101. data/lib/buildr/packaging/gems.rb +102 -0
  102. data/lib/buildr/packaging/package.rb +233 -0
  103. data/lib/buildr/packaging/tar.rb +104 -0
  104. data/lib/buildr/packaging/zip.rb +719 -0
  105. data/rakelib/apache.rake +126 -0
  106. data/rakelib/changelog.rake +56 -0
  107. data/rakelib/doc.rake +103 -0
  108. data/rakelib/package.rake +44 -0
  109. data/rakelib/release.rake +53 -0
  110. data/rakelib/rspec.rake +81 -0
  111. data/rakelib/rubyforge.rake +45 -0
  112. data/rakelib/scm.rake +49 -0
  113. data/rakelib/setup.rake +59 -0
  114. data/rakelib/stage.rake +45 -0
  115. data/spec/application_spec.rb +316 -0
  116. data/spec/archive_spec.rb +494 -0
  117. data/spec/artifact_namespace_spec.rb +635 -0
  118. data/spec/artifact_spec.rb +738 -0
  119. data/spec/build_spec.rb +193 -0
  120. data/spec/checks_spec.rb +537 -0
  121. data/spec/common_spec.rb +579 -0
  122. data/spec/compile_spec.rb +561 -0
  123. data/spec/groovy_compilers_spec.rb +239 -0
  124. data/spec/java_bdd_frameworks_spec.rb +238 -0
  125. data/spec/java_compilers_spec.rb +446 -0
  126. data/spec/java_packaging_spec.rb +1042 -0
  127. data/spec/java_test_frameworks_spec.rb +414 -0
  128. data/spec/packaging_helper.rb +63 -0
  129. data/spec/packaging_spec.rb +589 -0
  130. data/spec/project_spec.rb +739 -0
  131. data/spec/sandbox.rb +116 -0
  132. data/spec/scala_compilers_spec.rb +239 -0
  133. data/spec/spec.opts +6 -0
  134. data/spec/spec_helpers.rb +283 -0
  135. data/spec/test_spec.rb +871 -0
  136. data/spec/transport_spec.rb +300 -0
  137. data/spec/version_requirement_spec.rb +115 -0
  138. metadata +324 -0
@@ -0,0 +1,178 @@
1
+ h1. Contributing
2
+
3
+ Buildr is a community effort, and we welcome all contributors. Here's your
4
+ chance to get involved and help your fellow developers.
5
+
6
+
7
+ h2. Mailing Lists
8
+
9
+ We run two mailing lists, the
10
+ "buildr-user":http://mail-archives.apache.org/mod_mbox/incubator-buildr-user/
11
+ mailing list for developers working with Buildr, that would be you if you're
12
+ using Buildr or interested in using it. There's the
13
+ "buildr-dev":http://mail-archives.apache.org/mod_mbox/incubator-buildr-dev/
14
+ mailing list for talking about development of Buildr itself, and
15
+ "commits":http://mail-archives.apache.org/mod_mbox/incubator-buildr-commits/
16
+ mailing list for following SVN commits and JIRA issues.
17
+
18
+ Check the "mailing lists":mailing_lists.html page for more information on
19
+ subscribing, searching and posting to the mailing list.
20
+
21
+
22
+ h2. Bugs (aka Issues)
23
+
24
+ We really do try to keep bugs to a minimum, and anticipate everything you'll
25
+ ever want to do with Buildr. We're also, not perfect. So you may have found a
26
+ bug, or have an enhancement in mind, or better yet, a patch to contribute.
27
+ Here's what you can do.
28
+
29
+ If it's a bug, enhancement or patch, add it to
30
+ "JIRA":http://issues.apache.org/jira/browse/Buildr. For trivial stuff, that's
31
+ good enough.
32
+
33
+ If it needs more attention, start a discussion over on the mailing list. We
34
+ will still use JIRA to log the progress, but the mailing list is a better place
35
+ for talking things through.
36
+
37
+ When reporting a bug, please tell us which version of Ruby, Buildr and Java you
38
+ are using, and also which operating system you are on:
39
+
40
+ {{{!sh
41
+ $ ruby --version
42
+ $ buildr --version
43
+ $ java --version
44
+ }}}
45
+
46
+ If you have a patch to submit, do it through
47
+ "JIRA":http://issues.apache.org/jira/browse/Buildr. We want to make sure
48
+ Apache gets the right to use your contribution, and the JIRA upload form
49
+ includes a simple contribution agreement. Lawyer not included.
50
+
51
+
52
+ h2. Source Code
53
+
54
+ Did we mention Buildr is an open source project? In fact, when you install
55
+ Buildr you get all the source code, documentation, test case and everything you
56
+ need to use it, extend it and patch it. Have a look in your Gem directory.
57
+
58
+ But if you want to work with the latest and greatest, you'll want to check out
59
+ "Buildr from SVN":http://svn.apache.org/repos/asf/incubator/buildr:
60
+
61
+ {{{!sh
62
+ $ svn co http://svn.apache.org/repos/asf/incubator/buildr/trunk buildr
63
+ }}}
64
+
65
+ You can also browse the "Buildr
66
+ repository":http://svn.apache.org/repos/asf/incubator/buildr.
67
+
68
+ Not a fan SVN? We understand. You can also grab a copy of "Buildr from
69
+ Github":http://github.com/vic/buildr/tree/master:
70
+
71
+ {{{!sh
72
+ $ git clone git://github.com/vic/buildr.git
73
+ }}}
74
+
75
+ To install Buildr from the source directory:
76
+
77
+ {{{!sh
78
+ $ cd buildr
79
+ $ rake setup install
80
+ }}}
81
+
82
+ When using Buildr for JRuby:
83
+
84
+ {{{!sh
85
+ $ cd buildr
86
+ $ jruby -S rake setup install
87
+ }}}
88
+
89
+
90
+ h2. Testing/Specs
91
+
92
+ Obviously we won't turn down patches, but we'll love you even more if you
93
+ include a test case. One that will fail without the patch, and run
94
+ successfully with it. If not for our love, then think of the benefit to you:
95
+ once we add that test case, we won't accidentally break that feature in the
96
+ next release.
97
+
98
+ We test using "RSpec":http://rspec.info/, a Behavior-Driven Development test
99
+ framework. The main difference between RSpec and xUnit is that RSpec helps you
100
+ formulate test cases in terms of specifications: you describe how the code
101
+ should behave, and run RSpec to make sure it matches that specification.
102
+
103
+ You can run an individual specifications using the @spec@ command, for example:
104
+
105
+ {{{!sh
106
+ $ spec spec/compiler_spec.rb -l 409
107
+ }}}
108
+
109
+ To make sure your change did not break anything else, you can run all the
110
+ specifications (be patient, we have a lot of these):
111
+
112
+ {{{!sh
113
+ $ rake spec
114
+ }}}
115
+
116
+ We always @rake spec@ before making a release.
117
+
118
+ You can also check out the "RSpec report":report.html and "test coverage
119
+ report":coverage/index.html for the current version of Buildr. And if you want to help us on the journey to 100% test coverage, we'll be ever so grateful!
120
+
121
+
122
+ h2. Documentation
123
+
124
+ Yes, we do make typos, spelling errors and sometimes we write things that don't
125
+ make sense, so if you find a documentation bug, or want to help make the
126
+ documentation even better, here's the way to do it.
127
+
128
+ For simple typos and quick fixes, just send a message to the mailing list or
129
+ log an issue in JIRA.
130
+
131
+ If you end up rewriting a significant piece of text, or add new documentation
132
+ (your rock!), send a patch. Making documentation patches is fairly easy. All
133
+ the documentation is generated from text files in the @doc/pages@ directory, so
134
+ all you need to do is check it out from SVN, edit, and @svn diff@ to create a
135
+ patch.
136
+
137
+ We use "Textile":http://www.textism.com/tools/textile/ as the markup language,
138
+ it takes all of a few minutes to learn, it's intuitive to use, and produces
139
+ clean HTML. Also check out the "Textile Quick
140
+ Reference":http://hobix.com/textile/quick.html.
141
+
142
+ You can always check the documentation to see which conventions we use, and
143
+ also a couple of extensions we have for styling source code (with syntax
144
+ highlighting!) and handling footnotes. The table of contents is auto-generated
145
+ form H1/H2 headers.
146
+
147
+ The tool we use for this is called Docter, which we developed specifically for
148
+ Buildr, and use to create the Web site and printable PDF. If you want to try
149
+ it out you'll need to first @gem install docter@. To generate a copy of the
150
+ Web site, simple run @rake html@ .
151
+
152
+ If you're thinking of editing the docs, and using @rake html@ to see what the
153
+ HTML looks like, you may want to try something simpler. Start by running the
154
+ Docter Web server with @rake docter@ and then point your browser at
155
+ @http://localhost:3000@. To see your edits, simply refresh the page.
156
+
157
+ Generating the PDF is a bit more tricky, we use the HTML in combination with
158
+ print media CSS stylesheets and run them through the wonderful
159
+ "PrinceXML":http://www.princexml.com/, so you'll need to install PrinceXML
160
+ first before you can @rake pdf@.
161
+
162
+
163
+ h2. Contributors
164
+
165
+ Here is the list of people who are actively working and committing on Buildr:
166
+
167
+ *"Assaf Arkin":http://labnotes.org* (assaf at apache.org)
168
+
169
+ *Alex Boisvert*
170
+
171
+ *"Matthieu Riou":http://offthelip.org*
172
+
173
+ *Victor Hugo Borja* (vborja at apache.org)
174
+
175
+ Currently a Java Developer at
176
+ "http://jwmsolutions.com":http://jwmsolutions.com, Victor has been enjoying and
177
+ using Apache's software since 1999 when he started with Java, now he prefers
178
+ programming Ruby and is happy to help on Apache's first ruby project.
@@ -0,0 +1,25 @@
1
+ h1. Download
2
+
3
+
4
+ h2. Installing Buildr
5
+
6
+ The easiest way to install Buildr is using the fabulous RubyGems package
7
+ manager. Of course, you will need either Ruby or JRuby, and we recommend a
8
+ recent version of RubyGems and if this sounds foreign to you, don't worry.
9
+ We'll show you how to install Buildr on Linux, OS/X, Windows and JRuby in the
10
+ "Getting Started guide":getting_started.html, we even provide automated
11
+ installation scripts.
12
+
13
+
14
+ h2. Binaries and Source Code
15
+
16
+
17
+ p(note). When downloading from files please check the
18
+ "md5sum":http://www.apache.org/dev/release-signing#md5 and verify the
19
+ "OpenPGP":http://www.apache.org/dev/release-signing#openpgp compatible
20
+ signature from the main Apache site. This
21
+ "KEYS":http://www.apache.org/dist/incubator/buildr/KEYS file contains the
22
+ public keys used for signing releases. It is recommended that (when possible) a
23
+ web of trust is used to confirm the identity of these keys. For more
24
+ information, please see the "Apache Release
25
+ FAQ":http://www.apache.org/dev/release.html.
@@ -0,0 +1,229 @@
1
+ h1. Extending Buildr
2
+
3
+ h2. Organizing Tasks
4
+
5
+ A couple of things we learned while working on Buildr. Being able to write
6
+ your own Rake tasks is a very powerful feature. But if you find yourself
7
+ doing the same thing over and over, you might also want to consider functions.
8
+ They give you a lot more power and easy abstractions.
9
+
10
+ For example, we use OpenJPA in several projects. It's a very short task, but
11
+ each time I have to go back to the OpenJPA documentation to figure out how to
12
+ set the Ant MappingTool task, tell Ant how to define it. After the second
13
+ time, you're recognizing a pattern and it's just easier to write a function
14
+ that does all that for you.
15
+
16
+ Compare this:
17
+
18
+ {{{!ruby
19
+ file('derby.sql') do
20
+ REQUIRES = [
21
+ 'org.apache.openjpa:openjpa-all:jar:0.9.7-incubating',
22
+ 'commons-collections:commons-collections:jar:3.1',
23
+ . . .
24
+ 'net.sourceforge.serp:serp:jar:1.11.0' ]
25
+ ant('openjpa') do |ant|
26
+ ant.taskdef :name=>'mapping',
27
+ :classname=>'org.apache.openjpa.jdbc.ant.MappingToolTask',
28
+ :classpath=>REQUIRES.join(File::PATH_SEPARATOR)
29
+ ant.mapping :schemaAction=>'build', :sqlFile=>task.name,
30
+ :ignoreErrors=>true do
31
+ ant.config :propertiesFile=>_(:source, :main, :sql, 'derby.xml')
32
+ ant.classpath :path=>projects('store', 'utils' ).
33
+ flatten.map(&:to_s).join(File::PATH_SEPARATOR)
34
+ end
35
+ end
36
+ end
37
+ }}}
38
+
39
+ To this:
40
+
41
+ {{{!ruby
42
+ file('derby.sql') do
43
+ mapping_tool :action=>'build', :sql=>task.name,
44
+ :properties=>_(:source, :main, :sql, 'derby.xml'),
45
+ :classpath=>projects('store', 'utils')
46
+ end
47
+ }}}
48
+
49
+ I prefer the second. It's easier to look at the Buildfile and understand what
50
+ it does. It's easier to maintain when you only have to look at the important
51
+ information.
52
+
53
+ But just using functions is not always enough. You end up with a Buildfile
54
+ containing a lot of code that clearly doesn't belong there. For starters, I
55
+ recommend putting it in the @tasks@ directory. Write it into a file with a
56
+ @.rake@ extension and place that in the @tasks@ directory next to the
57
+ Buildfile. Buildr will automatically pick it up and load it for you.
58
+
59
+ If you want to share these pre-canned definitions between projects, you have a
60
+ few more options. You can share the @tasks@ directory using SVN externals.
61
+ Another mechanism with better version control is to package all these tasks,
62
+ functions and modules into a "Gem":http://rubygems.org/ and require it from
63
+ your Buildfile. You can run your own internal Gem server for that.
64
+
65
+ For individual task files, you can also use
66
+ "Sake":http://errtheblog.com/post/6069 for system-wide Rake tasks deployment.
67
+
68
+
69
+ h2. Creating Extensions
70
+
71
+ The basic mechanism for extending projects in Buildr are Ruby modules. In
72
+ fact, base features like compiling and testing are all developed in the form
73
+ of modules, and then added to the core Project class.
74
+
75
+ A module defines instance methods that are then mixed into the project and
76
+ become instance methods of the project. There are two general ways for
77
+ extending projects. You can extend all projects by including the module in
78
+ Project:
79
+
80
+ {{{!ruby
81
+ class Project
82
+ include MyExtension
83
+ end
84
+ }}}
85
+
86
+ You can also extend a given project instance and only that instance by
87
+ extending it with the module:
88
+
89
+ {{{!ruby
90
+ define 'foo' do
91
+ extend MyExtension
92
+ end
93
+ }}}
94
+
95
+ Some extensions require tighter integration with the project, specifically for
96
+ setting up tasks and properties, or for configuring tasks based on the project
97
+ definition. You can do that by adding callbacks to the process.
98
+
99
+ The easiest way to add callbacks is by incorporating the Extension module in
100
+ your own extension, and using the various class methods to define callback
101
+ behavior.
102
+
103
+ |_. Method |_. Usage |
104
+ | @first_time@ | This block will be called once for any particular
105
+ extension. You can use this to setup top-level and local tasks. |
106
+ | @before_define@ | This block is called once for the project with the project
107
+ instance, right before running the project definition. You can use this to add
108
+ tasks and set properties that will be used in the project definition. |
109
+ | @after_define@ | This block is called once for the project with the project
110
+ instance, right after running the project definition. You can use this to do
111
+ any post-processing that depends on the project definition. |
112
+
113
+ This example illustrates how to write a simple extension:
114
+
115
+ {{{!ruby
116
+ module LinesOfCode
117
+ include Extension
118
+
119
+ first_time do
120
+ # Define task not specific to any projet.
121
+ desc 'Count lines of code in current project'
122
+ Project.local_task('loc')
123
+ end
124
+
125
+ before_define do |project|
126
+ # Define the loc task for this particular project.
127
+ define_task 'loc' do |task|
128
+ lines = task.prerequisites.map { |path| Dir["#{path}/**/*"] }.flatten.uniq.
129
+ inject(0) { |total, file| total + File.readlines(file).count }
130
+ puts "Project #{project.name} has #{lines} lines of code"
131
+ end
132
+ end
133
+
134
+ after_define do |project|
135
+ # Now that we know all the source directories, add them.
136
+ task('loc'=>compile.sources + compile.test.sources)
137
+ end
138
+
139
+ # To use this method in your project:
140
+ # loc path_1, path_2
141
+ def loc(*paths)
142
+ task('loc'=>paths)
143
+ end
144
+
145
+ end
146
+
147
+ class Buildr::Project
148
+ include LinesOfCode
149
+ end
150
+ }}}
151
+
152
+
153
+ h2. Using Alternative Layouts
154
+
155
+ Buildr follows a common convention for project layouts: Java source files
156
+ appear in @src/main/java@ and compile to @target/classes@, resources are
157
+ copied over from @src/main/resources@ and so forth. Not all projects follow
158
+ this convention, so it's now possible to specify an alternative project
159
+ layout.
160
+
161
+ The default layout is available in @Layout.default@, and all projects inherit
162
+ it. You can set @Layout.default@ to your own layout, or define a project with
163
+ a given layout (recommended) by setting the @:layout@ property. Projects
164
+ inherit the layout from their parent projects. For example:
165
+
166
+ {{{!ruby
167
+ define 'foo', :layout=>my_layout do
168
+ ...
169
+ end
170
+ }}}
171
+
172
+ A layout is an object that implements the @expand@ method. The easiest way to
173
+ define a custom layout is to create a new @Layout@ object and specify mapping
174
+ between names used by Buildr and actual paths within the project. For
175
+ example:
176
+
177
+ {{{!ruby
178
+ my_layout = Layout.new
179
+ my_layout[:source, :main, :java] = 'java'
180
+ my_layout[:source, :main, :resources] = 'resources'
181
+ }}}
182
+
183
+ Partial expansion also works, so you can specify the above layout using:
184
+
185
+ {{{!ruby
186
+ my_layout = Layout.new
187
+ my_layout[:source, :main] = ''
188
+ }}}
189
+
190
+ If you need anything more complex, you can always subclass @Layout@ and add
191
+ special handling in the @expand@ method, you'll find one such example in the
192
+ API documentation.
193
+
194
+ The built-in tasks expand lists of symbols into relative paths, using the
195
+ following convention:
196
+
197
+ |_. Path |_. Expands to |
198
+ | @:source, :main, <lang/usage>@ | Directory containing source files for a
199
+ given language or usage, for example, @:java@, @:resources@, @:webapp@. |
200
+ | @:source, :test, <lang/usage>@ | Directory containing test files for a given
201
+ language or usage, for example, @:java@, @:resources@. |
202
+ | @:target, :generated@ | Target directory for generated code
203
+ (typically source code). |
204
+ | @:target, :main, <lang/usage>@ | Target directory for compiled code, for
205
+ example, @:classes@, @:resources@. |
206
+ | @:target, :test, <lang/usage>@ | Target directory for compile test cases,
207
+ for example, @:classes@, @:resources@. |
208
+ | @:reports, <framework/usage>@ | Target directory for generated reports, for
209
+ example, @:junit@, @:coverage@. |
210
+
211
+ All tasks are encouraged to use the same convention, and whenever possible, we
212
+ recommend using the project's @path_to@ method to expand a list of symbols
213
+ into a path, or use the appropriate path when available. For example:
214
+
215
+ {{{!ruby
216
+ define 'bad' do
217
+ # This may not be the real target.
218
+ puts 'Compiling to ' + path_to('target/classes')
219
+ # This will break with different layouts.
220
+ package(:jar).include 'src/main/etc/*'
221
+ end
222
+
223
+ define 'good' do
224
+ # This is always the compiler's target.
225
+ puts 'Compiling to ' + compile.target.to_s
226
+ # This will work with different layouts.
227
+ package(:jar).include path_to(:source, :main, :etc, '*')
228
+ end
229
+ }}}
@@ -0,0 +1,337 @@
1
+ h1. Getting Started
2
+
3
+ h2. Installing Buildr
4
+
5
+ The installation instructions are slightly different for each operating system.
6
+ If you are using Ruby, pick the one that best matches your operating system and
7
+ target platform.
8
+
9
+ p(note). The current release of Buildr for Ruby does not work with Java 6 and
10
+ can only be used with Java 1.5 or earlier. "Buildr for JRuby":#jruby works
11
+ nicely with Java 6, consider using that instead.
12
+
13
+
14
+ h3. Linux
15
+
16
+ To get started you will need a recent version of Ruby, Ruby Gems and build
17
+ tools for compiling native libraries (@make@, @gcc@ and standard headers).
18
+
19
+ On *RedHat/Fedora* you can use yum to install Ruby and RubyGems, and then
20
+ upgrade to the most recent version of RubyGems:
21
+
22
+ {{{!sh
23
+ $ sudo yum install ruby rubygems ruby-devel gcc
24
+ $ sudo gem update --system
25
+ }}}
26
+
27
+ On *Ubuntu* you have to install several packages:
28
+
29
+ {{{!sh
30
+ $ sudo apt-get install ruby-full ruby1.8-dev libopenssl-ruby build-essential
31
+ }}}
32
+
33
+ The Debian package for @rubygems@ will not allow you to install Buildr, so you
34
+ need to install RubyGems from source:
35
+
36
+ {{{!sh
37
+ $ curl -OL http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz
38
+ $ tar xzf rubygems-1.0.1.tgz
39
+ $ cd rubygems-1.0.1
40
+ $ sudo ruby setup.rb
41
+ $ sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
42
+ }}}
43
+
44
+ Before installing Buildr, please set the @JAVA_HOME@ environment variable to
45
+ point to your JDK distribution. Next, use Ruby Gem to install Buildr:
46
+
47
+ {{{!sh
48
+ $ sudo env JAVA_HOME=$JAVA_HOME gem install buildr
49
+ }}}
50
+
51
+ To upgrade to a new version or install a specific version:
52
+
53
+ {{{!sh
54
+ $ sudo env JAVA_HOME=$JAVA_HOME gem update buildr
55
+ $ sudo env JAVA_HOME=$JAVA_HOME gem install buildr -v 1.3.0
56
+ }}}
57
+
58
+ You can also use this script "to install Buildr on
59
+ Linux":scripts/install-linux.sh. This script will install Buildr or if already
60
+ installed, upgrade to a more recent version. It will also install Ruby 1.8.6
61
+ if not already installed (using @yum@ or @apt-get@) and upgrage RubyGems to
62
+ 1.0.1.
63
+
64
+
65
+ h3. OS/X
66
+
67
+ OS/X 10.5 (Leopard) comes with a recent version of Ruby 1.8.6. OS/X 10.4
68
+ (Tiger) includes an older version of Ruby, we recommend you first install Ruby
69
+ 1.8.6 using MacPorts (@sudo port install ruby rb-rubygems@), Fink or the
70
+ "Ruby One-Click Installer for OS/X":http://rubyosx.rubyforge.org/.
71
+
72
+ We recommend you first upgrade to the latest version of Ruby gems:
73
+
74
+ {{{!sh
75
+ $ sudo gem update --system
76
+ }}}
77
+
78
+ Before installing Buildr, please set the @JAVA_HOME@ environment variable to
79
+ point to your JDK distribution:
80
+
81
+ {{{!sh
82
+ $ export JAVA_HOME=/Library/Java/Home
83
+ }}}
84
+
85
+ To install Buildr:
86
+
87
+ {{{!sh
88
+ $ sudo env JAVA_HOME=$JAVA_HOME gem install buildr
89
+ }}}
90
+
91
+ To upgrade to a new version or install a specific version:
92
+
93
+ {{{!sh
94
+ $ sudo env JAVA_HOME=$JAVA_HOME gem update buildr
95
+ $ sudo env JAVA_HOME=$JAVA_HOME gem install buildr -v 1.3.0
96
+ }}}
97
+
98
+ You can also use this script "to install Buildr on
99
+ OS/X":scripts/install-osx.sh. This script will install Buildr or if already
100
+ installed, upgrade to a more recent version. It will also install Ruby 1.8.6
101
+ if not already installed (using MacPorts) and upgrage RubyGems to 1.0.1.
102
+
103
+
104
+ h3. Windows
105
+
106
+ If you don't already have Ruby installed, now is the time to do it. The
107
+ easiest way to install Ruby is using the "one-click
108
+ installer":http://rubyinstaller.rubyforge.org/.
109
+
110
+ We recommend you first upgrade to the latest version of Ruby gems:
111
+
112
+ {{{!sh
113
+ > gem update --system
114
+ }}}
115
+
116
+ Before installing Buildr, please set the @JAVA_HOME@ environment variable to
117
+ point to your JDK distribution. Next, use Ruby Gem to install Buildr:
118
+
119
+ {{{!sh
120
+ > gem install buildr
121
+ }}}
122
+
123
+ Buildr uses several libraries that include native extensions. During
124
+ installation it will ask you to pick a platform for these libraries. By
125
+ selecting @mswin32@ it will download and install pre-compiled DLLs for these
126
+ extensions.
127
+
128
+ To upgrade to a new version or install a specific version:
129
+
130
+ {{{!sh
131
+ > gem update buildr
132
+ > gem install buildr -v 1.3.0
133
+ }}}
134
+
135
+
136
+ h3. JRuby
137
+
138
+ If you don't already have JRuby 1.1 or later installed, you can download it
139
+ from the "JRuby site":http://dist.codehaus.org/jruby/.
140
+
141
+ After uncompressing JRuby, update your @PATH@ to include both @java@ and @jruby@
142
+ executables.
143
+
144
+ For Linux and OS/X:
145
+
146
+ {{{!sh
147
+ $ export PATH=$PATH:[path to JRuby]/bin:$JAVA_HOME/bin
148
+ $ gem install buildr
149
+ }}}
150
+
151
+ For Windows:
152
+
153
+ {{{!sh
154
+ > set PATH=%PATH%;[path to JRuby]/bin;%JAVA_HOME%/bin
155
+ > gem install buildr
156
+ }}}
157
+
158
+ To upgrade to a new version or install a specific version:
159
+
160
+ {{{!sh
161
+ $ sudo gem update buildr
162
+ $ sudo gem install buildr -v 1.3.0
163
+ }}}
164
+
165
+ You can also use this script "to install Buildr on
166
+ JRuby":scripts/install-jruby.sh. This script will install Buildr or if already
167
+ installed, upgrade to a more recent version. If necessary, it will also
168
+ install JRuby 1.1 in @/opt/jruby@ and update the @PATH@ variable in
169
+ @~/.bash_profile@ or @~/.profile@.
170
+
171
+ *Important: Running JRuby and Ruby side by side*
172
+
173
+ Ruby and JRuby maintain separate Gem repositories, and in fact install
174
+ slightly different versions of the Buildr Gem (same functionality, different
175
+ dependencies). Installing Buildr for Ruby does not install it for JRuby and
176
+ vice versa.
177
+
178
+ If you have JRuby installed but not Ruby, the @gem@ and @buildr@ commands will
179
+ use JRuby. If you have both JRuby and Ruby installed, follow the instructions
180
+ below. To find out if you have Ruby installed (some operating systems include
181
+ it by default), run @ruby --version@ from the command line.
182
+
183
+ To work exclusively with JRuby, make sure it shows first on the path, for example,
184
+ by setting @PATH=/opt/jruby/bin:$PATH@.
185
+
186
+ You can use JRuby and Ruby side by side, by running scripts with the @-S@
187
+ command line argument. For example:
188
+
189
+ {{{!
190
+ $ # with Ruby
191
+ $ ruby -S gem install buildr
192
+ $ ruby -S buildr
193
+ $ # with JRuby
194
+ $ jruby -S gem install buildr
195
+ $ jruby -S buildr
196
+ }}}
197
+
198
+ Run @buildr --version@ from the command line to find which version of Buildr
199
+ you are using by default. If you see @(JRuby ...)@, Buildr is running on that
200
+ version of JRuby.
201
+
202
+
203
+ h2. Conventions
204
+
205
+ Lines that start with @$@ are command lines, for example:
206
+
207
+ {{{!sh
208
+ $ # Run Buildr
209
+ $ buildr
210
+ }}}
211
+
212
+ Lines that start with @=>@ show output from the console or the result of a
213
+ method, for example:
214
+
215
+ {{{!sh
216
+ puts 'Hello world'
217
+ => "Hello world"
218
+ }}}
219
+
220
+ And as you guessed, everything else is Buildfile Ruby or Java code. You can
221
+ figure out which language is which.
222
+
223
+
224
+
225
+ h2. Running Buildr
226
+
227
+ You need a *Buildfile*, a build script that tells Buildr all about the projects
228
+ it's building, what they contain, what to produce, and so on. The Buildfile
229
+ resides in the root directory of your project. We'll talk more about it in
230
+ "the next chapter":projects.html. If you don't already have one, ask Buildr to
231
+ create it:
232
+
233
+ {{{!sh
234
+ $ buildr
235
+ }}}
236
+
237
+ p(tip). You'll notice that Buildr creates a file called @buildfile@. It's
238
+ case sensitive, but Buildr will look for either @buildfile@ or @Buildfile@.
239
+ You can also use @Rakefile@ or @rakefile@ for compatibility with previous
240
+ versions of Buildr.
241
+
242
+ You use Buildr by running the @buildr@ command:
243
+
244
+ {{{!sh
245
+ $ buildr [options] [tasks] [name=value]
246
+ }}}
247
+
248
+ There are several options you can use, for a full list of options type:
249
+
250
+ {{{!sh
251
+ $ buildr --help
252
+ }}}
253
+
254
+ |_. Option |_. Usage |
255
+ | @-f/--buildfile [file]@ | Specify the buildfile. |
256
+ | @-e/--environment [name]@ | Environment name (e.g. development, test, production). |
257
+ | @-h/--help@ | Display this help message. |
258
+ | @-n/--nosearch@ | Do not search parent directories for the buildfile. |
259
+ | @-q/--quiet@ | Do not log messages to standard output. |
260
+ | @-r/--require [file]@ | Require MODULE before executing buildfile. |
261
+ | @-t/--trace@ | Turn on invoke/execute tracing, enable full backtrace. |
262
+ | @-v/--version@ | Display the program version. |
263
+
264
+ You can tell Buildr to run specific tasks and the order to run them. For
265
+ example:
266
+
267
+ {{{!sh
268
+ # Clean and rebuild
269
+ buildr clean build
270
+ # Package and install
271
+ buildr install
272
+ }}}
273
+
274
+ If you don't specify a task, Buildr will run the "@build@ task":building.html,
275
+ compiling source code and running test cases. Running a task may run other
276
+ tasks as well, for example, running the @install@ task will also run @package@.
277
+
278
+ There are several "environment
279
+ variables":settings_profiles.html#environment_variables that let you control
280
+ how Buildr works, for example, to skip test cases during a build, or specify
281
+ options for the JVM. Depending on the variable, you may want to set it once in
282
+ your environment, or set a different value each time you run Buildr.
283
+
284
+ For example:
285
+
286
+ {{{!sh
287
+ $ export JAVA_OPTS='-Xms1g -Xmx1g'
288
+ $ buildr TEST=no
289
+ }}}
290
+
291
+
292
+ h2. Help Tasks
293
+
294
+ Buildr includes a number of informative tasks. Currently that number stands at
295
+ two, but we'll be adding more tasks in future releases. These tasks report
296
+ information from the Buildfile, so you need one to run them. For more general
297
+ help (version number, command line arguments, etc) use @buildr --help@.
298
+
299
+ To start with, type:
300
+
301
+ {{{!sh
302
+ $ buildr help
303
+ }}}
304
+
305
+ You can list the name and description of all your projects using the
306
+ @help:projects@ task. For example:
307
+
308
+ {{{!sh
309
+ $ buildr help:projects
310
+ killer-app # Code. Build. ??? Profit!
311
+ killer-app:teh-api # Abstract classes and interfaces
312
+ killer-app:teh-impl # All those implementation details
313
+ killer-app:la-web # What our users see
314
+ }}}
315
+
316
+ You are, of course, describing your projects for the sake of those who will
317
+ maintain your code, right? To describe a project, or a task, call the @desc@
318
+ method before the project or task definition.
319
+
320
+ So next let's talk about "projects":projects.html.
321
+
322
+
323
+ h2. More Info
324
+
325
+ *API* The "Buildr API":http://incubator.apache.org/buildr/rdoc/index.html
326
+ documentation.
327
+
328
+ *Rake* Buildr is based on Rake, a Ruby build system that handles tasks and
329
+ dependencies. Check out the "Rake documentation":http://docs.rubyrake.org/ for
330
+ more information.
331
+
332
+ *AntWrap* Buildr uses AntWrap, for configuring and running Ant tasks. You can
333
+ learn more from the "Antwrap documentation":http://antwrap.rubyforge.org/.
334
+
335
+ *YAML* Buildr uses YAML for its profiles. You can "learn more about YAML
336
+ here":http://www.yaml.org, and use this handy "YAML quick
337
+ reference":http://www.yaml.org/refcard.html.