[
http://jira.codehaus.org/browse/MNG-2363?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=180938#action_180938
]
Jan Labrie commented on MNG-2363:
---------------------------------
Like probably many others we also stumbled over this issue. The combination of
a multi-pom project and file based activation does not work, because properties
like ${basedir} are not expanded. This is pretty annoying because it is a
common setup and there is no workaround. What also did not help was that
help:effective-pom reports a pom.xml in which ${basedir} *is* expanded.
I made a fix for this issue. The best solution would be that a relative
filename in the activation would be evaluated in respect to the location of the
pom file that contains the activation. I didn't code this, because in
FileProfileActivator.java I was not able to retrieve the project or the
location of the current pom file. Because of this I also could not do an
expansion of ${basedir}, because I didn't know what to replace it with. Later I
read in a comment from Nicolas de Loof that the activation of profiles is
calculated very early in the lifecycle, and that there is not even an active
project at that moment.
So I coded a solution in the reading of the xml file. Whenever a model is read
from a local file all occurences of ${basedir} are replaced by the foldername
of the pom file. This is coded in DefaultMavenProjectBuilder.readModel().
I have attached the file. It is based on trunk 2.0.x (It reports that it is
2.0.11.SNAPSHOT).
There are some remarks to be made:
- The replacement is not done for pom files that are adressed by a URL instead
of a local file.
- The replacement is done with String.ReplaceAll(). This might be a little too
rough.
> <profile><activation><file><exists/> does not work in a multi-project build
> ---------------------------------------------------------------------------
>
> Key: MNG-2363
> URL: http://jira.codehaus.org/browse/MNG-2363
> Project: Maven 2
> Issue Type: Bug
> Components: Profiles
> Reporter: David Boden
> Priority: Critical
> Fix For: 2.2.x
>
> Attachments: problemactivation.zip, screenshot-1.jpg
>
>
> I would expect each subproject to have the profile turned on or off depending
> on whether ${basedir}/file-to-check-for exists.
> Instead, during a multi-project build the profile is either on or off
> depending on whether the file exists relative to the *aggregator pom*. The
> decision is made once.
> Variable substitution doesn't work, so I can't explicitly use
> <exists>${basedir}/file-to-check-for</exists> or any variation on this theme
> to workaround the bug.
> Some background to my particular problem. I have 10 modules to build. Some of
> them are GUI modules and contain a file called plugin.xml in the subproject
> directory. I want to package these up specially and sign them, ready for
> deployment to webstart. The other modules are shared and server code and I
> don't want these packaged in the same way. So, I've got a dependency in my
> *parent* pom file which activates a profile called "guibundle" if a
> plugin.xml file exists in the subproject directory.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira