Już miałem jedno niepomyślnie zakończone podejście do 
Buildr oraz 
Raven - 
Raven, Buildr i...JPA - nieudany start. Mimo początkowej porażki wciąż pamiętałem o obietnicach jakie składały te narzędzia, gdzie bolączki mavenowe miały odejść w zapomnienie raz na zawsze (prawdopodobnie przynosząc inne, ale inne będą nowe, a starych mam dość). I właśnie podczas wczorajszego, XXI spotkania Warszawa JUG na moment rozgorzała dyskusja na temat 
"Jeśli nie Maven, to co?". I faktycznie. Alternatywą mogłyby być Ant czy make, ale według mnie one są jedynie dobre, podczas gdy Maven jest lepszy, przyjemniejszy (coś na wzór porównania C z C++, żeby nie napisać Java - wszystkie są dobre, ale niektóre przypadają do gustu szybciej niż inne). Postanowiłem dzisiejszy wieczór spędzić rozpoznając Raven i Buildr ponownie.
Zacząłem od 
Ravena. Coś mi mówiło, że należy zaczać od niego. Po chwili już było wiadomo, że już po nim. Strona domowa nie zachęca do odwiedzin, gdzie widnieje 
Latest version: 1.2.3 (2007-05-12), a na liście dyskusyjnej 
raven-user głusza, jakby zamarła. 
Przedostatnia wiadomość jest jakby potwierdzeniem przypuszczenia, że ten projekt, albo dopiero rozpoczyna swoje istnienie (czemu przeczy jego wersja 1.2.3), albo właśnie je zakończył:
Kevin Williams wrote:
> Is Raven dead? JRuby 0.9.1 is quite out of date. JRuby 1.1 should be
> out any day. Will Raven be kept in sync with JRuby?
> 
I believe it was killed by buildr.
Skoro nie Raven to pozostaje wskazany 
Buildr. Wyprzedzając fakty, szybko okazało się, że od niego powinienem zacząć.
Po pierwsze jest to projekt spod parasola ASF, więc rokuje nadzieje na zaistnienie. Po drugie, pobieżna lektura dokumentacji utrwala mnie w przekonaniu, że warto się zainteresować tym projektem, gdyż jego główną zaletą jest tworzenie konfiguracji programując w JRuby. Zero XMLa, którego powoli mam dosyć.
Akurat wczoraj wyszła nowa wersja 
JRuby 1.1 RC1, więc czym prędzej zabrałem się do instalacji JRuby, aby z nim uruchomić Buildr.
Zgodnie z 
Getting Started rozpoczynam od polecenia 
gem install buildr.
jlaskowski@dev ~
$ type gem
gem is /cygdrive/c/apps/jruby/bin/gem
jlaskowski@dev ~
$ gem install buildr
Error opening script file: C:/apps/cygwin/home/jlaskowski/cygdrive/c/apps/jruby/bin/gem (The system cannot find the path specified)
Szybko okazuje się, że rozwiązaniem jest skorzystanie z polecenia 
gem z projektu 
rubygems 1.0.1. Instalacja najnowszego wydania rubygems, ustawienie PATH i ponowne podejście.
jlaskowski@dev ~
$ export PATH=`cygpath -u C:/apps/rubygems/bin`:$PATH
jlaskowski@dev ~
$ type gem
gem is /cygdrive/c/apps/rubygems/bin/gem
jlaskowski@dev ~
$ gem
  RubyGems is a sophisticated package manager for Ruby.  This is a
  basic help message containing pointers to more information.
    Usage:
      gem -h/--help
      gem -v/--version
      gem command [arguments...] [options...]
    Examples:
      gem install rake
      gem list --local
      gem build package.gemspec
      gem help install
    Further help:
      gem help commands            list all 'gem' commands
      gem help examples            show some examples of usage
      gem help platforms           show information about platforms
      gem help            show help on COMMAND
                                     (e.g. 'gem help install')
    Further information:
      http://rubygems.rubyforge.org
