diff --git a/independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java b/independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java index e3e3f40a08350..62a063bbcc508 100644 --- a/independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java +++ b/independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java @@ -192,8 +192,26 @@ public boolean visitLeave(DependencyNode node) { child.accept(visitor); } + final ArtifactDescriptorResult appArtifactDescr = mvn.resolveDescriptor(toAetherArtifact(appArtifact)); + if (managedDeps == null) { + managedDeps = appArtifactDescr.getManagedDependencies(); + } else { + final List mergedManagedDeps = new ArrayList<>(managedDeps.size()); + final Set mergedKeys = new HashSet<>(managedDeps.size()); + for (Dependency dep : managedDeps) { + mergedKeys.add(getKey(dep.getArtifact())); + mergedManagedDeps.add(dep); + } + for (Dependency dep : appArtifactDescr.getManagedDependencies()) { + final Artifact artifact = dep.getArtifact(); + if (!mergedKeys.contains(getKey(artifact))) { + mergedManagedDeps.add(dep); + } + } + managedDeps = mergedManagedDeps; + } final List repos = mvn.aggregateRepositories(managedRepos, - mvn.newResolutionRepositories(mvn.resolveDescriptor(toAetherArtifact(appArtifact)).getRepositories())); + mvn.newResolutionRepositories(appArtifactDescr.getRepositories())); final DeploymentInjectingDependencyVisitor deploymentInjector = new DeploymentInjectingDependencyVisitor(mvn, managedDeps, repos, appBuilder); @@ -292,6 +310,11 @@ public void install(AppArtifact appArtifact, Path localPath) throws AppModelReso appArtifact.getType(), appArtifact.getVersion(), Collections.emptyMap(), localPath.toFile())); } + private AppArtifactKey getKey(final Artifact artifact) { + return new AppArtifactKey(artifact.getGroupId(), artifact.getArtifactId(), + artifact.getClassifier(), artifact.getExtension()); + } + private String getEarliest(final VersionRangeResult rangeResult) { final List versions = rangeResult.getVersions(); if (versions.isEmpty()) { diff --git a/independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/resolver/maven/DeploymentInjectingDependencyVisitor.java b/independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/resolver/maven/DeploymentInjectingDependencyVisitor.java index 9179365e745e1..aeff975c091f2 100644 --- a/independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/resolver/maven/DeploymentInjectingDependencyVisitor.java +++ b/independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/resolver/maven/DeploymentInjectingDependencyVisitor.java @@ -126,7 +126,6 @@ private void processPlatformArtifact(DependencyNode node, Path descriptor) throw node.setData(QUARKUS_DEPLOYMENT_ARTIFACT, deploymentArtifact); runtimeNodes.add(node); Dependency dependency = new Dependency(node.getArtifact(), JavaScopes.COMPILE); - managedDeps.add(dependency); runtimeExtensionDeps.add(dependency); managedDeps.add(new Dependency(deploymentArtifact, JavaScopes.COMPILE)); } diff --git a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java index 0d2f2491eebd1..96ef48355efe3 100644 --- a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java +++ b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java @@ -9,6 +9,7 @@ import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; @@ -106,7 +107,7 @@ private ExtensionState doJavaStart(ExtensionContext context) throws Throwable { } CuratedApplication curatedApplication = runnerBuilder .setTest(true) - .setProjectRoot(new File("").toPath()) + .setProjectRoot(Files.isDirectory(appClassLocation) ? new File("").toPath() : null) .build() .bootstrap();