that lets me define the individual versions of *all* dependencies for *all*
projects so that I can say, for example, use *this* version of
commons-beanutils and *that* version of commons-digester to build ***all*** of
the components that are going in to my overall exectable.  I am *so* not
interested in dealing with runtime exceptions because different dependent
packages were compiled against different versions of the dependent libraries.

Can someone please help me understand how to do this with Maven? Without it,
I'm not planning to switch any of my personal or internal-to-Sun projects (even
if the Struts committers decide to switch Struts development itself).

This is actually pretty easy, if I understand you correctly. If you define the Maven property "maven.jar.override" to the value "on", then when resolving dependencies, Maven will check each against a possibly defined override.


For example, the version of Cactus that everyone else in Struts uses doesn't work on Mac OS X. The Cactus CVS head has the patch that works, so in my Struts/maven environment, I have this defined:

maven.jar.override=on
# patched version of cactus related to Mac OS X:
# http://issues.apache.org/bugzilla/show_bug.cgi?id=25266i
maven.jar.cactus-ant=1.6dev-2003-12-07
maven.jar.jakarta-cactus-framework=13-1.6dev

You can use full paths to JARs as well as version numbers. This is detailed here:
http://maven.apache.org/reference/user-guide.html#Overriding_Stated_Dependencies


Properties are defined like so: (http://maven.apache.org/reference/user-guide.html#Properties_Processing):

The properties files in Maven are processed in the following order:

        *        ${project.home}/project.properties
        *       ${project.home}/build.properties
        *       ${user.home}/build.properties

Where the last definition wins. So, Maven moves through this sequence of properties files overridding any previously defined properties with newer definitions. In this sequence your ${user.home}/build.properties has the final say in the list of properties files processed. We will call the list of properties files that Maven processes the standard properties file set.

In addition, System properties are processed after the above chain of properties files are processed. So, a property specified on the CLI using the -Dproperty=value convention will override any previous definition of that property.

So if you wanted to have it universally, you'd define this in "${user.home}/build.properties" but if it were just for a specific project, you'd define it in ${project.home}/build.properties


Did I answer the right question?

Joe
--
Joe Germuska [EMAIL PROTECTED] http://blog.germuska.com "Imagine if every Thursday your shoes exploded if you tied them the usual way. This happens to us all the time with computers, and nobody thinks of complaining."
-- Jef Raskin

Reply via email to