diff --git a/its/core-integration-tests/src/test/java/org/apache/maven/integrationtests/MavenITmng3380ManagedRelocatedTransdepsTest.java b/its/core-integration-tests/src/test/java/org/apache/maven/integrationtests/MavenITmng3380ManagedRelocatedTransdepsTest.java
new file mode 100755
index 0000000000..c9a2fc992f
--- /dev/null
+++ b/its/core-integration-tests/src/test/java/org/apache/maven/integrationtests/MavenITmng3380ManagedRelocatedTransdepsTest.java
@@ -0,0 +1,262 @@
+package org.apache.maven.integrationtests;
+
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+/**
+ * expected project.getArtifacts() results:
+ *
+ * direct-dependency-groupId:direct-dependency-artifactId:jar:1:compile
+ * transitive-dependency-new-groupId:transitive-dependency-artifactId:jar:2:compile
+ * other-groupId:other-artifactId-a:jar:1:compile
+ * other-groupId:other-artifactId-b:jar:1:compile
+ *
+ * org.apache.maven.project.MavenProject#.getArtifacts() is called with goal:
+ * org.apache.maven.its:mng3380.plugin:mng-3380-test
+ *
+ */
+public class MavenITmng3380ManagedRelocatedTransdepsTest
+ extends AbstractMavenIntegrationTestCase {
+ public MavenITmng3380ManagedRelocatedTransdepsTest()
+ throws InvalidVersionSpecificationException {
+ super("(2.0.9,)");
+ }
+
+ public void testitMNG3380() throws Exception {
+
+ // compute test directory
+ File testDir = ResourceExtractor.simpleExtractResources(getClass(),
+ "/mng-3380-managedRelocatedTransdeps");
+
+ Verifier verifier = new Verifier(testDir.getAbsolutePath());
+
+ deleteArtifacts( verifier );
+
+ installDependencies( testDir );
+
+ String path = testDir.getAbsolutePath() //
+ + "/projects/root-groupId/root-artifactId/1";
+ verifier = new Verifier(path);
+ verifier.executeGoal("package");
+
+ // verify no errors so far
+ verifier.verifyErrorFreeLog();
+ verifier.resetStreams();
+ }
+
+ private void installDependencies( File testDir )
+ throws Exception
+ {
+ // install projects
+ String path = testDir.getAbsolutePath() //
+ + "/projects/other-groupId/other-artifactId-c/1";
+ Verifier verifier = new Verifier(path);
+ verifier.executeGoal("install");
+
+ path = testDir.getAbsolutePath() //
+ + "/projects/other-groupId/other-artifactId-b/1";
+ verifier = new Verifier(path);
+ verifier.executeGoal("install");
+
+ path = testDir.getAbsolutePath() //
+ + "/projects/other-groupId/other-artifactId-a/1";
+ verifier = new Verifier(path);
+ verifier.executeGoal("install");
+
+ path = testDir.getAbsolutePath() //
+ + "/projects/transitive-dependency-old-groupId/transitive-dependency-artifactId/1";
+ verifier = new Verifier(path);
+ verifier.executeGoal("install");
+
+ path = testDir.getAbsolutePath() //
+ + "/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/1";
+ verifier = new Verifier(path);
+ verifier.executeGoal("install");
+
+ path = testDir.getAbsolutePath() //
+ + "/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/2";
+ verifier = new Verifier(path);
+ verifier.executeGoal("install");
+
+ path = testDir.getAbsolutePath() //
+ + "/projects/direct-dependency-groupId/direct-dependency-artifactId/1";
+ verifier = new Verifier(path);
+ verifier.executeGoal("install");
+ }
+
+ private void deleteArtifacts( Verifier verifier )
+ throws Exception
+ {
+ // delete projects
+ verifier.deleteArtifact( //
+ "other-groupId", //
+ "other-artifactId-c", //
+ "1", //
+ "jar");
+ verifier.deleteArtifact( //
+ "other-groupId", //
+ "other-artifactId-c", //
+ "1", //
+ "pom");
+ verifier.assertArtifactNotPresent( //
+ "other-groupId", //
+ "other-artifactId-c", //
+ "1", //
+ "jar");
+ verifier.assertArtifactNotPresent( //
+ "other-groupId", //
+ "other-artifactId-c", //
+ "1", //
+ "pom");
+
+ verifier.deleteArtifact( //
+ "other-groupId", //
+ "other-artifactId-b", //
+ "1", //
+ "jar");
+ verifier.deleteArtifact( //
+ "other-groupId", //
+ "other-artifactId-b", //
+ "1", //
+ "pom");
+ verifier.assertArtifactNotPresent( //
+ "other-groupId", //
+ "other-artifactId-b", //
+ "1", //
+ "jar");
+ verifier.assertArtifactNotPresent( //
+ "other-groupId", //
+ "other-artifactId-b", //
+ "1", //
+ "pom");
+
+ verifier.deleteArtifact( //
+ "other-groupId", //
+ "other-artifactId-a", //
+ "1", //
+ "jar");
+ verifier.deleteArtifact( //
+ "other-groupId", //
+ "other-artifactId-a", //
+ "1", //
+ "pom");
+ verifier.assertArtifactNotPresent( //
+ "other-groupId", //
+ "other-artifactId-a", //
+ "1", //
+ "jar");
+ verifier.assertArtifactNotPresent( //
+ "other-groupId", //
+ "other-artifactId-a", //
+ "1", //
+ "pom");
+
+ verifier.deleteArtifact( //
+ "transitive-dependency-old-groupId", //
+ "transitive-dependency-artifactId", //
+ "1", //
+ "jar");
+ verifier.deleteArtifact( //
+ "transitive-dependency-old-groupId", //
+ "transitive-dependency-artifactId", //
+ "1", //
+ "pom");
+ verifier.assertArtifactNotPresent( //
+ "transitive-dependency-old-groupId", //
+ "transitive-dependency-artifactId", //
+ "1", //
+ "jar");
+ verifier.assertArtifactNotPresent( //
+ "transitive-dependency-old-groupId", //
+ "transitive-dependency-artifactId", //
+ "1", //
+ "pom");
+
+ verifier.deleteArtifact( //
+ "transitive-dependency-new-groupId", //
+ "transitive-dependency-artifactId", //
+ "1", //
+ "jar");
+ verifier.deleteArtifact( //
+ "transitive-dependency-new-groupId", //
+ "transitive-dependency-artifactId", //
+ "1", //
+ "pom");
+ verifier.assertArtifactNotPresent( //
+ "transitive-dependency-new-groupId", //
+ "transitive-dependency-artifactId", //
+ "1", //
+ "jar");
+ verifier.assertArtifactNotPresent( //
+ "transitive-dependency-new-groupId", //
+ "transitive-dependency-artifactId", //
+ "1", //
+ "pom");
+
+ verifier.deleteArtifact( //
+ "transitive-dependency-new-groupId", //
+ "transitive-dependency-artifactId", //
+ "2", //
+ "jar");
+ verifier.deleteArtifact( //
+ "transitive-dependency-new-groupId", //
+ "transitive-dependency-artifactId", //
+ "2", //
+ "pom");
+ verifier.assertArtifactNotPresent( //
+ "transitive-dependency-new-groupId", //
+ "transitive-dependency-artifactId", //
+ "2", //
+ "jar");
+ verifier.assertArtifactNotPresent( //
+ "transitive-dependency-new-groupId", //
+ "transitive-dependency-artifactId", //
+ "2", //
+ "pom");
+
+ verifier.deleteArtifact( //
+ "direct-dependency-groupId", //
+ "direct-dependency-artifactId", //
+ "1", //
+ "jar");
+ verifier.deleteArtifact( //
+ "direct-dependency-groupId", //
+ "direct-dependency-artifactId", //
+ "1", //
+ "pom");
+ verifier.assertArtifactNotPresent( //
+ "direct-dependency-groupId", //
+ "direct-dependency-artifactId", //
+ "1", //
+ "jar");
+ verifier.assertArtifactNotPresent( //
+ "direct-dependency-groupId", //
+ "direct-dependency-artifactId", //
+ "1", //
+ "pom");
+
+ verifier.deleteArtifact( //
+ "root-groupId", //
+ "root-artifactId", //
+ "1", //
+ "jar");
+ verifier.deleteArtifact( //
+ "root-groupId", //
+ "root-artifactId", //
+ "1", //
+ "pom");
+ verifier.assertArtifactNotPresent( //
+ "root-groupId", //
+ "root-artifactId", //
+ "1", //
+ "jar");
+ verifier.assertArtifactNotPresent( //
+ "root-groupId", //
+ "root-artifactId", //
+ "1", //
+ "pom");
+ }
+}
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/direct-dependency-groupId/direct-dependency-artifactId/1/pom.xml b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/direct-dependency-groupId/direct-dependency-artifactId/1/pom.xml
new file mode 100755
index 0000000000..6a1dfbdfc6
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/direct-dependency-groupId/direct-dependency-artifactId/1/pom.xml
@@ -0,0 +1,13 @@
+
+ 4.0.0
+ direct-dependency-groupId
+ direct-dependency-artifactId
+ 1
+
+
+ transitive-dependency-old-groupId
+ transitive-dependency-artifactId
+ 1
+
+
+
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-a/1/pom.xml b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-a/1/pom.xml
new file mode 100755
index 0000000000..b5ae6541c8
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-a/1/pom.xml
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ other-groupId
+ other-artifactId-a
+ 1
+
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-a/1/src/main/java/tests/OtherComponentA.java b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-a/1/src/main/java/tests/OtherComponentA.java
new file mode 100644
index 0000000000..6d94ca6cc2
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-a/1/src/main/java/tests/OtherComponentA.java
@@ -0,0 +1,4 @@
+package tests;
+
+public class OtherComponentA
+{}
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-b/1/pom.xml b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-b/1/pom.xml
new file mode 100755
index 0000000000..6ee72df687
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-b/1/pom.xml
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ other-groupId
+ other-artifactId-b
+ 1
+
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-b/1/src/main/java/tests/OtherComponentB.java b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-b/1/src/main/java/tests/OtherComponentB.java
new file mode 100644
index 0000000000..6ea6b6da83
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-b/1/src/main/java/tests/OtherComponentB.java
@@ -0,0 +1,4 @@
+package tests;
+
+public class OtherComponentB
+{}
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-c/1/pom.xml b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-c/1/pom.xml
new file mode 100755
index 0000000000..9d36c38483
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-c/1/pom.xml
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ other-groupId
+ other-artifactId-c
+ 1
+
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-c/1/src/main/java/tests/OtherComponentC.java b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-c/1/src/main/java/tests/OtherComponentC.java
new file mode 100644
index 0000000000..09ad3f0e4e
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/other-groupId/other-artifactId-c/1/src/main/java/tests/OtherComponentC.java
@@ -0,0 +1,4 @@
+package tests;
+
+public class OtherComponentC
+{}
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/root-groupId/root-artifactId/1/pom.xml b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/root-groupId/root-artifactId/1/pom.xml
new file mode 100755
index 0000000000..c1b837baf7
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/root-groupId/root-artifactId/1/pom.xml
@@ -0,0 +1,28 @@
+
+ 4.0.0
+ root-groupId
+ root-artifactId
+ 1
+
+
+ direct-dependency-groupId
+ direct-dependency-artifactId
+ 1
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
+
+
+ transitive-dependency-new-groupId
+ transitive-dependency-artifactId
+ 2
+
+
+
+
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/root-groupId/root-artifactId/1/src/main/java/tests/RootComponent.java b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/root-groupId/root-artifactId/1/src/main/java/tests/RootComponent.java
new file mode 100644
index 0000000000..f85b9d7067
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/root-groupId/root-artifactId/1/src/main/java/tests/RootComponent.java
@@ -0,0 +1,7 @@
+package tests;
+
+import tests.TransitiveComponent2;
+import tests.OtherComponentA;
+import tests.OtherComponentB;
+
+public class RootComponent{}
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/root-groupId/root-artifactId/1/src/test/java/tests/DependencyManagementTest.java b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/root-groupId/root-artifactId/1/src/test/java/tests/DependencyManagementTest.java
new file mode 100644
index 0000000000..638933169f
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/root-groupId/root-artifactId/1/src/test/java/tests/DependencyManagementTest.java
@@ -0,0 +1,18 @@
+package tests;
+
+import junit.framework.TestCase;
+
+public class DependencyManagementTest
+ extends TestCase
+{
+
+ public void testWrongTransitiveArtifactIsAvoided()
+ {
+ assertNull( Thread.currentThread().getContextClassLoader().getResource( "tests/TransitiveComponent1.class" ) );
+ }
+
+ public void testOtherCArtifactIsAvoided()
+ {
+ assertNull( Thread.currentThread().getContextClassLoader().getResource( "tests/OtherComponentC.class" ) );
+ }
+}
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/1/pom.xml b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/1/pom.xml
new file mode 100755
index 0000000000..7ce8a2fb0f
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/1/pom.xml
@@ -0,0 +1,18 @@
+
+ 4.0.0
+ transitive-dependency-new-groupId
+ transitive-dependency-artifactId
+ 1
+
+
+ other-groupId
+ other-artifactId-a
+ 1
+
+
+ other-groupId
+ other-artifactId-c
+ 1
+
+
+
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/1/src/main/java/tests/TransitiveComponent1.java b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/1/src/main/java/tests/TransitiveComponent1.java
new file mode 100644
index 0000000000..c08108355c
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/1/src/main/java/tests/TransitiveComponent1.java
@@ -0,0 +1,7 @@
+package tests;
+
+import tests.OtherComponentA;
+import tests.OtherComponentC;
+
+public class TransitiveComponent1
+{}
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/2/pom.xml b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/2/pom.xml
new file mode 100755
index 0000000000..71d9fcd68e
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/2/pom.xml
@@ -0,0 +1,18 @@
+
+ 4.0.0
+ transitive-dependency-new-groupId
+ transitive-dependency-artifactId
+ 2
+
+
+ other-groupId
+ other-artifactId-a
+ 1
+
+
+ other-groupId
+ other-artifactId-b
+ 1
+
+
+
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/2/src/main/java/tests/TransitiveComponent2.java b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/2/src/main/java/tests/TransitiveComponent2.java
new file mode 100644
index 0000000000..a7521f3152
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-new-groupId/transitive-dependency-artifactId/2/src/main/java/tests/TransitiveComponent2.java
@@ -0,0 +1,7 @@
+package tests;
+
+import tests.OtherComponentA;
+import tests.OtherComponentB;
+
+public class TransitiveComponent2
+{}
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-old-groupId/transitive-dependency-artifactId/1/pom.xml b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-old-groupId/transitive-dependency-artifactId/1/pom.xml
new file mode 100755
index 0000000000..e3b9a499a1
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-old-groupId/transitive-dependency-artifactId/1/pom.xml
@@ -0,0 +1,11 @@
+
+ 4.0.0
+ transitive-dependency-old-groupId
+ transitive-dependency-artifactId
+ 1
+
+
+ transitive-dependency-new-groupId
+
+
+
\ No newline at end of file
diff --git a/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-old-groupId/transitive-dependency-artifactId/1/src/main/java/tests/TransitiveOldComponent1.java b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-old-groupId/transitive-dependency-artifactId/1/src/main/java/tests/TransitiveOldComponent1.java
new file mode 100644
index 0000000000..0213598174
--- /dev/null
+++ b/its/core-integration-tests/src/test/resources/mng-3380-managedRelocatedTransdeps/projects/transitive-dependency-old-groupId/transitive-dependency-artifactId/1/src/main/java/tests/TransitiveOldComponent1.java
@@ -0,0 +1,4 @@
+package tests;
+
+public class TransitiveOldComponent1
+{}
\ No newline at end of file