Maven repository, adding sources

Now as part of the upload of your jar to the maven repository at
ibiblio you can include the sources, making them available to all your
users, helping you to find and solve bugs, hopefully ;).

For instance, to generate the eclipse project for a maven 2 project with the sources attached, you can run

mvn eclipse:eclipse -Declipse.downloadSources=true

Read the instructions to make an upload bundle, now with sources!

Using transitive dependencies the right way

So we have this cool feature called transitive dependencies in maven 2. For those that don’t know yet that allows me to say:

  • me: I want struts 1.2.8 in my webapp, do it!
  • maven: sure, I add struts-1.2.8, but as I know you’re a bit lazy I’ll add for you commons-beanutils, commons-digester, jakarta oro,… because I know you’ll need them
  • me: cool, I still remember those days when I had to download the jars by hand and put them in a folder in cvs and then create a classpath in ant,…
  • maven: no problem

But then something happens with some of the jars:

  • me: I want to use spring-hibernate 1.2.5
  • maven: you again? I’ll add spring-hibernate-1.2.5, but as it depends in other stuff, I’ll add also spring-orm and its dependencies, hibernate-annotations, hibernate 2, hibernate 3,…
  • me: wait! how is that you’re adding hibernate 2 and 3? I want to use just 3!!
  • maven: well, if you wanna use all the features in spring-hibernate you’ll need both or you may get a ClassNotFoundException. There’s no way I can know what will you use and what not.
  • me: let me think, if I had created a spring-hibernate2 and spring-hibernate3, I could depend on spring-hibernate3 and everything would be automatic
  • maven: yes, but shit happens, and that’s not how it was released
  • me: ok, then let’s tag hibernate 2 and 3 as optional in the spring-hibernate pom in ibiblio, that way I don’t need to exclude hibernate2, although I’ll need to add also hibernate3 to my dependencies.
  • maven: that will be hard for a lazy bastard like you
  • me: stfu!

To sum up this is my advice: the days of downloading jars and adding them to a folder ended time ago, don’t be worried about creating more smaller jars that explicitly define their dependencies with no doubt, meaning that you’ll always know the requirements of a piece of software. Avoid big jars that depend on everything.

(Thanks to all the people that contributed to this entry teaching me the wonders of the english cosswords. You’re more than you think ;) )