You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildr.apache.org by as...@apache.org on 2007/11/14 00:44:17 UTC

svn commit: r594720 [1/9] - in /incubator/buildr/trunk: ./ bin/ doc/ doc/css/ doc/images/ doc/pages/ lib/ lib/buildr/ lib/buildr/jetty/ lib/core/ lib/java/ lib/tasks/ test/

Author: assaf
Date: Tue Nov 13 15:44:11 2007
New Revision: 594720

URL: http://svn.apache.org/viewvc?rev=594720&view=rev
Log:
Initial checkin

Added:
    incubator/buildr/trunk/CHANGELOG
    incubator/buildr/trunk/LICENSE
    incubator/buildr/trunk/README
    incubator/buildr/trunk/bin/
    incubator/buildr/trunk/bin/buildr   (with props)
    incubator/buildr/trunk/doc/
    incubator/buildr/trunk/doc/css/
    incubator/buildr/trunk/doc/css/default.css   (with props)
    incubator/buildr/trunk/doc/css/eiffel.css   (with props)
    incubator/buildr/trunk/doc/css/print.css   (with props)
    incubator/buildr/trunk/doc/images/
    incubator/buildr/trunk/doc/images/buildr-hires.png   (with props)
    incubator/buildr/trunk/doc/images/buildr.png   (with props)
    incubator/buildr/trunk/doc/images/zbuildr.tif   (with props)
    incubator/buildr/trunk/doc/pages/
    incubator/buildr/trunk/doc/pages/artifacts.textile
    incubator/buildr/trunk/doc/pages/building.textile
    incubator/buildr/trunk/doc/pages/contributing.textile
    incubator/buildr/trunk/doc/pages/getting_started.textile
    incubator/buildr/trunk/doc/pages/index.textile
    incubator/buildr/trunk/doc/pages/mailing_lists.textile
    incubator/buildr/trunk/doc/pages/more_stuff.textile
    incubator/buildr/trunk/doc/pages/packaging.textile
    incubator/buildr/trunk/doc/pages/projects.textile
    incubator/buildr/trunk/doc/pages/testing.textile
    incubator/buildr/trunk/doc/print.haml
    incubator/buildr/trunk/doc/print.toc.textile
    incubator/buildr/trunk/doc/web.haml
    incubator/buildr/trunk/doc/web.toc.textile
    incubator/buildr/trunk/lib/
    incubator/buildr/trunk/lib/buildr/
    incubator/buildr/trunk/lib/buildr.rb
    incubator/buildr/trunk/lib/buildr/antlr.rb
    incubator/buildr/trunk/lib/buildr/cobertura.rb
    incubator/buildr/trunk/lib/buildr/hibernate.rb
    incubator/buildr/trunk/lib/buildr/javacc.rb
    incubator/buildr/trunk/lib/buildr/jdepend.rb
    incubator/buildr/trunk/lib/buildr/jetty/
    incubator/buildr/trunk/lib/buildr/jetty.rb
    incubator/buildr/trunk/lib/buildr/jetty/JettyWrapper$1.class   (with props)
    incubator/buildr/trunk/lib/buildr/jetty/JettyWrapper$BuildrHandler.class   (with props)
    incubator/buildr/trunk/lib/buildr/jetty/JettyWrapper.class   (with props)
    incubator/buildr/trunk/lib/buildr/jetty/JettyWrapper.java   (with props)
    incubator/buildr/trunk/lib/buildr/openjpa.rb
    incubator/buildr/trunk/lib/buildr/scala.rb
    incubator/buildr/trunk/lib/buildr/xmlbeans.rb
    incubator/buildr/trunk/lib/core/
    incubator/buildr/trunk/lib/core/application.rb
    incubator/buildr/trunk/lib/core/build.rb
    incubator/buildr/trunk/lib/core/checks.rb
    incubator/buildr/trunk/lib/core/common.rb
    incubator/buildr/trunk/lib/core/generate.rb
    incubator/buildr/trunk/lib/core/help.rb
    incubator/buildr/trunk/lib/core/project.rb
    incubator/buildr/trunk/lib/core/rake_ext.rb
    incubator/buildr/trunk/lib/core/transports.rb
    incubator/buildr/trunk/lib/java/
    incubator/buildr/trunk/lib/java/ant.rb
    incubator/buildr/trunk/lib/java/artifact.rb
    incubator/buildr/trunk/lib/java/compile.rb
    incubator/buildr/trunk/lib/java/eclipse.rb
    incubator/buildr/trunk/lib/java/idea.ipr.template
    incubator/buildr/trunk/lib/java/idea.rb
    incubator/buildr/trunk/lib/java/java.rb
    incubator/buildr/trunk/lib/java/packaging.rb
    incubator/buildr/trunk/lib/java/pom.rb
    incubator/buildr/trunk/lib/java/test.rb
    incubator/buildr/trunk/lib/tasks/
    incubator/buildr/trunk/lib/tasks/concat.rb
    incubator/buildr/trunk/lib/tasks/tar.rb
    incubator/buildr/trunk/lib/tasks/zip.rb
    incubator/buildr/trunk/test/
    incubator/buildr/trunk/test/archive.rb
    incubator/buildr/trunk/test/artifact.rb
    incubator/buildr/trunk/test/build.rb
    incubator/buildr/trunk/test/checks.rb
    incubator/buildr/trunk/test/common.rb
    incubator/buildr/trunk/test/compile.rb
    incubator/buildr/trunk/test/packaging.rb
    incubator/buildr/trunk/test/project.rb
    incubator/buildr/trunk/test/rake_ext.rb
    incubator/buildr/trunk/test/sandbox.rb
    incubator/buildr/trunk/test/test.rb
    incubator/buildr/trunk/test/transport.rb

