On Dec 14, 2006, at 3:42 AM, Craig McClanahan wrote:

It's just what the POM says, but I don't know how to override it.  In
1.1.1 MyFaces used the "myfaces" groupId and now they use
"org.apache.myfaces".  Because of this Maven doesn't know that my
dependency on MyFaces 1.1.5 should override Shale's dependency on
1.1.1.  I thought I saw a way somewhere to work around that, but I
can't find it now.


Yah, dependencies that rename themselves can definitely be a problem :-(. I
kiboshed the idea of renaming Commons Digester 1.8's group id for
essentially the same issue. The theoretical solution to this is that your downstream dependency (MyFaces in this case) would publish a "redirect" pom
that says any reference to "myfaces:myfaces-api" now referes to "
org.apache.myfaces:myfaces-api" (and the same for the impl jar), but
apparently this is not trivially simple yet with Maven.

That's right, the redirect. I'll look that up and see if I can use it while we're working on the next release.

Ideally, we should be able to incorporate an arbitrary set of Shale modules into a "release", while other modules might be releaseable separtely. Later
on, we need to be able to merge something that becomes mature (say,
shale-tiles), while also being able to omit something that is -- at that
point in time -- undergoing some destabilizing development.

I'm hoping our resident Maven/SVN geniuses can help identify viable
strategies for executing on these ideals. If not, we might have to go with the alternative of a combined release with different quality grades (which
it sounds like Struts2 is going to do).

Let me make sure I understand what we have. Please correct any misunderstandings below.

shale-master.pom - This is the base POM for the whole project. It inherits from an org.apache parent. We only have to release a new version of this if the information contained in it changes, right (i.e. add new committer, mailing list, svn changes, etc.) And we can release it independently of everything else?

shale-parent.pom - The base POM for shale subprojects. It defines the modules, base dependencies, etc. If we release anything (shale- remoting, for example), we also have to release shale-parent, which means we have to release everything, right?

I guess one brute force method to release only certain artifacts would be to remove the modules we don't want to release from the parent POM, then replace them after running the release process. Kinda sucks, but it might work. Before we roll a release at work we have to comment out a bunch of SNAPSHOT plugins in the POM that don't really apply to the released artifacts.

Greg

Reply via email to