Antoine Levy-Lambert wrote:
Hi,
I am interested by this thread, as the project I am working for might need a
tool able to manage inter-project dependencies and a repository.
Has anyone compared maven and ivy ? And what about dpml ?
Regards,
Antoine
Antoine,
the forthcoming second edition of Java Development with Ant will have a
whole chapter on library management using the maven2 tasks, consuming
stuff from the repository, producing stuff in there as a way of gluing
stuff together. I will send you a draft chapter if you promise to
correct all the mistakes :)
Right now library management is something we have not built into Ant.
For a few months there was some repository stuff in CVS, but I pulled it
as I didnt have it right, and felt that people who knew what they were
doing (maven2, ivy) could handle it better.
I have many issues with the quality of the m2 poms, they often pull in
too much stuff, stuff you end up having to exclude a lot of stuff you
dont need, or you end up pulling around too much baggage. Here is my
code to create a pom for a soap stack
<target name="m2-make-pom" depends="m2-init"
<echo message="Creating Pom ${target.pom}" level="verbose"/>
<echoxml file="${target.pom}">
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>${m2.groupID}</groupId>
<artifactId>${artifact.name}</artifactId>
<packaging>jar</packaging>
<version>${Version}</version>
<dependencies>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>${commons-httpclient.version}</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>${commons-logging.version}</version>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>${xerces.version}</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xmlParserAPIs</artifactId>
<version>${xerces.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>${commons-logging.version}</version>
</dependency>
<dependency>
<groupId>servletapi</groupId>
<artifactId>servletapi</artifactId>
<version>${servletapi.version}</version>
</dependency>
<dependency>
<groupId>xom</groupId>
<artifactId>xom</artifactId>
<version>${xom.version}</version>
<exclusions>
<exclusion>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
</exclusion>
<exclusion>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
</exclusion>
<exclusion>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
</exclusion>
<exclusion>
<groupId>jaxme</groupId>
<artifactId>jaxme</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
</echoxml>
</target>
I save this to a file then use it in the m2 tasks and to publish the
artifact itself.
I am also not over-happy with the M2 ant tasks. They have the feel of a
bit of an afterthought, so there are no unit tests, sometimes they ship
broken (as in m2 2.0.1), and they are a bit clunky to use. Error
messaging is particularly bad. The underlying cause is that they are a
very thin wrapper around the maven wagon code, and not coupled that well
to ant. Someone could sit down and make them much smoother, which is
something I may have to do myself.
In their defence, they do work, I use them not only to fetch stuff, but
to publish things. And now that a lot of the sun jars have snuck over
into the OSS repository from glassfish, you can even get mail.jar and
activation.jar via the tasks. Property-driven library switching is nice
indeed. If a new version of a library comes out, to test build against
it you edit your build.properties, rebuild and retest, and, if happy,
update the SCM-managed libraries.properties file.
-steve
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]