Added: incubator/buildr/trunk/CHANGELOG
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/CHANGELOG?rev=594720&view=auto
==============================================================================
--- incubator/buildr/trunk/CHANGELOG (added)
+++ incubator/buildr/trunk/CHANGELOG Tue Nov 13 15:44:11 2007
@@ -0,0 +1,481 @@
+1.2.10 (Pending)
+* Changed: Resources sets permission on copied files to make them read/write-able.
+* Changed: Artifact download no longer generates destination directory if not downloaded.
+* Fixed: EOL in MANIFEST.MF.
+
+1.2.9 (11/8/2007)
+* Changed: Upgraded to RJB 1.0.11.
+* Fixed: Backward compatibility in Java.rjb/wrapper.
+
+1.2.8 (11/1/2007)
+* Added: Resolving Maven snapshots from remote repository (Rhett Sutphin)
+* Changed: scala options.target now takes number, e.g. "1.5" instead of "jvm-1.5" (Nathan Hamblen)
+* Changed: Eclipse task uses updated Scala plugin nature and builder (Alex Boisvert)
+* Fixed: Bringing Buildr back to 1.0.9, XMLBeans fix.
+
+1.2.7 (10/29/2007)
+* Added: You can create an artifact from a given file using artifact(<spec>).from(<path>).  You can then install it into the local repository or upload it to the release server using install(<artifacts>) and upload(<artifacts>). (Idea: Shane Witbeck and Tommy Mason).
+* Added: ANTLR support.
+* Changed: Speed boost to ZIP packaging.
+* Changed: RjbWrapper is now JavaWrapper, and revised to nicely support JRuby.  A few other minor tweaks to make JRuby support possible in the future. (Travis Tilley)
+* Changed: JUnit now runs tests with clonevm false by default, you can change with test.using :clonevm=>true (Karel)
+* Changed: JUnit now switches over to project's base directory.
+* Changed: package(:war).with(:libs, :classes) uses only these specified libs and class directories, replacing any previous value.
+* Fixed: Jetty task no longer sets "log4j.configuration" system property
+* Fixed: release task didn't work
+
+1.2.6 (9/26/2007)
+* Added: Option for setting environment name (-e) and attribute accessor (Buildr.environment).  Default taken from BUILDR_ENV environment variable.
+* Added: AAR packaging for Axis2 service archives (Alex Boisvert)
+* Added: Environment variable for JUnit tests (test.using :environment=>).
+* Added: tar method similar to zip method.
+* Added: Experimental transitive method.  Looks like artifacts, quacks like artifacts, but returns artifacts by the boat load. (Credit, Daniel Roop)
+* Changed: Now accepting JAVA_OPTS in addition to JAVA_OPTIONS.
+* Changed: TarTask is now based on ArchiveTask, same API as ZipTask.
+* Changed: Javadoc array arguments now passed as multiple command line options (e.g. :link=>['foo', 'bar'] becomes --link foo --link bar). (Daniel Roop)
+* Changed: Jetty task now uses SLF4J instead of commons-logging + log4j for better hot-swap capability and plugability (Alex Boisvert)
+* Removed: Turns out --verbose command line option is useless.  Removed.
+* Fixed: Jetty task now uses WebAppContextClassLoader to support hot-swapping webapps (Alex Boisvert)
+* Fixed: "release" task now works with SVN URLs ending with /branches/*/ (Alex Boisvert)
+* Fixed: Resources not included in JAR/WAR unless there's a src/main/java directory (Olexandr Zakordonskyy).
+* Fixed: Files starting with dot (e.g. .config) not copied over as resource files, and not included in ZIP (Olexandr Zakordonskyy).
+* Fixed: Empty directories not copied over as resources (Olexandr Zakordonskyy).
+* Fixed: JAVA_OPTS and test.options[:java_args] not passed to JUnit task (Staube).
+* Fixed: archive.exclude doesn't work when including a directory using :from/:as option.
+* Fixed: JUnit/TestNG no longer run inner classes as test classes (Mark Feeney).
+
+1.2.5 (8/13/2007)
+* Fixed: Buildr not finding buildfile in parent directory, or switching to parent directory.
+* Fixed: checks.rb:103: warning: multiple values for a block parameter (2 for 1)
+* Fixed: ZIPs include empty META-INF directory.
+
+1.2.4 (8/3/2007)
+* Added: Forking option for JUnit test framework: :once to fork for each project, :each to fork for each test case, and false to not fork. (Tammo van Lessen)
+* Added: Path traversal in Zip, so zip.path("foo/bar").path("..") returns zip.path("foo").
+* Fixed: JUnit test framework output shows errors in console, more readable when forking is on (Tammo van Lessen).
+* Fixed: Cobertura reports not working (Anatol Pomozov).
+* Fixed: Zip creates funky directory name when using :as (Tommy Mason).
+* Fixed: package_as_tar incorrectly calling with(options) (Tommy Mason).
+* Fixed: Loading of everything which should get rid of "already initialized constant VERSION" warning.
+* Fixed: --requires option now works properly when using buildr.
+* Fixed: MANIFEST.MF lines must not be longer than 72 characters (Tommy Mason).
+* Fixed: Creating manifest from array does not place Name first.
+* Fixed: Complain if no remote repositories defined, add at least one repository when creating from POM, POM reader fails if dependencyManagement missing (Jean-Baptiste Quenot).
+* Fixed: Not looking for buildfile in parent directory.
+* Fixed: Project's compile/test task looking for options in local task of same name.
+* Fixed: ZIP/JAR/WAR include directory entries in some cases and not others.
+* Fixed: Computation of relative paths in Eclipse project generation (Cameron Pope)
+
+1.2.3 (7/26/2007)
+* Added: Get your buildfile created form existing POM, just run buildr on existing Maven project (Anatol Pomozov).
+* Added: package(:tar), package(:tgz), TarballTask dn TarTask (Tommy Knowlton).
+* Changed: The ArchiveTask needs no introduction: it's a base task that provides common functionality for ZipTask, TarTask and friends.
+* Fixed: Release runs buildr instead of buildr.cmd on Windows (Chris Power).
+* Fixed: Cobertura reports broken (Anatol Pomozov).
+
+1.2.2 (7/18/2007)
+* Added: resources.using and filter.using now accepts a format as the first argument, default being :maven, but you can also use :ant, :ruby or pass a regular expression (http://groups.google.com/group/buildr-talk/browse_thread/thread/5216d5ae8bfff29b).
+* Fixed: Sleek upload with changelog for each release courtesy of Anatol Pomozov.
+* Fixed: Zip.path.contains fails on paths with more than one directory (http://groups.google.com/group/buildr-talk/browse_thread/thread/5d305bbeeb814d1).
+* Fixed: Speed of sorting entries when creating new Zip file (http://groups.google.com/group/buildr-talk/browse_thread/thread/8b4d1b0e983f32f).
+* Fixed: Uploading using SFTP creates directory for uploaded file (http://groups.google.com/group/buildr-talk/browse_thread/thread/80021d35cecfecdc).
+
+1.2.1 (7/12/2007)
+* Added: Proxy exclusion, use environment variable NO_PROXY, or options.proxy.exclude = <url> || [<url>] (http://groups.google.com/group/buildr-talk/t/9f1e988e0dbeea9f).
+* Added: You can now copy resources from multiple source directories, using resources.from (http://groups.google.com/group/buildr-talk/browse_thread/thread/4f2867a6dbbc19d4).
+* Added: Hash.from_java_properties(string) and hash.to_java_properties.
+* Changed: Buildr.options now wrap various environment variables instead of duplicating them (HTTP_PROXY, NO_PROXY, TEST, DEBUG).
+* Changed: No longer passing proxies to transports, instead they obtain them from environment variables.
+* Changed: Buildr now uses XJavaDoc 1.1 instead of 1.1-j5. If you need the 1.1-j5 fix, see here http://groups.google.com/group/buildr-talk/browse_thread/thread/49f3226810466c94/1f0d25d002433fe2.
+* Fixed: One RubyForge release for all packages, instead of one per package (Anatol Pomozov).
+* Fixed: buildr command does not recognize project tasks (foo:compile) or default task (http://groups.google.com/group/buildr-talk/t/660061a0bc81989a).
+* Fixed: Upload fails on SFTP permissions.
+* Fixed: Hibernate.schema_export not passing Ant task when yielding.
+* Fixed: IntelliJ Idea project files generation for projects more than two degrees deep.
+
+1.2.0 (6/6/2007)
+* Added: Artifact.list returns specs for all registered artifacts (those created with artifact or package).
+* Added: Buildr.option.java_args are used when creating the RJB JVM, when running a Java process (unless you override directly), and when running JUnit tests (again, unless override).
+* Added: TestNG support (test.using :testng).
+* Added: You can run multiple tests from the command line, e.g. rake test:foo,bar.
+* Added: If you want to distribute source code and JavaDoc alongside your JARs (helpful when using IDE/debugging), you can now do so by calling package_with_sources and package_with_javadoc on the project (or the parent project to affect all its sub-projects).
+* Added: junit:report task generates XML and HTML reports in the reports/junit directory.
+* Added: test=all option runs all test cases ignoring failure.
+* Added: project generation for IntelliJ Idea. Imports dependencies properly from your local repository (the M2_REPO path variable must be defined), supports tests and resources.
+* Added: A check task for each project that runs after packaging and can be used to check the build itself, using RSpec matchers.
+* Added: The help task can be used to get basic information about your build. Right now it returns a list of described tasks, but you can extend it using the help method. Try it out: rake help.
+* Added: Integration tests that run after packaging (unless tests are disabled). There's only one integration tests task (duh) that you can access from anywhere. You can tell a project to run its tests during the integration phase with test.using :integration.
+* Added: package :sources and package :javadoc, used by package_with_sources and package_with_javadoc.
+* Added: Unzip paths now return root/target. (Nathan)
+* Added: buildr command line, replacing rake. Differs from rake in two ways: uses buildfile by default (but Rakefile also works) and offers to create buildfile if you don't already have one.
+* Added: options.proxy.http now set from the environment variable HTTP_PROXY (Anatol Pomozov).
+* Added: options.java_args now set from environment variable JAVA_OPTIONS.
+* Changed: Filter now complains if source directory or target directory not set, or if source directory does not exist.
+* Changed: Filter.run returns true if filter run, false otherwise, and can be run multiple times.
+* Changed: repositories.proxy returns a URI or nil; you can still set a proxy using a hash.
+* Changed: Transports went the way of the Dodo, instead we now use read/write/download/upload methods implemented on URI itself.
+* Changed: We now have a way to configure multiple proxies through the options.proxy method; use that instead of repositories.proxies.
+* Changed: Upgraded to Ant 1.7.0, JUnit 4.3, JMock 1.2.
+* Changed: TestTask now provides list of test classes and failed classes through test_classes and failed_tests attributes.
+* Changed: The jetty method is now available everywhere, so you can change the URL using jetty.url = at the top of the Rakefile. Also upgraded to 6.1.3.
+* Changed: Test classes are now identified as either starting with Test* or ending with *Test, before attempting any include/exclude patterns. Anything ending with *TestCase or *Suite ignored for now (but if you explain why, we can add it back).
+* Changed: What used to be the projects task is now help:projects task, anticipating more help: tasks to come.
+* Changed: We now have 3(!) JDepend tasks: jdepend:swing (with windows!), jdepend:text (console) and jdepend:xml (enterprisy).
+* Changed: Good news for packagers: package_as_ yield no longer required, just make sure to create the task once and return it each time.
+* Changed: JUnit tests now run using Ant, which makes them faster to run, and gives you text/XML reports (check out the reports/junit directory).
+* Changed: Cobertura now writes reports to reports/cobertura, in fact, if you're looking for a report of any kind, the reports directory is the place to find it.
+* Changed: Upgraded to AntWrap 0.6. Note that with AntWrap 0.6 we yield to the block instead of doing instance_eval, so any call to the ant project must be prefixed with an AntProject object. Code that relies on the old functionality (and that's pretty much any code with element-containing tasks) will break.
+* Changed: artifacts now accepts a struct.
+* Changed: The repositories.download method folded into Artifact, the repositories.deploy method renamed upload and folded into ActsAsArtifact.
+* Changed: The deploy task is now called upload, and repositories.deploy_to is now repositories.release_to.
+* Removed: The check task, which previously was a way to find some circular dependencies (multitask) but not others (dynamically defined).
+* Removed: JUnitTask, test.junit and Java.junit methods all deprecated; anything you need to affect the unit tests is right there in TestTask.
+* Removed: The package(:jar) and package(:war) options, such as :manifest, :include, :libs are all deprecated. Instead, use the package method to define the package, and the with method to enhance it, e.g. package(:war).with(:libs=>...) instead of package(:war, :libs=>...).
+* Removed: The []= method on ZipTask and anything derived from it is deprecated in favor of using attribute accessors.
+* Removed: Ant.executable and Ant.declarative are deprecated. Use Buildr.ant instead of Ant.executable. Use AntWrap directly if you need the Ant.declarative functionality.
+* Fixed: Filter now properly handles multiple keys on the same line.
+* Fixed: Tests teardown now properly executing.
+* Fixed: Cobertura tasks now run tests, even if test=no.
+* Fixed: XMLBeans compile task not detecting change to XSD file.
+* Fixed: URI.download and download task do not create directory path for downloaded file (Anders Bengtsson).
+* Fixed: Gets JVM version number from system property java.version instead of calling java -version.
+* Fixed: Artifact downloads POM first, such that you can download/create/fake it youself.
+
+1.1.3 (6/12/2007)
+* Added: Long awaited idea project files generation. Very early code, the iml seems to be generated okay but needs testing. The ipr is still missing but will come in due time (and it's not always necessary anyway).
+*Fixed: Doc bug: unzip doesn't have an into(dir) method.
+*Fixed: File names don't always have a dot.
+*Fixed: For Jetty servers, http://foo//bar is not http://foo/bar
+
+1.1.2 (5/29/2007)
+* Added: Allow passing :java_args option to the junit task
+* Added: Hibernate XDoclet and SchemaExport tasks. (Requires buildr/hibernate)
+* Added: JDepend UI for seeing depenencies across all projects. (Requires buildr/jdepend)
+* Added: Cobertura test coverage tasks, reporting both html and xml. (Requires buildr/cobertura)
+* Changed: tools_jar now returns empty array on OS/X, part of the ongoing Write Once/Test Everywere effort. (Credit Paul Brown)
+* Fixed: Work around keep_alive bug in Net::HTTP. (http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/10818)
+
+1.1.1 (5/16/2007)
+* Changed: Test case class names must end with Test, TestCase, Suite or TestSuite.
+* Changed: You can now run rake test:{foo,bar} to match against either foo or bar (requires \{..\} on UNIX).
+* Changed: JAVA_HOME now required on all platforms, along with more OS/X fixes. (Credit Paul Brown)
+* Fixed: You can now run rake test:<name> from any directory, and it will find just the right test cases.
+
+1.1.0 (5/13/2007)
+* Added: Proxy setting for downloading from remote repositories (use repositories.proxy = ...).
+* Added: projects task to list all the projects you can build.
+* Added: Project attribute target to specify the target directory.
+* Changed: The project and projects methods now accepts relative names when called on a project. For example, project("foo").project("bar") finds the sub-project "bar" in "foo".
+* Changed: The project method now returns self if called on a method with no name.
+* Changed: The -warning flag (javac) is now set to true only when verbose.
+* Changed: OpenJPA mapping now using Ant task instead of spawning another Java instance.
+* Changed: The test:name pattern translates to *name* so you can run tests by package name, but only if you don't use * in the pattern.
+* Changed: All projects are not evaluated when referenced (i.e. calling project/projects) or before running any task. Project tasks do not exist until a projet is evaluated.
+* Removed: The projects method no longer accepts the :in argument, call projects on a project instead.
+* Fixed: Local directory tasks now work from any directory in the project.
+* Fixed: Artifacts no longer created with timestamp from server.
+* Fixed: Buildr no longer fails when run without tools.jar or JAVA_HOME (OS/X). (Credit Lyle Johnson)
+* Fixed: Manifest gets EOL to keep EOF company. (Credit Tommy Knowlton)
+* Fixed: Compile tasks clean after themselves when target directory changed. (Credit Lyle Johnson)
+
+1.0.0 (5/4/2007)
+* Added: buildr:freeze and buildr:unfreeze task. These set the Rakefile to use a particular version of Buildr, freezing by setting to the current version of Buildr, unfreeze to use the latest Gem.
+* Added: Buildr.options, with three options to start with: test, debug and parallel.
+* Added: Buildr.option.debug or environment variable DEBUG to control the compiler debug option. Defaults to yes, except when doing a release.
+* Changed: Buildr now fails nicely if JAVA_HOME not set.
+* Changed: Migrated test cases to RSpec 0.9.
+* Changed: Extended circular dependency check to multitask.
+* Changed: JavaCC using RJB.
+* Changed: OpenJPA 0.9.7 no longer snapshoted.
+* Fixed: For Windows users: user's home directory, fu_check_options is now rake_check_options, java command works around funky system bbug.
+
+0.22 (4/26/2007)
+* Added: Calling projects(:in=>foo) returns only the sub-projects defined in foo.
+* Added: _() as shortcut for path_to().
+* Added: You can pass properties to java by setting the :properties options.
+* Added: JUnit task has a way of setting options (options accessor and using method), which for now supports passing properties to java.
+* Added: You can now use the struct method to create a Struct for structoring your multiple artifacts.
+* Changed: Use rake artifacts to download all artifacts not already in the local repository, and also download modified artifacts (*cough*snapshots*cough*)
+* Changed: Transport.download now uses timestamp on the destination file and If-Modified-Since header to skip downloads of unmodified files.
+* Changed: Downloading artifact sets the time stamp from the repository.
+* Changed: Use buildr.rake in the project's directory and your home directory, instead of buildr.rb.
+* Changed: filter method accepts one argument, the source directory. Use filter(src).into(target).
+* Changed: Running Javac/Apt/Javadoc in process.
+* Changed: Using Ant for OpenJPA enhancer and XMLBeans schema compiler.
+* Changed: Jetty, JavaCC, OpenJPA and XMLBeans are no longer included by default. You need to require them explicitly, e.g. require "buildr/jetty".
+* Removed: Tasks no longer use a base directory, always map paths directly using file, path_to or _().
+* Fixed: The artifacts task no longer downloads POMs for artifacts created by the Rakefile.
+
+0.21 (4/20/2007)
+* Added: Methods to read and write a file (shortcut for File.read/File.open.write).
+* Changed: Filter task now takes a source directory and target directory, and copies all included (sans excluded) files between the two.
+* Changed: Artifact type is now symbol instead of string (so :jar instead of "jar"). You can still specify a string, but the return value from #to_spec or #type is a symbol.
+* Changed: Eclipse task now adds "src/main/resources", "src/test/java", "src/test/resources" to build path, and excludes ".svn" and "CVS" directories from being copied into target directories.
+* Changed: The test task will now run JUnit test cases from classes ending with Test or Suite. And the inclusion pattern is always set.
+* Fixed: Project property not inherited if false.
+
+0.20 (4/18/2007)
+* Added: JavadocTask to generate Javadoc documentation for the project, javadoc method on the project itself to return its javadoc task, and Java.javadoc to do all the heavy lifting.
+* Changed: Release code is now implemented as module instead of class. SVN copy made from working copy instead of double commit.
+* Removed: package :file_name options. Does not work with deployed artifacts or POMs.
+* Fixed: Packages not deployed in the right path (but POMs are).
+* Fixed: JARs and WARs include redundant META-INF directory.
+* Fixed: The local package task is now a dependency for install/deploy, and build is dependency for package.
+
+0.19 (4/13/2007)
+* Fixed: Eclipse task correctly handles FileTasks
+* Fixed: Eclipse task output directory is "target/classes" (Project.compile.target) instead of "/target"
+* Added: Set specific file permissions when uploading with SFTP transport with :permission option
+* Fixed: Correctly use JAVA_HOME environment variable, if available, for determining java version
+* Added: ConcatTask and concat: a file task that creates or updates the target file by concatenating all the file prerequisites.
+* Added: Ant module (requires antwrap and rjb Gems), so also added RJB setup module.
+* Added: When zipping you can include the contents of a directory using :as=>".".
+* Added: Convenience apt method returns a file task that generates sources using APT.
+* Added: Convenience open_jpa_enhance method to enhance compiled files.
+* Added: Convenience compile_xml_beans setups the compiler to include XSD-generated XML Beans.
+* Added: Convenience javacc/jjtraa methods return file tasks that generate source files.
+* Added: build is now the default task.
+* Added: jetty:start and jetty:stop tasks to start/stop the server from the console.
+* Added: jetty:use to start Jetty inside the build or hook to an existing server.
+* Added: jetty:setup and jetty:teardown to perform tasks around jetty:use.
+* Added: The local build task will now execute the local test task. So building a project (or sub-project) will run the test cases on that project (or sub-project) but not any of its dependencies.
+* Added: ZipTask accepts nested path (i.e. calling path inside a path).
+* Added: package(:war) by defaults picks libraries from the compiler classpath. You can always override by passing the :libs option.
+* Changed: Eclipse task now generates library path with M2_REPO variable or project-relative paths where appropriate
+* Changed: compile.target (CompileTask) and resources.target (Filter) are now file tasks, not strings.  So passing the target to someone else will hopefully convience them to invoke or enhance it.
+* Changed: Java related tasks like OpenJPA, XMLBeans, JavaCC all moved to the Buildr::Java module.
+* Changed: Handling of package_as arguments to support JBI packaging.
+* Changed: meta_inf project property is an array accepting filenames (strings) and file tasks.
+* Changed: meta_info by default only includes the LICENSE file from the top-level project.
+* Changed: The WarTask :classes argument is now a directory name, and will include all files in this directory.
+* Changed: WarTask and JarTask accept meta_inf argument.
+* Changed: Behavior of needed? and prerequsities in base Rake::Task. This will probably not affect you, but don't be surprised if it disappears (see lib/core/rake_ext.rb for details).
+* Changed: Were previous the test task would link to test.run, it now executes the entire test lifecycle, and is the major point for extending the test lifecycle.
+* Changed: test.run is now test.junit.
+* Changed: Ant.define is now Ant.declarative, Ant.execute is now Ant.executable.
+* Changed: The filter method now returns a Filter class that can be used to set a filter, but is not itself a task. Instead, it creates a task when setting its target.
+* Changed: Project.resources now returns a ResourceTask that includes, but is not itself a filter, accessed using the accessor filter.
+* Changed: UnzipTask eliminated and replaced with Unzip which you now have to run directly by calling extract.  However, unzip method creates a file task and returns an Unzip object that can be used as a reference to that file task.
+* Changed: Attributes is now InheritedAttributes.
+* Changed: The first call to package configures the package task from the options, the second call only returns the package task.
+* Removed: :cp argument, always use :classpath.
+* Removed: src_dir, java_src_dir, target_dir, webapp_src_dir and all other premature configuration attributes.
+* Removed: Project tests method deprecated in favor of a single test method; it now accepts an enhancement block, not an instance_eval block.
+* Removed: FilterTask is dead.
+* Removed: sub_projects method. Is anyone using this?
+* Fixed: Local buildr.rb not loaded from running from inside a sub-project directory.
+* Fixed: Eclipse task now executed whenever a change is made in the Rakefile, or any file it requires, include buildr.rb and task files.
+* Fixed: Circular dependency in release task.
+
+0.18 (3/26/2007)
+* Added: manifest attribute on project, used by default when packaging JAR/WAR.
+* Added: default manifest includes build-by, build-jdk and implementation-title.
+* Added: compile.from(sources) in the same vein as compile.with(classpath)
+* Added: load all *.rake files form the tasks directory (if exists) for use in the
+  main Rakefile.
+* Added: Java.tools returns a reference to tools.jar on JDKs that include it.
+* Added: brought back experimental test tasks.
+* Added: artifacts task to download all artifacts referenced by project (using
+  either artifact or artifacts method).
+* Changed: back to old behavior, compile task only executes if there are any files
+  to compile, and compile? method removed.
+* Changed: repositories.remote is now an array instead of a hash, and repositories
+  are searched in the order in which they appear.
+* Changed: release task is now a regular task, using the Release object instead
+  of being a ReleaseTask.
+* Changed: eclipse task executes artifacts task.
+* Fixed: inherited attributes now cache default value, useful when working with
+  arrays/hashes.
+* Fixed: manifest file generated even if manifest attribute is false.
+* Fixed: compile task now properly detects when not all files compiled.
+* Fixed: bug that caused project file tasks to execute twice.
+
+0.17 (3/14/2007)
+* Added: project.task acts like Rake's task but can also fetch a task from
+  a project using the project's namespace.
+* Added: project.file acts like Rake's file but resolve relative paths
+  based on the project base directory.
+* Added: Rake tasks execute in the directory in which they were defined.
+* Added: enhanced Rake with circular dependency, and you can find all circular
+  dependencies by running rake check.
+* Added: enhanced Rake in_namespace, if the namespace starts with colon,
+  creates a namespace relative to the root instead of the current namespace.
+* Changed: a project definition is now a task definition.
+* Changed: use enhance to extend the project definition instead of after_define.
+* Changed: LocalDirectoryTask replaced with Project.local_task.
+* Changed: projects method accepts multiple names, returning only these project
+  definitions, returns all of them with no arguments.
+* Changed: packge only defines the essentials once, so you can call package
+  on a project to retrieve a specific package by type/id.
+* Changed: zip task (and jar/war) no longer resolve artifacts for you,
+  must call artifacts directly.
+* Changed: cannot access a project before it's defined, but can do that with
+  sub-projects to establish dependencies.
+
+0.16 (3/7/2007)
+* Added: zip.include :as=> to include file under specified name.
+* Added: zip.merge to include the (expanded) contents of one zip file in another.
+* Added: experimental test task using JUnit and JMock.
+* Changed: project.to_s returns name, projects returns sorted by name.
+* Changed: project definition now executed using project's base directory
+  as the current directory.
+* Fixed: artifact test cases and minor code cleanup.
+* Fixed: attempts to download artifact even if created by task.
+* Fixed: release task now deletes old tagged copy and reports SVN usage.
+* Fixed: OpenJPA not including target directory in classpath.
+
+0.15 (2/28/2007)
+* Fixed: tasks fail unless deployment server specified.
+* Changed: deploy method executes deployment, instead of returning a task.
+
+0.14 (2/28/2007)
+* Added: check task that looks for obvious errors in the Rakefile.
+* Added: deploy task for managing deployment.
+* Added: release task that updates version numbers, commits and tags SVN.
+* Changed: the project name is now the fully qualified name, e.g. ode:axis2
+* Changed: you can now lookup a project before it's defined; you still can
+  only define a project once.
+* Changed: you can lookup projects by full qualified name.
+* Changed: release_to changed to deploy_to, which is now a getter/setter.
+* Fixed: removed Java.home which conflicted with JRuby.
+* Fixed: install task did not re-install modified files.
+* Fixed: deploying only uploads one artifact.
+* Fixed: timing issues.
+* Fixed: Maven classifier now used properly.
+
+0.13 (2/26/2007)
+* Added: global java method.
+* Added: project build method.
+* Added: OpenJPA mapping_tool method.
+* Added: Rakefile to generate Gem.
+* Changed: you can now lookup a sub-project from the top project method.
+* Changed: the projects methods return all sub-projects.
+* Fixed: bug in JarTask that resolved artifacts too early.
+* Fixed: global tasks (clean, build, etc) now complain if executed from a directory
+  that does not map to any project.
+* Fixed: to work with Rake 0.7.2.
+
+0.12 (2/24/2007)
+* Added: call prepare with list of tasks to add them as prerequisites.
+* Added: project.id returns the compound name, e.g. foo, foo-bar, foo-bar-baz.
+* Added: JavaCC, XMLBeans schema compiler, OpenJPA enhancer, APT tasks.
+* Changed: the default package ID is take from the project ID instead of its name.
+* Changed: renamed buildr and moved here.
+* Changed: moved all code into Buildr module.
+* Fixed: download breaking when POM not found.
+* Fixed: compile task fails if classpath is empty.
+* Fixed: zip task fails if target directory does not exist.
+* Fixed: packaging task does not require build.
+* Fixed: compiler not showing command when trace is on.
+* Fixed: zip dependencies were all fucked up.
+* Fixed: package should not depend on build.
+
+0.11 (2/16/2007)
+* Added: test cases for unzip task
+* Added: prepare method to access prepare task
+* Added: prepare, compile and resources accept a block you can use to enhance the task
+* Changed: ZipTask executes all includes files as prerequisites, and now includes
+  directories correctly
+* Changed: Jar/WarTask are now extended using with(options) method
+* Changed: JarTask now accepts array of sections (each being a hash) for the manifest,
+  and a proc/method to generate it
+* Changed: added HighLine to hide password entry on the command line
+* Changed: unzip now using UnzipTask with its own shorthand syntax.
+* Changed: filter task gets a consistent syntax to unzip
+
+0.10 (2/13/2007)
+* Added: modifier for artifacts
+* Added: ZipTask, WarTask
+* Added: get POM artifact directly from artifact
+* Changed: JAR and WAR packaging based on new and improved Zip task
+* Changed: options for packaging, but not affecting current Rakefile
+* Remove: delete task
+
+0.9 (2/9/2007)
+* Added: attributes for configuring compile (sources, classpath, target, options)
+* Added: shorthand notation for specifying compilation (to, with, using)
+* Changed: copy task is dead (name conflict), instead we get the better filter
+  task with include/exclude patterns
+* Changed: rewrite of compile task, now better than ever
+* Changed: compile can be used inside and outside project
+* Changed: compiler no longer infers anything from its prerequisites
+* Changed: compiler accepts files, artifacts and tasks on the classpath
+* Changed: resources task now working as expected
+* Remove: global task artifacts was the root of all evil and got canned.
+
+0.8 (2/5/2007)
+* Added: release task and release_to configuration for repositories
+* Added: SFTP uploader for releases
+* Added: convenience method group() for specifying multiple artifacts in same
+  group and version number
+* Added: install target copies package to local repository and adds a POM,
+  uninstall package removes package (and POM) from local repository
+* Changed: project lookup now happens through project() method
+* Changed: locating file in the local repository now happens through Repositories
+* Changed: downloading file into the local repository now happens through Repositories
+* Changed: notation for specifying multiple artifacts in a string is now foo,bar,baz
+* Changed: artifact identifier is now specified with the key :id
+* Changed: download POM alongside artifact and install in local repository
+* Changed: no more scoping artifacts collection in project, use compile.with instead
+* Changed: moved HTTP download logic to transports.rb
+* Removed: deprecated grouping with multiple artifacts under id key
+
+0.6 (2/1/2007)
+* Added:   Artifact resolution introduces the notion of a spec,
+           which can be supported using ActsAsArtifact
+* Added:   You can now use a project as an artifact, resulting in all its
+           packages being added, or use a task as artifact
+* Changed: project.sub_projects renamed project.projects
+* Changed: what used to be called dependencies is now called artifacts
+* Changed: all artifacts are now created as tasks that know how to download
+           themselves unless some other behavior is specified
+* Changed: local and remote repositories are now defined on the Rakefile
+           instead of individual projects
+* Changed: attributes now stored directly as instance variables
+* Changed: ANSI colors and progress bar now using Ruby Facets
+
+0.5 (1/24/2007)
+* Added: Build number for each top-level project, build_number method for accessing
+  it and build:increment task for updating the build number file.
+* Added: to_path method on project to resolve paths relative to base_dir.
+* Added: recursive_task method on project to create task in project/sub-project.
+* Added: compiler property for passing any options to Javac.
+* Changed: remove task renamed uninstall.
+* Changed: and to confuse more remove task (RemoveTask) renamed delete.
+* Changed: consolidated before_create/after_create to on_create.
+* Changed: version, group, artifact added as accessors to project.
+* Changed: project definition block takes project as argument.
+* Changed: project enhanced only if new settings or block.
+* Changed: local_repository is now separate attribute from repositories.
+* Changed: Directory structure, now split into rbs, rbs-java and tasks.
+* Removed: project.options. Using a different attributes mechanism.
+
+0.4 (1/23/2007)
+* Added: CopyTask now deals with files and directories, can copy multiple files,
+  and applies filter to all of them. Filter can be a hash or a proc.
+* Added: Project gets resources_filter attribute that can be used to set the
+  filter on all copied resources.
+* Added: HTTP module for getting and downloading files, and a download task.
+* Changed: Dependencies now check signatures for every file, if available,
+  and show download progress.
+
+0.3 (1/22/2007)
+* Added: Dependencies loaded from Maven repositories if not existing or built by project.
+  Use rake dependencies to force update, or let compilation take care of it.
+* Added: Copy task for copying one file to another, and filtering support.
+
+0.2 (1/21/2007)
+* Added: remove task to get rid of packages added to the local repository.
+* Changed: recompile project if any of its dependencies is newer than the source code.
+  Will cause recompile if any of the dependencies was compiled and packaged again.
+* Changed: compile task depends on javac task and resource copy tasks.
+  This might change when adding filtering later on.
+
+0.1 (1/19/2007)
+* Added: build and clean tasks
+* Added: resources are now copied over during compilation
+* Added: POM file generated in local repository (keep Maven happy)
+* Added: compile scope for use by javac
+* Added: WAR packaging.
+* Changed: Root project operates on the current directory, sub-projects on sub
+  directories. See Rakefile for example.

Added: incubator/buildr/trunk/LICENSE
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/LICENSE?rev=594720&view=auto
==============================================================================
--- incubator/buildr/trunk/LICENSE (added)
+++ incubator/buildr/trunk/LICENSE Tue Nov 13 15:44:11 2007
@@ -0,0 +1,176 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS

Added: incubator/buildr/trunk/README
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/README?rev=594720&view=auto
==============================================================================
--- incubator/buildr/trunk/README (added)
+++ incubator/buildr/trunk/README Tue Nov 13 15:44:11 2007
@@ -0,0 +1,73 @@
+= Buildr
+
+This is Buildr, the build system that doesn't suck.
+
+http://incubator.apache.org/buildr/
+
+== Get Started
+
+=== Install Buildr:
+Make sure to set JAVA_HOME environment variable first, then:
+
+  gem install buildr
+
+(Use su for Linux and OS/X)
+
+=== RTFM:
+
+* Buildr documentation: http://incubator.apache.org/buildr/
+* More about Rake: http://docs.rubyrake.org
+* Antwrap documentation: http://antwrap.rubyforge.org
+
+=== Mailing list:
+
+* Users: buildr-user@incubator.apache.org (subscribe: buildr-user-subscribe@incubator.apache.org, archive: http://mail-archives.apache.org/mod_mbox/incubator-buildr-user/
+
+* Developers: buildr-dev@incubator.apache.org (subscribe: buildr-dev-subscribe@incubator.apache.org, archive: http://mail-archives.apache.org/mod_mbox/incubator-buildr-dev/
+
+Create your own Buildfile and start living the life!
+
+
+== Where's My Ruby?
+
+Buildr needs Ruby 1.8 or later and RubyGems 0.9 or later. All other dependencies are installed when you run:
+  gem install buildr
+
+=== Windows
+
+Windows users can get the one-click Ruby installer, which includes the latest version of Ruby and RubyGems:
+
+http://rubyinstaller.rubyforge.org
+
+=== Linux and OS/X
+
+If you're running Linux or OS/X you may already have Ruby installed, or you can get it through the usual channels:
+  yum install ruby
+  apt-get install ruby
+  emerge ruby
+
+You can get RubyGems here: http://rubyforge.org/frs/?group_id=126
+
+To install:
+  tar -xz < rubygems-0.9.2.tgz
+  cd rubygems-0.9.2
+  sudo ruby setup.rb
+  sudo gem install rubygems-update
+
+
+== Living On the Edge
+
+You can check the latest sources from SVN:
+  svn co http://svn.apache.org/repos/asf/incubator/buildr/trunk
+Or browse the SVN repository online: http://svn.apache.org/repos/asf/incubator/buildr
+
+To install Buildr locally from source, do:
+
+  cd buildr
+  rake install
+
+If the cutting edge doesn't work, make sure to check the CHANGELOG, to see which changes might have broken your build.
+
+== License
+
+:include:LICENSE

Added: incubator/buildr/trunk/bin/buildr
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/bin/buildr?rev=594720&view=auto
==============================================================================
--- incubator/buildr/trunk/bin/buildr (added)
+++ incubator/buildr/trunk/bin/buildr Tue Nov 13 15:44:11 2007
@@ -0,0 +1,7 @@
+begin
+  require "buildr"
+rescue LoadError
+  require "rubygems"
+  require "buildr"
+end
+Rake.application.run

Propchange: incubator/buildr/trunk/bin/buildr
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/buildr/trunk/doc/css/default.css
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/doc/css/default.css?rev=594720&view=auto
==============================================================================
--- incubator/buildr/trunk/doc/css/default.css (added)
+++ incubator/buildr/trunk/doc/css/default.css Tue Nov 13 15:44:11 2007
@@ -0,0 +1,188 @@
+body {
+  color: #333;
+  background-color: #fff;
+  font-family: Tahoma, Arial, Helvetica, sans-serif;
+  text-align: center;
+	line-height: 140%;
+}
+
+
+#wrap{
+  margin: 1em auto 2em auto;
+  text-align: left;
+  width: 60em;
+}
+
+
+#header {
+  margin: 0;
+}
+
+#header img {
+  margin: 0 0 1em 0em;
+}
+
+#header .tagline {
+  float: right;
+  font-size: 1.5em;
+  font-weight: bold;
+  color: #0066b3;
+  position: relative;
+  bottom: 4.5em;
+}
+
+
+#pages { /* Parent Wrapper for inside boxes */
+/*  display: inline; */ /* IE Hack */
+  width: 12em;
+  float: left;
+  text-align: left;
+  margin-right: 2em;
+}
+
+#pages ol {
+  list-style: none;
+  font-weight: bold;
+  padding: 0;
+}
+
+#pages ol li {
+  border-top: 1px solid #E9E9E9;
+  padding: 0.3em 0 0.5em 0.5em;
+}
+
+#pages ol li a:link,  #pages ol li a:visited  {
+  color: #808080;
+  text-decoration: none;
+}
+
+#pages ol li a:hover {
+  color: #454545;
+  text-decoration: none;
+}
+
+#pages ol li a.current {
+  color: #B8B8B8;
+}
+
+#pages form {
+  margin-top: 2em;
+  padding: 0.3em 0 0.5em 0.5em;
+}
+
+
+#content { /* Parent Wrapper for inside boxes */
+/*  display: inline; *//* IE Hack */
+  float: right;
+  width: 44em;
+  margin-left: 0.3em;
+  margin-bottom: 5em;
+}
+
+ol.toc {
+  list-style: none;
+  padding: 0;
+  margin-bottom: 2em; !important
+}
+
+ol.toc li {
+  margin-left: 0.5em;
+  margin-bottom: 0.3em;
+}
+
+ol.toc ol {
+  list-style: none;
+  padding: 0;
+  margin-left: 1.3em;
+  margin-bottom: 0.3em;
+}
+
+#content .footnote { margin-top: 2.5em; }
+#content .footnote sup { font-weight: bold; }
+
+#content .footnote-links dt { font-weight: bold; }
+#content .footnote-links dt:after { content: ": " }
+#content .footnote-links dd { }
+
+
+#navigation {
+  padding: 2em 0 1em 0;
+}
+#navigation .prev {
+  display: block;
+  float: left;
+}
+#navigation .next {
+  display: block;
+  float: right;
+}
+
+#footer {
+  border-top: 1px solid #ccc;
+  font-size: 0.9em;
+  padding: 0.3em;
+  clear: both;
+  margin: 0 0 3em 19em;
+}
+
+
+a:link, a:visited{
+  color: #0066b3;
+  text-decoration: none;
+}
+
+a:hover{
+  text-decoration: underline;
+}
+
+img {
+  border: none;
+}
+
+pre {
+	font-family: "Courier New";
+  padding: 1em;
+}
+pre.wrapped {
+  white-space: pre-wrap;       /* css-3 */
+  white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
+  white-space: -pre-wrap;      /* Opera 4-6 */
+  white-space: -o-pre-wrap;    /* Opera 7 */
+  word-wrap: break-word;
+}
+
+h1 a:link, h1 a:visited {
+  color: #080808;
+}
+
+h1, h2, h3 {
+  padding: 0.3em;
+  margin: 2.5em 0 0.5em -0.3em;
+  line-height: 1.1em;
+  letter-spacing: 1px;
+}
+
+h1 {
+  border-bottom: 1px solid #808080;
+  font-size: 2em;
+  margin-top: 0;
+}
+
+h2 {
+  border-bottom: 1px solid #a0a0a0;
+  font-size: 1.3em;
+}
+
+h3 {
+  border-bottom: 1px solid #c0c0c0;
+  font-size: 1.1em;
+}
+
+blockquote {
+	padding-left: 2em;
+	padding-right: 2em;
+	margin-left: 0.3em;
+  margin-right: 0;
+	border-left: 1px solid #3c78b5;
+}
+

