1 / 20

Java Build Tool Comparison

Java Build Tool Comparison. Desired FeaturesThe ContendersAnt IvyMavenGradleBuildrOthersResults MatrixSubjective EvaluationWhich Would You Choose? . Desired Features. Dependency managementVersioningCompile Java code, build jarsExecute tests and report results, fail build on failed test

chastity
Download Presentation

Java Build Tool Comparison

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    1. Java Build Tool Comparison HJUG - April 29th, 2009 John Tyler

    2. Java Build Tool Comparison Desired Features The Contenders Ant + Ivy Maven Gradle Buildr Others Results Matrix Subjective Evaluation Which Would You Choose?

    3. Desired Features Dependency management Versioning Compile Java code, build jars Execute tests and report results, fail build on failed tests Run quality-check tools (PMD, Findbugs, Checkstyles) File generation (XmlBeans, Xsl, Velocity, AspectJ) Property expansion / token substitution Build vs. deploy vs. release Full control when needed Cross-platform IDE Support Documentation / Support

    4. Ant + Ivy Ant is ubiquitous Java-based build tool Uses XML “script” files Ivy is a dependency manager Artifact repository Dependency resolution, including transitive (Project A -> Hibernate -> Commons-Collections) Sync with external repositories

    5. Ant + Ivy Module dependencies are declared in ivy.xml <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <info organisation=“org.hjug" module=“myModule"/> <dependencies> <dependency org="org.apache" name="ant" rev="1.7.0"/> <dependency org="org.apache" name="axis" rev="1.2rc3"/> <dependency org="org.junit" name="junit" rev="4.4"/> </dependencies> </ivy-module>

    6. Ant + Ivy Add this to your Ant buildfile (build.xml) <project xmlns:ivy="antlib:org.apache.ivy.ant" name="pdk" default="default" basedir="."> … <!-- Ivy Taskdefs --> <path id="ivy.lib.path"> <fileset dir="C:/java-tools/apache-ivy-2.0.0" includes="*.jar"/> </path> <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/> <!-- Reference Ivy settings --> <ivy:settings file="${basedir}/../ivysettings.xml"/> <target name="ivy.resolve" description="--> retrieve dependencies with ivy"> <ivy:retrieve pattern=“${lib.dir}/[conf]/[artifact].[ext]”/> </target> <target name="ivy.publish" description="--> publish artifacts to local repository"> <ivy:publish resolver=“local” pubrevision=“${version}”> <artifacts pattern=“dist/[artifact].[ext]”/> </ivy:publish> </target>

    7. Ant + Ivy Build steps defined and executed with Ant Dependencies managed with Ivy Ant targets to install, retrieve artifacts from Ivy repository

    8. Ant + Ivy

    9. Maven Project is defined by POM (Project Object Model) Projects can contain sub-projects (modules) Based on recommended project structure (e.g. src/main/java, src/main/resources, src/test/java, …) Artifact-focused (i.e. What files does this build produce?) Heavy emphasis on default configuration

    10. Maven Build Lifecycle is defined as Phases, which execute sequentially Validate Compile Test Package Integration-test Verify Install Deploy

    11. Maven Each Phase can be made up of zero or more Goals (tasks) Project-specific configuration involves binding specific goals to specific phases (beyond the default settings) Extensible plugin system (called Mojos) Java-based or Ant-based Comprehensive set of third-party plugins available

    12. Gradle Built on top of Ant + Ivy Build DSL written in Groovy Uses Groovy AntBuilder ant.compile, ant.jar Plugins define common tasks to build different types of projects java, groovy, war, …

    13. Gradle Assumes Maven conventions for file locations (drop-in replacement for Maven) Can be altered with the convention object Can use existing Maven or Ivy repositories

    14. Buildr Built on Ruby Rake is similar to Ant (Ruby Make) RubyGems is similar to rpm (package manager, handles dependencies) Build script written in Ruby (internal DSL)

    15. Buildr Pre-defined tasks clean compile build upload install javadoc package test uninstall

    16. Buildr Assumes Maven conventions for file locations (drop-in replacement for Maven) Can be altered Can use existing Maven repositories

    17. Others Gant Rake EasyAnt Custom ?

    18. Results Matrix

    19. Results Matrix cont’d

    20. Subjective Evaluation Ant, Ivy, Maven have been around the longest Restrictive vs. Open philosophy Smart defaults Dependency Management is a Good Thing™ Ant has by far the best documentation and examples available online Gradle is the least mature (but very promising) Buildr is very cool but has potential platform issues (Ruby vs. JRuby, 64-bit)

    21. Which Would You Choose?

More Related