You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Jeff Mills (JIRA)" <ji...@codehaus.org> on 2008/12/02 21:46:19 UTC

[jira] Created: (MJAVADOC-221) test-scoped dependencies sometimes used instead of compile-scoped if group and artifact are the same

test-scoped dependencies sometimes used instead of compile-scoped if group and artifact are the same
----------------------------------------------------------------------------------------------------

                 Key: MJAVADOC-221
                 URL: http://jira.codehaus.org/browse/MJAVADOC-221
             Project: Maven 2.x Javadoc Plugin
          Issue Type: Bug
    Affects Versions: 2.5
         Environment: Maven 2.0.9, WinXP and Redhat Linux
            Reporter: Jeff Mills
            Priority: Minor


I had a build failing because of unresolved classes, but only in the javadoc:javadoc goal, not when compiling.  Debugging showed that the classpath excluded some expected compile-scoped dependencies and replaced them with the test-scoped dependencies that have the same group and artifact IDs but different classifier ("tests").

We have a few modules for which we use the jar:test-jar goal to package the unit test code for re-use by other modules.  So the dependent modules specify 2 dependencies: group:artifact with compile scope and group:artifact:classifer with test scope.  What I discovered was that this plugin uses the one that is specified last, regardless of whether its scope is compile or test.  IOW, I fixed my build by moving my test-scoped dependencies to be before the compile-scoped dependencies.

Example resulting in test jar (moduleA-version-tests.jar) in classpath instead of the main jar (moduleA-version.jar):

<dependency>
  <groupId>com.company.group</groupId>
  <artifactId>moduleA</artifactId>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>com.company.group</groupId>
  <artifactId>moduleA</artifactId>
  <classifier>tests</classifer>
  <scope>test</scope>
</dependency>

Example resulting in correct classpath:

<dependency>
  <groupId>com.company.group</groupId>
  <artifactId>moduleA</artifactId>
  <classifier>tests</classifer>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>com.company.group</groupId>
  <artifactId>moduleA</artifactId>
  <scope>compile</scope>
</dependency>


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

        

[jira] Closed: (MJAVADOC-221) test-scoped dependencies sometimes used instead of compile-scoped if group and artifact are the same

