Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.0.4, 2.0.5
-
Fix Version/s: 3.0-alpha-1
-
Component/s: Dependencies
-
Labels:None
-
Environment:Not platform dependent
-
Complexity:Intermediate
-
Testcase included:yes
-
Patch Submitted:Yes
-
Number of attachments :
Description
I have prepared simple project to show the bug.
It contains three artifacts:
| -root --- ejb3 --- client |
Client depends on ejb3 with <type>ejb-client</type>.
The local and remote repository must not contain those artifacts.
When I do "mvn -X compile" (or even integration-tests) on root project I will
get those errors:
...
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-resources-plugin:2.2:resources' -->
[DEBUG] (f) filters = []
[DEBUG] (f) outputDirectory = /home/ptab/m2/bug/root/client/target/classes
[DEBUG] (f) project = org.apache.maven.project.MavenProject@f6a17377
[DEBUG] (f) resources = [org.apache.maven.model.Resource@4f34b07e]
[DEBUG] – end configuration –
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[DEBUG] pl.waw.tabor:client:jar:1.0-SNAPSHOT (selected for null)
[DEBUG] junit:junit:jar:3.8.1:test (selected for test)
[DEBUG] pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT:compile (selected for compile)
[DEBUG] Skipping disabled repository Newitech-repository
[DEBUG] Skipping disabled repository central
[DEBUG] ejb3: using locally installed snapshot
[DEBUG] Trying repository Newitech-snapshots-repository
Downloading: scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots/pl/waw/tabor/ejb3/1.0-SNAPSHOT/ejb3-1.0-SNAPSHOT-client.jar
[WARNING] Unable to get resource 'pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT' from repository Newitech-snapshots-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots)
[DEBUG] Skipping disabled repository Newitech-repository
[DEBUG] Trying repository Newitech-publiczne
Downloading: scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne//pl/waw/tabor/ejb3/1.0-SNAPSHOT/ejb3-1.0-SNAPSHOT-client.jar
[WARNING] Unable to get resource 'pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT' from repository Newitech-publiczne (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne/)
[DEBUG] Trying repository Maven Snapshots
Downloading: http://people.apache.org/maven-snapshot-repository/pl/waw/tabor/ejb3/1.0-SNAPSHOT/ejb3-1.0-SNAPSHOT-client.jar
[WARNING] Unable to get resource 'pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT' from repository Maven Snapshots (http://people.apache.org/maven-snapshot-repository)
[DEBUG] Trying repository codehausSnapshots
Downloading: http://snapshots.maven.codehaus.org/maven2/pl/waw/tabor/ejb3/1.0-SNAPSHOT/ejb3-1.0-SNAPSHOT-client.jar
[WARNING] Unable to get resource 'pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT' from repository codehausSnapshots (http://snapshots.maven.codehaus.org/maven2)
[DEBUG] Skipping disabled repository central
[DEBUG] Unable to download the artifact from any repository
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=pl.waw.tabor -DartifactId=ejb3 \
-Dversion=1.0-SNAPSHOT -Dpackaging=ejb-client -Dfile=/path/to/file
Path to dependency:
1) pl.waw.tabor:client:jar:1.0-SNAPSHOT
2) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT
pl.waw.tabor:ejb3:ejb-client:1.0-SNAPSHOT
from the specified remote repositories:
Maven Snapshots (http://people.apache.org/maven-snapshot-repository),
central (http://repo1.maven.org/maven2),
codehausSnapshots (http://snapshots.maven.codehaus.org/maven2),
Newitech-snapshots-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots),
Newitech-publiczne (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne/),
Newitech-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=pl.waw.tabor -DartifactId=ejb3 \
-Dversion=1.0-SNAPSHOT -Dpackaging=ejb-client -Dfile=/path/to/file
Path to dependency:
1) pl.waw.tabor:client:jar:1.0-SNAPSHOT
2) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT
----------
1 required artifact is missing.
for artifact:
pl.waw.tabor:client:jar:1.0-SNAPSHOT
from the specified remote repositories:
Maven Snapshots (http://people.apache.org/maven-snapshot-repository),
central (http://repo1.maven.org/maven2),
codehausSnapshots (http://snapshots.maven.codehaus.org/maven2),
Newitech-snapshots-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots),
Newitech-publiczne (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne/),
Newitech-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech)
[INFO] ------------------------------------------------------------------------
[DEBUG] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: Missing:
----------
1) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=pl.waw.tabor -DartifactId=ejb3 \
-Dversion=1.0-SNAPSHOT -Dpackaging=ejb-client -Dfile=/path/to/file
Path to dependency:
1) pl.waw.tabor:client:jar:1.0-SNAPSHOT
2) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT
----------
1 required artifact is missing.
for artifact:
pl.waw.tabor:client:jar:1.0-SNAPSHOT
from the specified remote repositories:
Maven Snapshots (http://people.apache.org/maven-snapshot-repository),
central (http://repo1.maven.org/maven2),
codehausSnapshots (http://snapshots.maven.codehaus.org/maven2),
Newitech-snapshots-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots),
Newitech-publiczne (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne/),
Newitech-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:556)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:330)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:123)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:272)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException: Missing:
----------
1) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=pl.waw.tabor -DartifactId=ejb3 \
-Dversion=1.0-SNAPSHOT -Dpackaging=ejb-client -Dfile=/path/to/file
Path to dependency:
1) pl.waw.tabor:client:jar:1.0-SNAPSHOT
2) pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT
----------
1 required artifact is missing.
for artifact:
pl.waw.tabor:client:jar:1.0-SNAPSHOT
from the specified remote repositories:
Maven Snapshots (http://people.apache.org/maven-snapshot-repository),
central (http://repo1.maven.org/maven2),
codehausSnapshots (http://snapshots.maven.codehaus.org/maven2),
Newitech-snapshots-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech-snapshots),
Newitech-publiczne (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/publiczne/),
Newitech-repository (scp://ivy.newitech.com/opt/maven/public_html/repozytoria/newitech)
at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:305)
at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:272)
at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:243)
at org.apache.maven.plugin.DefaultPluginManager.resolveTransitiveDependencies(DefaultPluginManager.java:1142)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:374)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
... 16 more
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8 seconds
[INFO] Finished at: Mon Mar 12 20:34:44 CET 2007
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------
==================================================================================================
I am sure, the most important line from this log is:
[DEBUG] pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT:compile (selected for compile)
I would like to see
"[DEBUG] active project artifact:
artifact = pl.waw.tabor:ejb3:ejb-client:client:1.0-SNAPSHOT:compile;
project: org.apache.maven.project.MavenProject@e82f22ea (selected for compile)"
instead.
If I do "mvn install" -> The source will compile (because ejb3-client artifact will be found in local repository).
I investigated the source, and found that the reason is in org.apache.maven.project.MavenProject class in
replaceWithActiveArtifact (method):
The line "if (( ref.getArtifact().getDependencyConflictId().equals( pluginArtifact.getDependencyConflictId() ))"
fails because ref.getArtifact().getDependencyConflictId() is pl.waw.tabor:ejb3:ejb-client:client and
pluginArtifact.getDependencyConflictId() is pl.waw.tabor:ejb3.
It is my workaround. I know - it is very messy.
If you helped me - where is the best place to correct it - i would prepare a proper
patch.
Index: components/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
===================================================================
— components/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (wersja 517335)
+++ components/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (kopia robocza)
@@ -1582,7 +1582,14 @@
if ( ref != null && ref.getArtifact() != null )
{
// TODO: if not matching, we should get the correct artifact from that project (attached)
- if ( ref.getArtifact().getDependencyConflictId().equals( pluginArtifact.getDependencyConflictId() ) )
+ if (( ref.getArtifact().getDependencyConflictId().equals( pluginArtifact.getDependencyConflictId() ))
+ || (
+ (ref.getArtifactId().equals(pluginArtifact.getArtifactId()))&&
+ (ref.getGroupId().equals(pluginArtifact.getGroupId()))&&
+ (ref.getArtifact().getType().equals("ejb"))&&
+ (pluginArtifact.getType().equals("ejb-client"))
+ )
+ )
{
// if the project artifact doesn't exist, don't use it. We haven't built that far.
if ( ref.getArtifact().getFile() != null && ref.getArtifact().getFile().exists() )
Issue Links
- depends upon
-
MJAR-75
[PATCH] Wrong artifact type attached to the project by the test-jar goal
-
- is related to
-
MRELEASE-161
If there is more than one artifact with the same artifactId in dependencyManagement only the first one is updated
-
-
MNG-3420
In a reactor, attached artifacts with classifier should be used when generating classpath, instead of the whole output directory of the related project
-
- relates to
-
MNG-2921
ejb-client dependency no longer resolved in reactor build
-
-
MNG-2959
Version defined in dependencyManagement section of parent pom overwrites version of current artifact
-
-
MNG-2045
Maven can't compile against sibling test-jar dependency in multiproject (Test Attached)
-
-
MNG-3043
Allow 'mvn test' to work with test-jar dependencies in a reactor
-
-
MNG-4248
CLONE -Maven can't compile against sibling test-jar dependency in multiproject (Test Attached)
-
-
MRELEASE-326
Doens't resolve multiproject dependencies properly
-