Hello,

This may be OT for the thread but I figured the Felix community is the
community most likely impacted by this behavior in Maven.  I'm hopeful that
somebody has a workaround or can provide some guidance on how they
approached this problem.

My project is partitioned into smaller efforts.  Each individual smaller
effort can be considered a subproject.  When reusable logic is identified we
often place it into a "commons" module that is shared between the smaller
efforts.  Each smaller effort is described by a feature XML file that uses
the mvn protocol.  From a directory perspective you can think of our project
like this:

ProjectX:
  - commons/trunk
  - commons/tags/1.0.0
  - commons/tags/2.0.0
  - app1/trunk
  - app1/tags/1.0.0
  - app1/tags/2.0.0
  - app2/trunk
  - app2/tags/1.0.0
  - app2/tags/2.0.0

At the ProjectX directory we have a pom.xml that references submodules
commons/trunk, app1/trunk, and app2/trunk.

The problem I have arises when app1 and app2 use different versions of the
commons module.  If app1 references commons/1.0.0 as a dependency and app2
references commons/2.0.0 as a dependency I'm in trouble because my top level
pom.xml can't build both versions of commons in the same reactor.

The Maven community doesn't view this as limiting.  They ask: why would you
ever have different sub-projects that use different versions of a common
module?

In the pluggable OSGi world this is very natural - app1 can safely use
version 1.0.0 of commons while app2 can safely use version 2.0.0.

So my question to the Felix community is:  how do you approach this problem?

One approach is to mangle the artifactId at the commons level and append the
version (e.g. commons-1.0.0).  That would certainly work but ...

Another approach might involve the use of Maven profiles to determine which
version of commons to build (e.g. if I'm the app2 profile I should build
version 2.0.0 of commons but if I'm the app1 profile I should build version
1.0.0).

Or yet another approach might be to create entirely separate pom.xml files
at the ProjectX level for app1 and app2.  That seems kinda scary though.

Does anyone have any ideas?  Or does anyone have another way of looking at
this problem that might shed some light on a decent solution?


Thanks for your time,

-Chris

Reply via email to