[ 
http://jira.codehaus.org/browse/MNG-4985?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=252107#action_252107
 ] 

Wujek commented on MNG-4985:
----------------------------

Thank you for your answer, I think I understand what is meant by that.
So what would be the correct and functioning way of doing what I am trying to 
do with profiles and classifier? It cannot be that rare a case, can it?

The workaround that we use for now is that for qa we disable install, deploy 
and site-deploy as we don't want to mess up the repository. This also means, 
however, that I can go to the web project shown in the use case, build it with 
the qa profile, but what gets packaged inside the war is whatever was built 
last - in the worst case, when certain projects are build separately, without 
using the reactor, the 'qa' war can contain a completely mixed up set of 
libraries, which can be unsynchronized - for example, one module can be a JPA 
module with a unit with a certain name, and other module might expect a 
different name as it was build with a different profile. I see no way to manage 
this, apart from the not-so-nice workaround that to be sure, everything has to 
be build in one go, starting with the umbrella project.
How is this done the maven way?

> Transitive dependencies with classifiers not resolved correctly
> ---------------------------------------------------------------
>
>                 Key: MNG-4985
>                 URL: http://jira.codehaus.org/browse/MNG-4985
>             Project: Maven 2 & 3
>          Issue Type: Bug
>          Components: Dependencies
>    Affects Versions: 3.0.1, 3.0.2
>         Environment: Ubuntu 10.04 64bit, JDK 1.6_23
>            Reporter: Wujek
>            Assignee: Benjamin Bentmann
>            Priority: Critical
>         Attachments: classifiers-test.zip
>
>
> Tested against maven 3.0.1, and the latest 3.0.2. I don't know whether this 
> works for 2.2.1.
> The project described below is attached to this issue.
> I have a multi-module project that has modules: A, B, and C. B depends on A, 
> C depends on B and transitively on A.
> Additionally, there is a web archive that depends on B and C directly and 
> transitively on A:
> I have 2 profiles: dev and qa. They define a single property named 
> 'classifier' - and this property is used in maven jar and war plugins:
> <plugin>
>     <groupId>org.apache.maven.plugins</groupId>
>     <artifactId>maven-jar-plugin</artifactId>
>     <version>2.3.1</version>
>     <configuration>
>         <classifier>${classifier}</classifier>
>     </configuration>
> </plugin>
> <plugin>
>     <groupId>org.apache.maven.plugins</groupId>
>     <artifactId>maven-war-plugin</artifactId>
>     <version>2.1.1</version>
>     <configuration>
>         <classifier>${classifier}</classifier>
>         <failOnMissingWebXml>false</failOnMissingWebXml>
>     </configuration>
> </plugin>
> Thus, depending on the profile, different version of the application is build 
> and installed / deployed (actually not in this demo, as I don't declare any 
> repository to deploy to).
> Supposing none of the modules in any of the profiles has been built, go on 
> and try to build the project with -Pqa turned on. Parent pom is correctly 
> deployed, A is correctly deployed, and so is B. The problem is with module C 
> which has a transitive dependency on A, and somehow it doesn't take the 
> classifier into account:
> [ERROR] Failed to execute goal on project C: Could not resolve dependencies 
> for project test:C:jar:0.0.1-SNAPSHOT: Could not find artifact 
> test:A:jar:*dev*:0.0.1-SNAPSHOT -> [Help 1]
> When I first build everything using the dev profile (which is turned on by 
> default), the build of the qa profile goes Ok. But, when I go to C and invoke 
> 'mvn dependency:tree', I see:
> [INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ C ---
> [INFO] test:C:jar:0.0.1-SNAPSHOT
> [INFO] \- test:B:jar:qa:0.0.1-SNAPSHOT:compile
> [INFO]    \- test:A:jar:*dev*:0.0.1-SNAPSHOT:compile
> As can be seen, the transitive dependency used an invalid classifier.
> However, I can't use the workaround that I build dev and then qa, as in my 
> current project we have a web module that packages these jars inside 
> WEB-INF/lib - and the transitive dependencies are packaged with invalid 
> qualifiers. Please check out the jars that are packages within WEB-INF/lib of 
> the generated war file - it packages a qa jar only for the direct dependency. 
> Here is the output of 'mvn dependency:tree -Pqa':
> [INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ web ---
> [INFO] test:web:war:0.0.1-SNAPSHOT
> [INFO] +- test:C:jar:qa:0.0.1-SNAPSHOT:compile
> [INFO] |  \- test:B:jar:*dev*:0.0.1-SNAPSHOT:compile
> [INFO] +- test:B:jar:qa:0.0.1-SNAPSHOT:compile
> [INFO] |  \- test:A:jar:*dev*:0.0.1-SNAPSHOT:compile
> [INFO] \- org.apache.geronimo.specs:geronimo-servlet_3.0_spec:jar:1.0:provided
> It gets even worse - there is also a direct dependency on B, so when the -Pqa 
> switch is used, both B-qa.jar and B-dev.jar end up in the war file - dev is 
> the transitive dep, qa the direct one.
> For us this means disaster - mixing of jars from other profiles means the 
> jars use different JMS resources, different JDBC pools and so on. Supposing B 
> is a JPA module, we end up with the same persistence unit twice, with the 
> same name, but using different pools (one for devs, one for qa).
> Setting at critical as I don't know any workaround.
> If I am doing something wrong, this means I don't understand profiles and 
> classifiers correctly. In this case, please be generous and point me to the 
> right resources.

-- 
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