Propchange: incubator/buildr/trunk/doc/css/default.css
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/buildr/trunk/doc/css/default.css
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: incubator/buildr/trunk/doc/css/default.css
------------------------------------------------------------------------------
    svn:mime-type = text/css

Added: incubator/buildr/trunk/doc/css/eiffel.css
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/doc/css/eiffel.css?rev=594720&view=auto
==============================================================================
--- incubator/buildr/trunk/doc/css/eiffel.css (added)
+++ incubator/buildr/trunk/doc/css/eiffel.css Tue Nov 13 15:44:11 2007
@@ -0,0 +1,121 @@
+pre.eiffel .EmbeddedSource {
+   background-color: #6597F6;
+}
+pre.eiffel .LibraryObject {
+   font-weight: bold;
+   color: #6D79DE;
+}
+pre.eiffel .Section {
+   font-style: italic;
+}
+pre.eiffel .FunctionArgumentAndResultTypes {
+   color: #70727E;
+}
+pre.eiffel .TypeName {
+   font-style: italic;
+}
+pre.eiffel .Number {
+   color: #CD0000;
+   font-style: italic;
+}
+pre.eiffel .MarkupList {
+   color: #B90690;
+}
+pre.eiffel .MarkupTagAttribute {
+   font-style: italic;
+}
+pre.eiffel .LibraryVariable {
+   font-weight: bold;
+   color: #21439C;
+}
+pre.eiffel .line-numbers {
+   background-color: #C3DCFF;
+   color: #000000;
+}
+pre.eiffel .FunctionParameter {
+   font-style: italic;
+}
+pre.eiffel .MarkupTag {
+   color: #1C02FF;
+}
+pre.eiffel {
+   background-color: #FFFFFF;
+   color: #000000;
+}
+pre.eiffel .MarkupHeading {
+   font-weight: bold;
+   color: #0C07FF;
+}
+pre.eiffel .JsOperator {
+   color: #687687;
+}
+pre.eiffel .InheritedClassName {
+   font-style: italic;
+}
+pre.eiffel .StringInterpolation {
+   color: #26B31A;
+}
+pre.eiffel .MarkupQuote {
+   color: #000000;
+   font-style: italic;
+}
+pre.eiffel .MarkupNameOfTag {
+   font-weight: bold;
+}
+pre.eiffel .InvalidTrailingWhitespace {
+   background-color: #FFD0D0;
+}
+pre.eiffel .LibraryConstant {
+   font-weight: bold;
+   color: #06960E;
+}
+pre.eiffel .MarkupXmlDeclaration {
+   color: #68685B;
+}
+pre.eiffel .PreprocessorDirective {
+   font-weight: bold;
+   color: #0C450D;
+}
+pre.eiffel .BuiltInConstant {
+   color: #585CF6;
+   font-style: italic;
+}
+pre.eiffel .MarkupDtd {
+   font-style: italic;
+}
+pre.eiffel .Invalid {
+   background-color: #990000;
+   color: #FFFFFF;
+}
+pre.eiffel .LibraryFunction {
+   font-weight: bold;
+   color: #3C4C72;
+}
+pre.eiffel .String {
+   color: #D80800;
+}
+pre.eiffel .UserDefinedConstant {
+   color: #C5060B;
+   font-style: italic;
+}
+pre.eiffel .Keyword {
+   font-weight: bold;
+   color: #0100B6;
+}
+pre.eiffel .MarkupDoctype {
+   color: #888888;
+}
+pre.eiffel .FunctionName {
+   font-weight: bold;
+   color: #0000A2;
+}
+pre.eiffel .PreprocessorLine {
+   color: #1A921C;
+}
+pre.eiffel .Variable {
+   color: #0206FF;
+   font-style: italic;
+}
+pre.eiffel .Comment {
+   color: #00B418;
+}

