where i work, we use maven exclusively and even tough editing xml
files drives me crazy, we seldom look/edit them so im okay with that


On Tue, Nov 25, 2008 at 12:37 AM, [EMAIL PROTECTED]
<[EMAIL PROTECTED]> wrote:
>
> Dick and Carl have talked a lot about builds lately, prompting this
> post...
>
> I spent about a year doing nothing but Ruby and then ended up going
> back to my old Java job.  I learned a lot in the Ruby world, and one
> of the big take-aways I had was that the way build systems work in the
> Java world is completely broken.
>
> In ruby there is this wonderful tool called rake (http://
> rake.rubyforge.org).  Rake is more than a build system, it's really a
> system for anything you want automated.
>
> You can leverage your code inside this system.  So if you wrote a
> class that cleaned a database as part of your main code base, you can
> hook rake into it and run it something like:  rake clean_db
>
> Rake is just ruby code, you have the full power of Ruby within a
> syntax a bit similar to Ant:
>
>  task :default => [:test]
>
>  task :test => [:clean_db] do
>    ruby "test/unittest.rb"
>  end
>
>  task :clean_db do
>     DBUtil.cleanDB
>  end
>
> in this case the test target has a dependency on clean_db.  And
> clean_db is simply a ruby class that cleans all data from the
> database.
>
> In the ruby world, there are many Rake plugins that allow you to do
> all sorts of automation.  There are plugins that deploy/manage to
> Amazon EC2.  One called Capistrano that you run on your prod system
> checks your source code out from source control, runs migration
> scripts, backs up the old version, and starts up your new updated
> system, all with one command.  One of the most brilliant ideas in
> Rails, database migrations is driven by Rake.  So your deployment
> might be as simple as "rake deploy".  Your database migration is "rake
> db:migrate", which will check your current version of the database and
> apply and schema and/or database migrations needed to get up-to-date.
>
> Since you can write Ruby code in your build file you can easily write
> code that has conditionals, loops, string manipulations, etc.  In
> other words, you can easily put intelligence into your build!  Doing
> these simple tasks in Ant or Maven is nightmarish.  Coding them sucks
> and debugging them is even worse.  XML is a terrible way to define
> your build systems, it works ok for trivial cases, but as any
> experienced developers know, trivial cases soon evolve - or devolve -
> into complex cases. Don't believe me?  Here's what the creator of Ant
> (James Duncan Davidson)said back in 2003:
> http://weblogs.java.net/blog/duncan/archive/open_source/index.html .
> Or in 2004, he's more explicit:
> http://web.archive.org/web/20041217023752/http://x180.net/Journal/2004/03/31.html
> "If I knew then what I knew now, I would have tried using a real
> scripting language, such as JavaScript via the Rhino component or
> Python via JPython, with bindings to Java objects which implemented
> the functionality expressed in todays tasks. Then, there would be a
> first class way to express logic and we wouldn't be stuck with XML as
> a format that is too bulky for the way that people really want to use
> the tool. "
>
> But 4 and half years later and 99% of the java world is still writing
> their builds in XML.
>
> Solution?  Well there is Gant:  http://gant.codehaus.org/.  Gant is
> simply a groovy hook into Ant.  Write your builds in Groovy script and
> leverage ant tasks.  Where I work, we are going down this path.  After
> doing this for a while, I can't recommend it.   It's better than xml,
> but has it's own set of problems - mainly due to the nature of
> Groovy.  Since Groovy isn't truly interpreted, it's very hard to
> leverage your existing code base.  For example, if I want to call my
> Java class "DBUtil.cleanDB()", this class must be compiled for the
> groovy script that calls it to run.  So you have to jump through
> multiple stage builds, just as you would with Ant.  Another issue I
> have with Gant/Groovy are the exception stack straces are terrible.
> There are dozens and dozens of useless lines in every stack dump,
> which stem from how groovy is implemented.  Here's an example in an
> issue I submitted: http://jira.codehaus.org/browse/GROOVY-2944.  I
> have other issues, but these are the two big ones.
>
> Better solution?  Well you can always use Ruby to do Java builds using
> a Ruby Gem called antwrap.  Here's an example of a simple build I did
> in JRuby: http://pastie.org/323131
> It's interpreted so you can leverage your whole code base and write
> clever code to do whatever you can imagine.  Ruby has a much easier,
> more powerful File API than Groovy or Java, which is huge for builds.
>
> Another Ruby option, this is more maven-ish with a bunch of dependency
> management features - Buildr http://incubator.apache.org/buildr/ .
> This project scares me at first glance.  I looked at it and got
> confused pretty quickly.  I actually discovered the AntWrap gem trying
> to figure out Buildr and decided AntWrap was good enough for my
> purposes.
>
> The power of a scripting language is huge.  I wish Sun would endorse
> some sort of scripting(interpreted) language as the official java
> scripting language.  I say scripting instead of "dynamic" in this case
> because I think being interpreted is very important, much more so than
> duck typing or dynamic features.  But I don't really see any scripting
> language really making the big move on the JVM because Sun is
> remaining agnostic.  They still do all their builds with Ant (yuck).
> They don't leverage a scripting language for any automation (like
> maybe administrating glassfish?).
>
> Perhaps JavaFx script could be leveraged and made into the language
> I'm thinking about?  The start is there... the syntax is quite a bit
> nicer than Java.  It's not interpreted, but it could be.
>
> any thoughts on this?  Am I the only one who sees this need (it seems
> like it)...
>
>
> >
>



-- 
[]'s
Marcelo Takeshi Fukushima

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javaposse@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to