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

Joshua Pollak updated MNG-3559:
-------------------------------

    Attachment: ActiveProjectTestJar-2.0.9.patch

Here is a patch I think fixes the problem. The patch is against 2.0.9.

The problem turns out to be that MavenProject.replaceWithActiveArtifact() 
doesn't recognize the "test-jar" dependency as a active project artifact 
because moduleA's packaging is "jar", not "test-jar" (obviously). What I've 
done is added a specific case to check if the dependency is of type test-jar 
and the scope of the dependency is "test". If so, the patch creates and 
ActiveProjectArtifact() and replaces the File inside with:

new File(ref.getModelBuild().getTestOutputDirectory())

This doesn't allow production code to depend on another modules test's, but it 
does allow sibling tests to depend on another modules tests.

> Multi-Module Project: module that depends on sibling test jar cannot execute 
> test-compile without install of sibling first
> --------------------------------------------------------------------------------------------------------------------------
>
>                 Key: MNG-3559
>                 URL: http://jira.codehaus.org/browse/MNG-3559
>             Project: Maven 2
>          Issue Type: Bug
>          Components: Bootstrap & Build
>    Affects Versions: 2.0.8, 2.0.9
>            Reporter: Joshua Pollak
>         Attachments: ActiveProjectTestJar-2.0.9.patch, demoPom.tgz
>
>
> We have project with a few sibling modules:
> * Project
> ----moduleA
>           +-- /src/main/java (Common Code)
>           +-- /src/test/java    (Common Test Framework)
> ----moduleB
> ----moduleC
>           +-- /src/main/java (Production Code, depends on moduleA Common code)
>           +-- /src/test/java    (Production Test Framework, depends on 
> moduleA Common Test Framework)
> I dont think there is anything wrong with this project in concept. moduleC's 
> "main" code depends son moduleA's "main" code, and moduleC's test code 
> depends on moduleA's test code.
> This works if I run 'mvn install', but for rapid development, we often run 
> single unit tests and need to be able to run "mvn test" from the top level 
> project, which fails.
> For an example, download the attached project and run "mvn test" from the 
> trunk directory. It will fail with the error pasted below. Then, run "mvn 
> install" and everything works ok. We should be able to run our unit tests 
> without having to install first.
> [INFO] 
> ------------------------------------------------------------------------
> [ERROR] BUILD ERROR
> [INFO] 
> ------------------------------------------------------------------------
> [INFO] Failed to resolve artifact.
> Missing:
> ----------
> 1) com.kiva.demoPom:moduleA:test-jar:tests:0.0.1-SNAPSHOT
>   Try downloading the file manually from the project website.
>   Then, install it using the command: 
>       mvn install:install-file -DgroupId=com.kiva.demoPom 
> -DartifactId=moduleA -Dversion=0.0.1-SNAPSHOT -Dclassifier=tests 
> -Dpackaging=test-jar -Dfile=/path/to/file
>   Alternatively, if you host your own repository you can deploy the file 
> there: 
>       mvn deploy:deploy-file -DgroupId=com.kiva.demoPom -DartifactId=moduleA 
> -Dversion=0.0.1-SNAPSHOT -Dclassifier=tests -Dpackaging=test-jar 
> -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
>   Path to dependency: 
>       1) com.kiva.demoPom:moduleC:jar:0.0.1-SNAPSHOT
>       2) com.kiva.demoPom:moduleA:test-jar:tests:0.0.1-SNAPSHOT
> ----------
> 1 required artifact is missing.
> for artifact: 
>   com.kiva.demoPom:moduleC:jar:0.0.1-SNAPSHOT
> from the specified remote repositories:
>   central (http://repo1.maven.org/maven2)

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