WTP component file is sometimes missing libraries if the POM lists multiple 
artifact types with the same artifact ID
--------------------------------------------------------------------------------------------------------------------

                 Key: MECLIPSE-217
                 URL: http://jira.codehaus.org/browse/MECLIPSE-217
             Project: Maven 2.x Eclipse Plugin
          Issue Type: Bug
          Components: WTP support
    Affects Versions: 2.3
            Reporter: DJ Gregor
         Attachments: diffs

A number of the projects in our application require not only the binary JAR 
from another project, but also the test JAR.  When generating the Eclipse WTP 
configuration files with the plugin, some of these libraries needed at runtime 
are not put in the component file, and cause the webapp to not be functional.  
The behavior is not always consistent--sometimes all libraries will be there, 
or one or more will be missing.

Here's an example of from our POM (which can be seen in whole here: 
<http://opennms.svn.sourceforge.net/viewvc/opennms/opennms/trunk/opennms-webapp/pom.xml?view=markup>):

    <dependency>
      <groupId>org.opennms</groupId>
      <artifactId>opennms-dao</artifactId>
    </dependency>
    <!-- XXX the required test JARs should be moved into a separate project -->
    <dependency>
      <groupId>org.opennms</groupId>
      <artifactId>opennms-dao</artifactId>
      <version>${project.version}</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>

Notice that we have opennms-dao listed twice, once to get the binary JAR, and 
once for the test JAR.  This works fine with Maven from the command line and 
works fine within Eclipse until we go to deploy a webapp with WTP.

AbstractIdeSupportMojo.doDependencyResolution() keeps a HashSet of projects 
that have already been added to the dependency list in emittedReactorProjectId, 
keyed on the group ID and artifact ID of the project.  Since our project 
requires multiple artifacts of different types from the same project, only one 
dependency makes it into the list that 
AbstractIdeSupportMojo.doDependencyResolution() returns.  This wouldn't be a 
problem, except sometimes instead of our runtime dependency making it in first, 
the dependency that makes it in is the test dependency which later gets thrown 
out by AbstractWtpResourceWriter.writeWarOrEarResources.

The attached patch changes the key used for inserting values into the 
emittedReactorProjectId HashSet to include the artifact type.  The 
EclipseProjectWriter and EclipseClasspathWriter need to only print out unique 
artifact IDs (which are Eclipse projects), so they each keep their own HashSet 
keyed on artifact ID to ensure that an artifact ID is only emitted once.

This patch solves this problem that I've been having on OpenNMS.  I will work 
on unit tests for these changes as I have time.

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