Re: Maven Optimism

From: Anjo Krank (kran..ogicunited.com)
Date: Wed Jul 09 2008 - 00:16:38 EDT

  • Next message: Anjo Krank: "Re: Maven Optimism"

    Am 09.07.2008 um 02:05 schrieb Pierce T.Wetter III:

    > To give you some examples, for the current Wonder Ant builds,
    > between build.xml files, generic.xml, build.properties
    > files, .classpath and .patternset files, there are 5320 lines of
    > build configuration information in the current Wonder build. The
    > equivalent pom files are 2447 lines, which is not only more
    > efficient, but includes more information to help avoid the
    > jarmeggedon/jarhell problem.

    Rubbish.

    First, the build files are *way* lighter:

    macbook:build ak$ wc build-doc.xml build.xml default.properties ~/
    Wonder/build.xml generic.xml
          158 383 7291 build-doc.xml
          814 2168 40453 build.xml
           23 64 524 default.properties
           88 241 3358 /Volumes/Home/Wonder/build.xml
          502 1547 24262 generic.xml
         1585 4403 75888 total

    All other files are simply a convenience in case some nut wants to
    build the individual jars. In particular, all individual build files
    are only symlinks to Build/build/build-<type>.xml and derive their
    values from a build.properties in that directory.

    Also, you shouldn't *really* count the ~/Wonder/build.xml which is
    again only a convenience that allows you to build only the stages you
    want without using "ant -f Build/build/generic.xml foo.bar foo.baz"

    These 1500 lines build *all* of Wonder in the way you specify, with
    the values you specify and the order you specify. *And* they allow you
    to specify your own builds with just a build property and a symlink to
    a build file. You could also use includes or or add your own
    customizations, but the tasks they do are very light.

    Attached below is an example.

    Second, the individual build files build way more projects:

    macbook:Wonder ak$ find . -name build.xml|wc
           67 67 2775
    macbook:Wonder ak$ find . -name pom.xml|wc
           56 56 2121

    So while the difference is only 600 lines:

    macbook:Wonder ak$ wc `find . -name pom.xml`|tail -1
         2152 2438 66007 total

    It's still more than zero (if someone would consider this a measure at
    all).

    Thirdly from what I've seen, someone needs to change all these files
    whenever we bump a version. All of Ulrichs commits so far where these
    xml fixes. All *I* need to do is set one property.

    Fourth, adding a project typically requires five lines in Build/build/
    build.xml to add it to the correct group and some props. I might
    consider moving these props from the build file to a build.properties
    and making Build/build/build.xml only specify the inter-related deps.

    I'll grant you one point for the commons-logging versions, but I use
    neither ERJGroups or EROpenID. If I were and I'd be bothered, I'd
    figure out a way to keep them using only one.

    So far we've seen that maven is neither more terse nor more powerful
    (at least in a way that would mean something to me).

    The other issues I have with it is that I actually *need* the
    flexibility in deployment structure. In some projects I *don't* want
    all-embedded builds as that stuff goes out of hand with 7 apps*all the
    frameworks. The resulting release tops 250M. So I want some of them
    embed only some jars. Show me how this works with maven *without*
    writing any "goals" or "mojos".

    So in summary, maven may or may not be nice. But I've been building
    Wonder with the build files for 7 years now and they haven't really
    changed a lot in this time. They do the roughly the same as some 20MB
    tool chain where you *still* have to write java plugins for.

    I'll leave the conclusions to you.

    Cheers, Anjo

    Example:

    <project name="FrameworkBuild" default="all" basedir=".">
         <xmlproperty file=".project"/>
         <property name="project.name" value="${projectDescription.name}" />
         <property file="build.properties" />

         <target name="clean">
             <ant antFile="Build/build/build.xml" target="$
    {project.name}.all" dir="../../../">
                 <property name="build.action" value="clean" />
             </ant>
         </target>
         <target name="build">
             <ant antFile="Build/build/build.xml" target="$
    {project.name}.all" dir="../../../">
                 <property name="build.action" value="build" />
             </ant>
         </target>
         <target name="install">
             <ant antFile="Build/build/build.xml" target="$
    {project.name}.all" dir="../../../">
                 <property name="build.action" value="install" />
             </ant>
         </target>
         <target name="web">
             <ant antFile="Build/build/build.xml" target="$
    {project.name}.all" dir="../../../">
                 <property name="build.action" value="web" />
             </ant>
         </target>
         <target name="all" depends="clean, build, install, web" />
    </project>



    This archive was generated by hypermail 2.0.0 : Wed Jul 09 2008 - 00:17:50 EDT