jlaskowski@dev ~
$ gem install buildr
Updating metadata for 548 gems from http://gems.rubyforge.org
.................................................................................
.................................................................................
.................................................................................
complete
Building native extensions.  This could take a while...
Successfully installed rjb-1.1.1
Successfully installed buildr-1.2.10
2 gems installed
Installing ri documentation for buildr-1.2.10...
Installing RDoc documentation for buildr-1.2.10...
Kolejnym krokiem jest stworzenie projektu nadzorowanego przez Buildr. Tu chwila wahania, gdyż nie jestem przekonany, czy projekt powinien już być stworzony (podobnie jak w przypadku Ant), czy mogę go utworzyć na podobieństwo działania archetype w maven. Na razie nie mam odpowiedzi, ale kontynuuję poznawanie buildr.
jlaskowski@dev ~
$ buildr --help
Buildr 1.2.10
Usage:
  buildr [-f buildfile] {options} targets...
Options:
  --buildfile=FILE     (-f)
      Use FILE as the buildfile.
  --environment        (-e)
      Environment name (e.g. development, test, production).
  --freeze             (-F)
      Freezes the Buildfile so it always uses Buildr version 1.2.10
  --help               (-H)
      Display this help message.
  --nosearch           (-N)
      Do not search parent directories for the buildfile.
  --quiet              (-q)
      Do not log messages to standard output.
  --require=MODULE     (-r)
      Require MODULE before executing buildfile.
  --trace              (-t)
      Turn on invoke/execute tracing, enable full backtrace.
  --unfreeze           (-U)
      Unfreezes the Buildfile to use the latest version of Buildr
  --version            (-V)
      Display the program version.
For help with your buildfile:
  buildr help
Zgodnie z dokumentacją utworzeniem pliku konfiguracji projektu 
buildfile może zająć się sam buildr, więc częściowo już otrzymałem odpowiedź, że mogę zacząć z pustym katalogiem projektowym.
jlaskowski@dev /cygdrive/c/projs/sandbox/buildr-projekt
$ buildr
To use Buildr you need a buildfile. Do you want me to create one?:
1. From directory structure
2. Skip
?  1
Created /cygdrive/c/projs/sandbox/buildr-projekt/buildfile
jlaskowski@dev /cygdrive/c/projs/sandbox/buildr-projekt
$ ls -ltr
total 1
-rw-r--r-- 1 jlaskowski None 536 Jan  9 22:30 buildfile
jlaskowski@dev /cygdrive/c/projs/sandbox/buildr-projekt
$ cat buildfile
# Generated by Buildr 1.2.10, change to your liking
# Version number for this release
VERSION_NUMBER = "1.0.0"
# Version number for the next release
NEXT_VERSION = "1.0.1"
# Group identifier for your projects
GROUP = "buildr-projekt"
COPYRIGHT = ""
# Specify Maven 2.0 remote repositories here, like this:
repositories.remote << "http://www.ibiblio.org/maven2/"
desc "The Buildr-projekt project"
define "buildr-projekt" do
  project.version = VERSION_NUMBER
  project.group = GROUP
  manifest["Implementation-Vendor"] = COPYRIGHT
