You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Brian Fox (JIRA)" <ji...@codehaus.org> on 2010/08/10 16:20:32 UTC

[jira] Closed: (MDEP-259) copy-dependencies fails with "Error copying artifact from .../target/classes to .../classes"

     [ http://jira.codehaus.org/browse/MDEP-259?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Brian Fox closed MDEP-259.
--------------------------

    Resolution: Won't Fix

This is a problem with Maven Core, not the dependency plugin. It will only happen if you are doing just mvn compile or maybe mvn test on the multimodule build, because those modules haven't been packaged yet. When this happens, the core hands the plugin a reference to the classes folder, but we expect a jar. Instead of running mvn compile/test just always use mvn install and you'll be fine. Alternatively, bind the dependency plugin to the package phase and it won't run unless you do at least mvn package in which case all of the modules will be jar'd already.

The _only_ workaround we could do in the plugin is to cause the dependency plugin to detect that it has a folder and either:
1) ignore this dependency
2) go and attempt to create a jar from the classes

Neither of these is a correct fix because in 1, the resulting folder/archive would be incomplete and 2 we have no way of reliably constructing the jar exactly as it would be done in its own pom.

> copy-dependencies fails with "Error copying artifact from .../target/classes to .../classes"
> --------------------------------------------------------------------------------------------
>
>                 Key: MDEP-259
>                 URL: http://jira.codehaus.org/browse/MDEP-259
>             Project: Maven 2.x Dependency Plugin
>          Issue Type: Bug
>          Components: copy-dependencies
>    Affects Versions: 2.0, 2.1
>         Environment: Maven 2.0.9
> maven-dependency-plugin 2.0, 2.1 or 2.2-SNAPSHOT (r922616)
>            Reporter: Andreas Veithen
>            Assignee: Brian Fox
>         Attachments: patch.txt, test-project.zip
>
>
> Scenario:
> * dependency:copy-dependencies is used to copy a dependency artifact that is part of the same multi-module build.
> * The compile phase is executed, but not the package phase.
> An example of this scenario is using maven-eclipse-plugin to import a Maven project with generated test (re)sources. In this case, one would execute "mvn generate-test-resources eclipse:eclipse" to make sure that the generated (re)sources are imported into the workspace (by default, maven-eclipse-plugin executes generate-sources and generate-resources, but not generate-test-sources and generate-test-resources).
> Result: The build fails with the following error:
> [INFO] [dependency:copy-dependencies {execution: default}]
> [INFO] Copying classes to /Users/veithen/dev/maven/axis/axis2/modules/fastinfoset/target/repo/modules/classes
> [INFO] ------------------------------------------------------------------------
> [ERROR] BUILD ERROR
> [INFO] ------------------------------------------------------------------------
> [INFO] Error copying artifact from /Users/veithen/dev/maven/axis/axis2/modules/addressing/target/classes to /Users/veithen/dev/maven/axis/axis2/modules/fastinfoset/target/repo/modules/classes
> Embedded error: /Users/veithen/dev/maven/axis/axis2/modules/addressing/target/classes (No such file or directory)
> Steps to reproduce:
> * Unpack the attached test project and build the entire project once with "mvn install".
> * Execute "mvn generate-resources" from the root project -> success (because the compile phase is not executed)
> * Execute "mvn package" from the root project -> success (because the package phase is executed)
> * Execute "mvn generate-test-resources" from the root project -> fails (because the compile phase is executed, but not the package phase)
> * Execute "mvn generate-test-resources" in project2 -> success (because the dependency is not part of the same build)
> Root cause analysis: In the scenario described above (compile phase executed, package phase not executed), Artifact#getFile() points to the target/classes directory instead of the output artifact. dependency:copy-dependencies doesn't detect this situation and blindly attempts to execute the copy operation. This fails with the error message shown above. Note that even if the operation didn't fail, it would produce an unexpected result.
> Proposed fix (see attached patch): Change maven-dependency-plugin to detect this situation and let it replace the original Artifact object by a new one resolved from the repository (which would then refer to the artifact generated by a previous build, exactly as in the mvn generate-resources case).

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