Tuesday, 22 December 2009

Java Dependency Management with Ivy - Part II

In Part I of Java Dependency Management with Ivy I looked at basic Ivy usage and configuration using Ant and the Ivy Eclipse plugin, IvyDE. I demonstrated how Ivy can be used to download modules (dependencies) from a repository, such as the Maven Repository and cache them locally, negating the need to check them into a source control system.

However there are some scenarios where the Maven repository is not suitable:

1.Your development team may not have direct access to the Maven repository or you want to prevent each module from being downloaded more than once.
2.You may want to restrict or specify the modules your development team has access to.
3.You want to use libraries such Microsoft's SQL Server JDBC driver or your own propriety JARs that are not hosted in the Maven repository.

Ivy and IvyDE can be easily configured to look at custom repositories. In this article I will discuss a way of setting up a local public repository and a shared repository, and how to reference them from Ivy and IvyDE.

In my previous article I also explained the difference between a repository and a cache. As I am going to look at repositories in a little more detail it is worth repeating the distinction. A cache is usually local. When you do a build, Ivy checks the cache to see if you already have the required modules. If you do, it uses them, otherwise it looks in one or more repositories for them and downloads them. Repositories can be local, but tend to be remote on the internet or on a central server in an organisation. Maven is a repository and stores a large number of modules.



  1. Instead of all this wheel reinvention, why not just use a repository manager?

  2. I don't think I am reinventing the wheel, but yes part III will be about repository managers such as Nexus when I find the time to write it.