end
Mam plik konfiguracji projektu, więc ponownie wywołuję buildr.
jlaskowski@dev /cygdrive/c/projs/sandbox/buildr-projekt
$ buildr
(in /cygdrive/c/projs/sandbox/buildr-projekt)
Building buildr-projekt
Testing buildr-projekt
Nie ma żadnego błędu, więc po cichu zakładam, że działa.
Pora na kolejną porcję dokumentacji buildr - 
Projects. 
Wciąż poszukuję odpowiedzi na pytanie o strukturę katalogową projektu. Za czasów Ant należało samemu zadbać o strukturę katalogów i z nią związać (czytaj: manualnie utworzyć) plik build.xml, który był odpowiednikiem Makefile z make. Nie ukrywam, że ostatecznie zamierzałem użyć Mavena do utworzenia struktury katalogowej projektu, a na niej "posadowić" buildr. Pytanie wciąż pozostaje bez odpowiedzi.
Doszukałem się jednakże ciekawego zestawu artykułów, których źródłem był artykuł wprowadzający na InfoQ - 
Apache to incubate its first Ruby Project: Buildr - Ruby Build System for Java Projects. W zasadzie można powiedzieć, że wspomniany artykuł jest pierwszym jaki należy przeczytać, który wskaże kolejne, co ostatecznie pozwoli na zorientowanie się w sytuacji i podjęcie decyzji, czy 
Agile or Maven. A jest nad czym się zastanawiać, jeśli wierzyć:
It builds the same except that the scripts have been downsized by 91% from 52 XML abused files to 1 script. But that's not all, Buildr managed to cut the build time by 50%! Even on partial builds, Buildr performs similarly or better than Maven.Dobrym wprowadzeniem w temat Buildr jest 
Recenzja Buildr, w którym dowiaduję się kolejnej potrzebnej rzeczy - buildr do dyspozycji udostępnia mam kilka(dziesiąt/set) gotowych do użycia zadań, jak np.
- clean
 - compile
 - upload
 - install
 - javadoc
 - package
 - test
 - uninstall
 
W podsumowaniu pada ciekawe stwierdzenie, które zaczyna się u mnie materializować mimo braku doświadczenia z Raven i Buildr:
Overall I believe that Buildr is a much more likely to become the defacto ruby build language, than Raven. If simply because of the active community that Raven seems to lack. So if you are up to replacing the trainwreck that is Maven 2 then I would encourage you to look into Buildr.Ciekawa uwaga.
Przypominam sobie, że właśnie uruchomienie 
buildr help wskazuje na dostępne i najczęściej stosowane zadania gotowe do użycia. I jest to napisane w pierwszym poleceniu jakie przyjdzie każdemu nowicjuszowi wykonać przy początkowym rozpoznawaniu buildr (!)
jlaskowski@dev /cygdrive/c/projs/sandbox/buildr-projekt
$ buildr help
(in /cygdrive/c/projs/sandbox/buildr-projekt)
Buildr 1.2.10
Usage:
  buildr [-f buildfile] {options} targets...
Top-level projects (buildr help:projects for full list):
  buildr-projekt        # Moj pierwszy projekt zarzadzany przez Buildr - buildr-projekt
Common tasks:
  artifacts             # Download all artifacts
  build                 # Build the project
  clean                 # Clean files generated during a build
  compile               # Compile all projects
  default               # The default task it build
  eclipse               # Generate Eclipse artifacts for all projects
  help:projects         # List all projects defined by this buildfile
  help:tasks            # List all tasks available from this buildfile
  idea                  # Generate Idea artifacts for all projects
  install               # Install packages created by the project
  javadoc               # Create the Javadocs for this project
  junit:report          # Generate JUnit tests report in reports/junit
  package               # Create packages
  release               # Make a release
  test                  # Run all test cases
  uninstall             # Remove previously installed packages
  upload                # Upload packages created by the project
For help on command line options:
  buildr --help
Using Java 1.5.0_14, Ant 1.7.0.
To run a full build without running any test cases:
  buildr test=no
To run specific test case:
  buildr test:MyTest
To run integration tests:
  buildr integration
Okazuje się, że taką pomoc otrzymamy jedynie w projekcie zarządzanym przez buildr. Zresztą było to napisane przy 
buildr --help (trzeba było czytać dokumentację oraz wyniki poleceń dokładniej!):
For help with your buildfile:
  buildr help
Na dzisiaj koniec, zasypiam z kilkoma pytaniami dotyczącymi Buildr jak np. czy struktura katalogów powinna istnieć przed wprowadzeniem buildr do projektu, czy buildr wspomoże mnie w tej kwestii oraz fundamentalne dla mnie pytanie, jak zbudować ear i uruchomić go na serwerze aplikacji. Istnieje gem dla GlassFish, więc światełko w tunelu jest (oby to było wyjście, a nie nadjeżdżający pociąg ;-)). Przy kolejnym podejściu z pewnością padną te i wiele innych (p)odpowiedzi.