Maven

Each of Maven's features needs to be compared against different products as it encompasses a number of pieces of functionality. It's also worth noting that some of these tools could be integrated into Maven via plugins. (For completeness, Maven 3/Aether and Maven Artifact Resolver Ant Tasks/Aether Ant Tasks must be added to the comparison.)

Build Tools

Should compare Ant, Maven 1.x, Maven 2.x, make

Dependency Management

 

Maven 2.x

Maven 2.x Ant Tasks

Ivy

Maven 1.x

Transitive dependencies

(tick)

(tick)

(tick)

(error)

Dependency ranges

(tick) bounded, unbounded, multiple ranges

(tick)

(tick) up to next major version (2.0+)

(error)

Version comparison

(tick) defined order (eg 0.10 > 0.9), pluggable version syntax planned, falls back to string comparison

(tick)

(tick) defined order (eg 0.10 > 0.9), pluggable version syntax planned, falls back to string comparison

(error)

Conflict Resolution

(tick) nearest, latest-time (snapshots), fixed. planned: newest (latest-revision), oldest, fail

(tick)

(tick) all, latest-time, latest-revision, fixed

(error)

Snapshots

(tick) configurable timestamping, build numbering, update frequency

(tick)

(tick) can publish continuous integration build

(tick) auto-updated timestamped build

Profiles

(tick) pluggable activators, as well as by id, jdk, OS, sys property for whole build process including deps

(tick) no manual activation

(tick) single id configuration (must be defined consistently across all ivy configurations)

(error)

Scope

(tick) defines known scopes for sensible build defaults, combined during transitivity

(tick)

(error) can use configurations in a limited way for this

(error)

Non-java dependencies

(tick) pluggable

(tick)

(tick)

(tick)

Filtering

(tick) can exclude dependencies from tree, apply a version globally

(tick) when using POM

(tick) can exclude dependencies from tree, apply a version globally

N/A

Multiproject

(tick) order determined by dependencies, and build outputs can be used as the dependencies (even if not built to a jar)

(error)

(tick) ordering and reuse of build artifacts as dependencies

(error)

System scoped (tools.jar)

(tick) can be used transitively

(tick)

(error)

(tick) jar overrides

Dependency reports

(tick) currently basic tabulated report

(error)

(tick) multi-page tabulated report

(tick)

Eclipse plugin

(info) in progress

(error)

(tick)

(tick) Mevenide

IDEA plugin

(info) in progress

(error)

(error)

(tick) Mevenide

NetBeans plugin

(info) in progress

(error)

(error)

(tick) Mevenide

Eclipse .classpath generation

(tick)

(error)

(tick)

(tick)

IDEA .iml generation

(tick)

(error)

(error)

(tick)

NetBeans project generation

(tick)

(error)

(error)

(error)

Deployment

(tick) pluggable: file, scp, scpexe, http, ftp, sftp, scm

(tick)

(tick) file only. planned: vfs based

(tick) file, scp, scpexe, ftp, sftp

Mirrors

(tick) can use mirror for any repository, automatic mirroring planned

(error) planned

(error)

(error)

Maven 1.x Repository (non-transitive)

(tick)

(tick)

(tick)

(tick)

Maven 2.x Repository (transitive)

(tick)

(tick)

(error)

(error)

Ivyrep (transitive)

(error)

(error)

(tick)

(error)

Multiple repository support

(tick) separate snapshot and release repository, per project repository

(tick)

(tick) per project repository

(tick) can list multiple repositories from build

Configurable repository layout

(tick)

(tick)

(tick)

(error)

 

Maven 1.x Repository

Maven 2.x Repository

Ivyrep

Size

8000+

8000+

30

Immediate Synchronize of OSS Releases

(tick)

(tick)

(error)

Artifacts

(tick)

(tick)

(error)

User uploads to central repository

(tick)

(tick)

(error)

Open sandbox repository

(error)

(error)

(tick)

Site Management

 

Maven 2.x

Maven 1.x

Anakia

Plain text input

(tick)

(error)

(error)

XDoc input

(tick)

(tick)

(tick)

Docbook input

(tick)

(tick)

(error)

XHTML input

(tick)

(tick)

(error)

FAQ input

(tick)

(tick)

(error)

Confluence input

(info) in progress

(error)

(error)

XHTML output

(tick)

(tick)

(tick)

PDF output

(error) planned

(tick)

(error)

Reporting integration

(tick)

(tick)

(error)

Streaming

(tick)

(error)

(error)

Skinnable

(tick) Velocity

(tick) JSL

(question)

Furniture customisation

(tick)

(tick)

(tick)

Breadcrumbs

(error)

(tick)

(error)

 

3 comments

  1. Xavier Hanin

    A very detailed comparison, interesting to see.

    But the few corrections/details about ivy where finally too long to be posted as a comment, so they can finally be found on my weblog: http://jroller.com/comments/xavierhanin?anchor=maven_features_comparison

  2. Brett Porter

    Incorporated all these changes.

  3. Gilles Scokart

    The comparaison is rather old, but still mostly valid, except about the scope : Ivy has a very flexible way to define scopes (called configurations).  You can define yourself the transitvity, whe scope that includes each other, etc.  You can define compile, runtime, test scope, or any kind of scope you can imagine.

    Also, Ivyrep doesn't exist anymore.  

 

  • No labels