Propchange: incubator/buildr/trunk/doc/css/eiffel.css
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/buildr/trunk/doc/css/eiffel.css
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: incubator/buildr/trunk/doc/css/eiffel.css
------------------------------------------------------------------------------
    svn:mime-type = text/css

Added: incubator/buildr/trunk/doc/css/print.css
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/doc/css/print.css?rev=594720&view=auto
==============================================================================
--- incubator/buildr/trunk/doc/css/print.css (added)
+++ incubator/buildr/trunk/doc/css/print.css Tue Nov 13 15:44:11 2007
@@ -0,0 +1,71 @@
+@page { margin: 1in 0.5in 2in 0.5in; }
+@page:left {
+  @bottom-left { content: counter(page); }
+  @bottom-right { content: string(pagetitle); }
+  @top-right { content: string(doctitle); }
+}
+@page:right {
+  @bottom-right { content: counter(page); }
+  @bottom-left { content: string(pagetitle); }
+  @top-left { content: string(doctitle); }
+}
+@page:first {
+  @bottom-left { content: normal }
+  @bottom-right { content: normal }
+  @top-left { content: normal }
+  @top-right { content: normal }
+}
+
+body {
+  font-size: 12pt;
+  margin: 0;
+  color: black;
+  background: white;
+}
+
+title { string-set: doctitle content(); }
+h1 { string-set: pagetitle content(); }
+
+#wrap, #content, #footer {
+  float: none !important;
+  color: black;
+  background: transparent;
+  width: auto !important;
+  margin: 0 5%;
+  padding: 0;
+  border: 0;
+}
+
+#header {
+  margin-bottom: 5%;
+  font-size: 120%;
+}
+#header img { width: 4in; }
+#header .tagline {
+  float: none !important;
+  position: static !important;
+  font-size: 1.2em;
+  text-align: center;
+}
+
+#pages, .noprint { display: none; }
+
+ol.toc a:link, ol.toc a:visited { text-decoration: none; }
+ol.toc a:after { content: leader('.') target-counter(attr(href), page); }
+
+#footer { margin-top: 5%; }
+
+h1 { page-break-before: always; }
+h1:first-child { page-break-before: avoid; }
+
+pre, p, blockquote { page-break-inside: avoid; }
+
+pre {
+  font-size: 85% !important;
+  line-height: 1.3em;
+}
+
+a:link, a:visited {
+  background: transparent;
+  text-decoration: underline;
+}

