I'm confused regarding Ivy, Maven and Archiva - they all seem to be trying to solve similar problems.
I think that I'm right in thinking that Ivy retrofits Maven-like functionality to Ant (i.e. Ant + Ivy ~= Maven)? But I'm unclear about what Archiva adds (if anything) to Ant + Ivy and/or Maven. When would I use (say) Ivy, when would I use Archiva and when would a combination make sense (if at all)?
Background: We need to put some kind of dependency management and build artefact archival in place. Our source is cross-language (a mix of C++, Java, Scala, Ruby and Python) and our build process is cross-platform (Linux, Windows, OSX, Android, iOS, QNX). We have an existing scons-based build system which is somewhat intricate. Ideally we want to add dependency management and artefact archival to this, rather than (say) moving wholesale to Maven.
Originally one of the big advantages Maven had over Ant was the ease of dependency management, but you are right in that Ivy has now come along to fit that gap, meaning that Ant+Ivy provides some similar functionality to Maven in terms of build and dependency management.
Now that both provide dependency management, one of the big differentiating factors is Mavens use of "Convention over configuration". Some people prefer Ant as it is more flexible/powerful for custom task/builds where as some people prefer maven as its a lot more succinct and simpler.
It will depend on the complexity of your builds, if you have basic Java builds then Maven might be more suited as the pom files (Maven build filds) are pretty simple, but if you need to do a lot of custom specific stuff you may well end up having Ant scripts to perform (also, if you already have one system in place there isnt necessarily a huge advantage of swapping).
Archiva is something different from Ant+Ivy/Maven - Archiva is a webapplication that provides a UI to easily manage all the JAR files in your repository. Generally they can be quite nice for your build team to easily control and monitor all the JARs that are being used across your project. You would use Archiva hand-in-hand with Maven to manage your central maven repository.
Also worth noting is that from my experience, there are some alternatives to Archiva such as Nexus and Artifactory, which may be a better fit (archiva wouldnt be my first choice in repo management) - check out this discussion of differences between nexus/artifactory Should we use Nexus or Artifactory for a Maven Repo?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With