Posted by "Vincent Siveton (JIRA)" <ji...@codehaus.org>.
     [ http://jira.codehaus.org/browse/MJAVADOC-221?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Vincent Siveton closed MJAVADOC-221.
------------------------------------

    Resolution: Not A Bug

The bug comes from MPIR-146, so you need to upgrade to a new version of MPIR

> test-scoped dependencies sometimes used instead of compile-scoped if group and artifact are the same
> ----------------------------------------------------------------------------------------------------
>
>                 Key: MJAVADOC-221
>                 URL: http://jira.codehaus.org/browse/MJAVADOC-221
>             Project: Maven 2.x Javadoc Plugin
>          Issue Type: Bug
>    Affects Versions: 2.5
>         Environment: Maven 2.0.9, WinXP and Redhat Linux
>            Reporter: Jeff Mills
>            Priority: Minor
>
> I had a build failing because of unresolved classes, but only in the javadoc:javadoc goal, not when compiling.  Debugging showed that the classpath excluded some expected compile-scoped dependencies and replaced them with the test-scoped dependencies that have the same group and artifact IDs but different classifier ("tests").
> We have a few modules for which we use the jar:test-jar goal to package the unit test code for re-use by other modules.  So the dependent modules specify 2 dependencies: group:artifact with compile scope and group:artifact:classifer with test scope.  What I discovered was that this plugin uses the one that is specified last, regardless of whether its scope is compile or test.  IOW, I fixed my build by moving my test-scoped dependencies to be before the compile-scoped dependencies.
> Example resulting in test jar (moduleA-version-tests.jar) in classpath instead of the main jar (moduleA-version.jar):
> <dependency>
>   <groupId>com.company.group</groupId>
>   <artifactId>moduleA</artifactId>
>   <scope>compile</scope>
> </dependency>
> <dependency>
>   <groupId>com.company.group</groupId>
>   <artifactId>moduleA</artifactId>
>   <classifier>tests</classifer>
>   <scope>test</scope>
> </dependency>
> Example resulting in correct classpath:
> <dependency>
>   <groupId>com.company.group</groupId>
>   <artifactId>moduleA</artifactId>
>   <classifier>tests</classifer>
>   <scope>test</scope>
> </dependency>
> <dependency>
>   <groupId>com.company.group</groupId>
>   <artifactId>moduleA</artifactId>
>   <scope>compile</scope>
> </dependency>

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

        

[jira] Commented: (MJAVADOC-221) test-scoped dependencies sometimes used instead of compile-scoped if group and artifact are the same

Posted by "Kay Schubert (JIRA)" <ji...@codehaus.org>.
    [ http://jira.codehaus.org/browse/MJAVADOC-221?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=160215#action_160215 ] 

Kay Schubert commented on MJAVADOC-221:
---------------------------------------

We have the same problem. In our case I could trace back the actual origin to the "dependencies"-report of maven-project-info-reports-plugin, specificially org.apache.maven.report.projectinfo.dependencies.Dependencies.mapArtifactFiles(org.apache.maven.shared.dependency.tree.DependencyNode, java.util.Map), line "anode.getArtifact().setFile( projartifact.getFile() );". The culprit is when anode.getArtifact() returns the main jar-artifact, and projartifact is the test-jar-artifact. As you can see, the main jar-artifact's file name is set to that of the test-jar-artifact.

As expected the problem disappeared after removing the "dependencies"-report from the reportSet.

I didn't look any deeper into Dependencies.mapArtifactFiles, so I can't say anything about its correctness. Regardless of that I would suggest that org.apache.maven.report.projectinfo.DependenciesReport.executeReport(java.util.Locale) should pass cloned artifacts to org.apache.maven.report.projectinfo.dependencies.Dependencies, not the originals.

> test-scoped dependencies sometimes used instead of compile-scoped if group and artifact are the same
> ----------------------------------------------------------------------------------------------------
>
>                 Key: MJAVADOC-221
>                 URL: http://jira.codehaus.org/browse/MJAVADOC-221
>             Project: Maven 2.x Javadoc Plugin
>          Issue Type: Bug
>    Affects Versions: 2.5
>         Environment: Maven 2.0.9, WinXP and Redhat Linux
>            Reporter: Jeff Mills
>            Priority: Minor
>
> I had a build failing because of unresolved classes, but only in the javadoc:javadoc goal, not when compiling.  Debugging showed that the classpath excluded some expected compile-scoped dependencies and replaced them with the test-scoped dependencies that have the same group and artifact IDs but different classifier ("tests").
> We have a few modules for which we use the jar:test-jar goal to package the unit test code for re-use by other modules.  So the dependent modules specify 2 dependencies: group:artifact with compile scope and group:artifact:classifer with test scope.  What I discovered was that this plugin uses the one that is specified last, regardless of whether its scope is compile or test.  IOW, I fixed my build by moving my test-scoped dependencies to be before the compile-scoped dependencies.
> Example resulting in test jar (moduleA-version-tests.jar) in classpath instead of the main jar (moduleA-version.jar):
> <dependency>
>   <groupId>com.company.group</groupId>
>   <artifactId>moduleA</artifactId>
>   <scope>compile</scope>
> </dependency>
> <dependency>
>   <groupId>com.company.group</groupId>
>   <artifactId>moduleA</artifactId>
>   <classifier>tests</classifer>
>   <scope>test</scope>
> </dependency>
> Example resulting in correct classpath:
> <dependency>
>   <groupId>com.company.group</groupId>
>   <artifactId>moduleA</artifactId>
>   <classifier>tests</classifer>
>   <scope>test</scope>
> </dependency>
> <dependency>
>   <groupId>com.company.group</groupId>
>   <artifactId>moduleA</artifactId>
>   <scope>compile</scope>
> </dependency>

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