Propchange: incubator/buildr/trunk/doc/css/print.css
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/buildr/trunk/doc/css/print.css
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: incubator/buildr/trunk/doc/css/print.css
------------------------------------------------------------------------------
    svn:mime-type = text/css

Added: incubator/buildr/trunk/doc/images/buildr-hires.png
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/doc/images/buildr-hires.png?rev=594720&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/buildr/trunk/doc/images/buildr-hires.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: incubator/buildr/trunk/doc/images/buildr.png
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/doc/images/buildr.png?rev=594720&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/buildr/trunk/doc/images/buildr.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: incubator/buildr/trunk/doc/images/zbuildr.tif
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/doc/images/zbuildr.tif?rev=594720&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/buildr/trunk/doc/images/zbuildr.tif
------------------------------------------------------------------------------
    svn:mime-type = image/tiff

Added: incubator/buildr/trunk/doc/pages/artifacts.textile
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/doc/pages/artifacts.textile?rev=594720&view=auto
==============================================================================
--- incubator/buildr/trunk/doc/pages/artifacts.textile (added)
+++ incubator/buildr/trunk/doc/pages/artifacts.textile Tue Nov 13 15:44:11 2007
@@ -0,0 +1,203 @@
+h1. Artifacts
+
+In Buildr, almost everything is a file or a file task. You compile source files that come from the file system using classpath dependencies found on the file system, generating even more files. But how do you get these classpath dependencies to start with, and how do you share them with others?
+
+Artifacts.  We designed Buildr to work as a drop-in replacement for Maven 2.0, and share artifacts through the same local and remote repositories.  Artifact tasks know how to download a file from one of the remote repositories, and install it in the local repository, where Buildr can find it. Packages know how to create files and upload them to remote repositories.
+
+We'll get into all of that in a second, but first, let's introduce the artifact specification. It's a simple string that takes one of two forms:
+
+{{{
+group:id:type:version
+group:id:type:classifier:version
+}}}
+
+For example, @"org.apache.axis2:axis2:jar:1.2"@ refers to an artifact with group identifier org.apache.axis2, artifact identifier axis2, a JAR file with version 1.2.  Classifiers are typically used to distinguish between similar file types, for example, a source distribution and binary distribution that otherwise have the same identifier and are both ZIP files.
+
+
+h2. Specifying Artifacts
+
+If your Buildfile spells out @"org.apache.axis2:axis2:jar:1.2"@ more than once, you're doing something wrong.  Repeating the same string over and over will make your code harder to maintain.  You'll know that when you upgrade to a new version in one place, forget to do it in another, and end up with a mismatch.
+
+You can use Ruby's syntax to do simple string substitution, for example:
+
+{{{!ruby
+AXIS_VERSION = "1.2"
+
+compile.with "org.apache.axis2:axis2:jar:#{AXIS_VERSION}"
+}}}
+
+Better yet, you can define all your artifacts at the top of the Buildfile and use constants to reference them in your project definition.  For example:
+
+{{{!ruby
+AXIS2 = "org.apache.axis2:axis2:jar:1.2"
+
+compile.with AXIS2
+}}}
+
+Note that we're not using a separate constant for the version number.  In our experience, it's unnecessary.  The version number intentionally appears at the end of the string, where it stands out easily.
+
+If you have a set of artifacts that belong to the same group and version, and that's quite common, you can use the @group@ shortcut:
+
+{{{!ruby
+AXIOM  = group("axiom-api", "axiom-impl", "axiom-dom",
+  :under=>"org.apache.ws.commons.axiom", :version=>"1.2.4")
+}}}
+
+If you have several artifacts you always use together, consider placing them in an array.  Methods that accept lists of artifacts also accept arrays.  For example:
+
+{{{!ruby
+OPENJPA = ["org.apache.openjpa:openjpa-all:jar:0.9.7",
+  "net.sourceforge.serp:serp:jar:1.12.0"]
+AXIS_OF_WS = [AXIS2, AXIOM]
+
+compile.with OPENJPA, AXIS_OF_WS
+}}}
+
+Another way to group related artifacts together and access them individually is using the @struct@ shortcut.  For example:
+
+{{{!ruby
+JAVAX = struct(
+  :activation  =>"javax.activation:activation:jar:1.1",
+  :persistence =>"javax.persistence:persistence-api:jar:1.0",
+  :stream      =>"stax:stax-api:jar:1.0.1",
+)
+
+compile.with JAVAX.persistence, OPENJPA
+}}}
+
+In our experience, using constants in this manner makes your Buildfile much easier to write and maintain.
+
+And, of course, you can always place your artifact specifications in a separate file and require it into your Buildfile.  For example, if you're working on several different projects that all share the same artifacts:
+
+{{{!ruby
+require "../shared/artifacts"
+}}}
+
+When you use @require@, Ruby always looks for a filename with the @.rb@ extension, so in this case if expects to find @artifacts.rb@ in the @shared@ directory.
+
+One last thing.  You can also treat artifact specifications as hashes.  For example:
+
+{{{!ruby
+AXIS = { :group=>"org.apache.axis2", :id=>"axis2", :version=>"1.2" }
+compile.with AXIS
+puts compile.classpath.first.to_hash
+=> { :group=>"org.apache.axis2", :id=>"axis2",
+     :version=>"1.2", :type=>:jar }
+}}}
+
+
+h2. Specifying Repositories
+
+Buildr can download artifacts for you, but only if you tell it where to find them.  You need to specify at least one remote repository, from which to download these artifacts.
+
+When you call @repositories.remote@, you get an array of URLs for the various remote repositories.  Initially, it's an empty array, to which you can add new repositories.  For example:
+
+{{{!ruby
+repositories.remote << "http://www.ibiblio.org/maven2/"
+}}}
+
+If you need to use a proxy server to access remote repositories, you can set the environment variable @HTTP_PROXY@ to the proxy server URL.  You can also work without a proxy for certain hosts by specifying the @NO_PROXY@ environment variable.  For example:
+
+{{{!sh
+$ export HTTP_PROXY = "http://myproxy:8080"
+$ export NO_PROXY = "*.mycompany.com,localhost,special:800"
+}}}
+
+Alternatively you acn use the Buildr options @proxy.http@ and @proxy.exclude@:
+
+{{{!ruby
+options.proxy.http = "http://myproxy:8080"
+options.proxy.exclude << "*.mycompany.com"
+options.proxy.exclude << "localhost"
+}}}
+
+All the artifacts download into the local repository.  Since all your projects share the same local repository, you only need to download each artifact once.  Buildr was designed to be used alongside Maven 2.0, for example, when migrating projects from Maven 2.0 over to Buildr.  By default it will share the same local repository, expecting the repository to be the @.m2/repository@ directory inside your home directory.
+
+You can choose to relocate the local repository by giving it a different path, for example:
+
+{{{!ruby
+repositories.local = "/usr/local/maven/repository"
+}}}
+
+That's one change you don't want to commit into the Buildfile, so the best place to do it is in your home directory's @buildr.rb@ file.
+
+Buildr downloads artifacts when it needs to use them, for example, to compile a project.  You don't need to download artifacts directly.  Except when you do, for example, if you want to download all the latest artifacts and then go off-line.  It's as simple as:
+
+{{{!sh
+$ buildr artifacts
+}}}
+
+
+h2. Downloading Artifacts
+
+Within your buildfile you can download artifacts directly by invoking them, for example:
+
+{{{!ruby
+artifact("org.apache.openjpa:openjpa-all:jar:0.9.7").invoke
+artifacts(OPENJPA).each(&:invoke)
+}}}
+
+When you let Buildr download artifacts for you, or by invoking the artifact task yourself, it scans through the remote repositories assuming each repository follows the Maven 2 structure.  Starting from the root repository URL, it will look for each artifact using the path @group/id/version/id-version.type@ (or ...@/id-version-classifier.type@).  The group identifier becomes a path by turning periods (@.@) into slashes (@/@).  So to find @"org.apache.axis2:axis2:jar:1.2"@, we're going to look for @org/apache/axis2/axis2/1.2/axis2-1.2.jar@.
+
+You'll find a lot of open source Java libraries in public repositories that support this structure (for example, the "Ibiblio Maven":http://www.ibiblio.org/maven2/ repository).  And, of course, every remote repository you setup for your projects.
+
+But there are exceptions to the rule.  Say we want to download the Dojo widget library and use it in our project.  It's available from the Dojo Web site, but that site doesn't follow the Maven repository conventions, so our feeble attempt to use existing remote repositories will fail.
+
+We can still treat Dojo as an artifact, by telling Buildr where to download it from:
+
+{{{!ruby
+DOJO = "0.2.2"
+
+url = "http://download.dojotoolkit.org/release-#{DOJO}/dojo-#{DOJO}-widget.zip"
+download(artifact("dojo:dojo:zip:widget:#{DOJO}")=>url)
+}}}
+
+Explaining how it works is tricky, skip if you don't care for the details.  On the other hand, it will give you a better understanding of Buildr/Rake, so if not now, come back and read it later.
+
+We use the @artifact@ method to create an @Artifact@ task that references the Dojo widget in our local repository.  The @Artifact@ task is a file task with some additional behavior added by Buildr.  When you call @compile.with@, that's exactly what it does internally, turning each of your artifact specifications into an @Artifact@ task.
+
+But the @Artifact@ task doesn't know how to download the Dojo widget, only how to handle conventional repositories.  So we're going to create a download task as well.  We use the @download@ method to create a file task that downloads the file from a remote URL.  (Of course, it will only download the file if it doesn't already exist.)
+
+But which task gets used when?  We could have defined these tasks separately and used some glue code to make one use the other.  Instead, we call @download@ with the results of @artifact@.  Essentially, we're telling @download@ to use the same file path as @artifact@.  So now we have two file tasks that point to the very same file.  We wired them together.
+
+You can't have more than one task pointing to the same file.  Rake's rule of the road.  What Rake does is merge the tasks together, creating a single file task for @artifact@, and then enhancing it with another action from @download@.  One task, two actions.  Statistically, we've doubled the odds that at least one of these actions will manage to download the Dojo widget and install it in the local repository.
+
+Since we ordered the calls to @artifact@ first and @download@ second, we know the actions will execute in that order.  But @artifact@ is slightly devilish: when its action runs, it adds another action to the end of the list.  So the @artifact@ action runs first, adds an action at the end, the @download@ action runs second, and downloads the Dojo widget for us.  The second @artifact@ action runs last, but checks that the file already exist and doesn't try to download it again.
+
+Magic.
+
+
+h2. Install and Upload
+
+Generally you use artifacts that download from remote repositories into the local repository, or artifacts packaged by the project itself (see "Packaging":packaging.html), which are then installed into the local repository and uploaded to the release server.
+
+Some artifacts do not fall into either category.  In this example we're going to download a ZIP file, extract a JAR file from it, and use that JAR file as an artifact.  We would then expect to install this JAR in the local repository and upload it to the release server, where it can be shared with other projects.
+
+So let's start by creating a task that downloads the ZIP, and another one to extract it and create the JAR file:
+
+{{{!ruby
+app_zip = download("target/app.zip"=>url)
+bean_jar = file("target/app/bean.jar"=>unzip("target/app"=>app_zip))
+}}}
+
+When you call @artifact@, it returns an @Artifact@ task that points to the artifact file in the local repository, downloading the file if it doesn't already exist.  You can override this behavior by enhancing the task and creating the file yourself (you may also want to create a POM file).  Or much simpler, call the @from@ method on the artifact and tell it where to find the source file.
+
+So the next step is to specify the artifact and tell it to use the extracted JAR file:
+
+{{{!ruby
+bean = artifact("example.com:beans:jar:1.0").from(bean_jar)
+}}}
+
+The artifact still points to the local repository, but when we invoke the task it copies the source file over to the local repository, instead of attempting a download.
+
+Use the @install@ method if you want the artifact and its POM installed in the local repository when you run the @install@ task.  Likewise, use the @upload@ method if you want the artifact uploaded to the release server when you run the @upload@ task.  You do not need to do this on artifacts downloaded from a remote server, or created with the @package@ method, the later are automatically added to the list of installed/uploaded artifacts.
+
+Our example ends by including the artifact in the @install@ and @upload@ tasks:
+
+{{{!ruby
+install bean
+upload bean
+}}}
+
+
+Next we're going to "package some artifacts":packaging.html.