[ 
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

        

Reply via email to