From 0c85b27c4046c894c181ffea367fca503d1c682c Mon Sep 17 00:00:00 2001 From: Alexey Loubyansky Date: Fri, 10 Sep 2021 14:21:32 +0200 Subject: [PATCH] * Added flags to the AppDependency to indicate whether a dependency is a direct one, an extension, belongs to the runtime and/or deployment CP * Simplified the AppModel by mering all the dependencies into a single list --- .../CascadingConditionalDependenciesTest.java | 18 ++- ...onalDependencyWithSingleConditionTest.java | 9 +- ...tionalDependencyWithTwoConditionsTest.java | 12 +- ...tionalDependencyWithTwoConditionsTest.java | 6 +- .../BasicExecutableOutputOutcomeTest.java | 2 +- .../runnerjar/ExcludeExtensionDepsTest.java | 19 ++- .../runnerjar/ExcludeLibDepsTest.java | 19 ++- .../ExecutableOutputOutcomeTestBase.java | 2 + .../runnerjar/OptionalDepsTest.java | 12 +- .../runnerjar/ProvidedExtensionDepsTest.java | 6 +- .../gradle/builder/QuarkusModelBuilder.java | 136 +++++++++--------- .../bootstrap/model/AppDependency.java | 93 +++++++----- .../io/quarkus/bootstrap/model/AppModel.java | 69 +++++---- .../bootstrap/model/PersistentAppModel.java | 44 ++---- .../bootstrap/model/gradle/Dependency.java | 1 + .../bootstrap/model/gradle/QuarkusModel.java | 6 +- .../model/gradle/impl/DependencyImpl.java | 54 ++++--- .../model/gradle/impl/QuarkusModelImpl.java | 26 +--- .../resolver/CollectDependenciesBase.java | 39 +++-- .../ManagedReplacedDependencyTestCase.java | 3 +- .../SimpleReplacedDependencyTestCase.java | 18 +-- ...verridesPomPropertyDependencyTestCase.java | 3 +- .../VersionPropertyDependencyTestCase.java | 3 +- .../CheckForLatestMajorUpdatesTest.java | 17 ++- .../CheckForLatestMicroUpdatesTest.java | 17 ++- .../CheckForLatestMinorUpdatesTest.java | 17 ++- .../update/CheckForNextMajorUpdatesTest.java | 17 ++- .../update/CheckForNextMicroUpdatesTest.java | 17 ++- .../update/CheckForNextMinorUpdatesTest.java | 17 ++- .../update/CheckUpdatesDisableTest.java | 17 ++- .../UpdateToNextMicroAndPersistStateTest.java | 17 ++- .../bootstrap/util/QuarkusModelHelper.java | 55 +++---- .../resolver/BootstrapAppModelResolver.java | 18 +-- .../DeploymentInjectingDependencyVisitor.java | 32 +++-- .../src/main/resources/.quarkus/config.yaml | 2 +- 35 files changed, 474 insertions(+), 369 deletions(-) diff --git a/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/CascadingConditionalDependenciesTest.java b/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/CascadingConditionalDependenciesTest.java index 2ce5655986f9e..2ce27781e6820 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/CascadingConditionalDependenciesTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/CascadingConditionalDependenciesTest.java @@ -68,17 +68,23 @@ protected TsArtifact modelApp() { protected void assertDeploymentDeps(List deploymentDeps) throws Exception { final Set expected = new HashSet<>(); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-c-deployment", TsArtifact.DEFAULT_VERSION), "compile")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-c-deployment", TsArtifact.DEFAULT_VERSION), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-a-deployment", TsArtifact.DEFAULT_VERSION), "compile")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-a-deployment", TsArtifact.DEFAULT_VERSION), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-b-deployment", TsArtifact.DEFAULT_VERSION), "runtime")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-b-deployment", TsArtifact.DEFAULT_VERSION), "runtime", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-d-deployment", TsArtifact.DEFAULT_VERSION), "runtime")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-d-deployment", TsArtifact.DEFAULT_VERSION), "runtime", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-e-deployment", TsArtifact.DEFAULT_VERSION), "compile")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-e-deployment", TsArtifact.DEFAULT_VERSION), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-f-deployment", TsArtifact.DEFAULT_VERSION), "runtime")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-f-deployment", TsArtifact.DEFAULT_VERSION), "runtime", + AppDependency.DEPLOYMENT_CP_FLAG)); assertEquals(expected, new HashSet<>(deploymentDeps)); } } diff --git a/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/ConditionalDependencyWithSingleConditionTest.java b/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/ConditionalDependencyWithSingleConditionTest.java index 6c38fb3c0231b..edf1d892fb095 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/ConditionalDependencyWithSingleConditionTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/ConditionalDependencyWithSingleConditionTest.java @@ -43,11 +43,14 @@ protected void assertAppModel(AppModel appModel) throws Exception { final List deploymentDeps = appModel.getDeploymentDependencies(); final Set expected = new HashSet<>(); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-c-deployment", TsArtifact.DEFAULT_VERSION), "compile")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-c-deployment", TsArtifact.DEFAULT_VERSION), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-a-deployment", TsArtifact.DEFAULT_VERSION), "compile")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-a-deployment", TsArtifact.DEFAULT_VERSION), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-b-deployment", TsArtifact.DEFAULT_VERSION), "runtime")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-b-deployment", TsArtifact.DEFAULT_VERSION), "runtime", + AppDependency.DEPLOYMENT_CP_FLAG)); assertEquals(expected, new HashSet<>(deploymentDeps)); } } diff --git a/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/ConditionalDependencyWithTwoConditionsTest.java b/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/ConditionalDependencyWithTwoConditionsTest.java index 5f346bb2f7e0f..413dd7c5f4622 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/ConditionalDependencyWithTwoConditionsTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/ConditionalDependencyWithTwoConditionsTest.java @@ -44,13 +44,17 @@ protected TsArtifact modelApp() { protected void assertDeploymentDeps(List deploymentDeps) throws Exception { final Set expected = new HashSet<>(); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-c-deployment", TsArtifact.DEFAULT_VERSION), "compile")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-c-deployment", TsArtifact.DEFAULT_VERSION), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-a-deployment", TsArtifact.DEFAULT_VERSION), "compile")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-a-deployment", TsArtifact.DEFAULT_VERSION), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-b-deployment", TsArtifact.DEFAULT_VERSION), "runtime")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-b-deployment", TsArtifact.DEFAULT_VERSION), "runtime", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-d-deployment", TsArtifact.DEFAULT_VERSION), "compile")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-d-deployment", TsArtifact.DEFAULT_VERSION), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); assertEquals(expected, new HashSet<>(deploymentDeps)); } } diff --git a/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/UnsatisfiedConditionalDependencyWithTwoConditionsTest.java b/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/UnsatisfiedConditionalDependencyWithTwoConditionsTest.java index 264845f459be3..bb95bab51d86f 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/UnsatisfiedConditionalDependencyWithTwoConditionsTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/conditionaldeps/UnsatisfiedConditionalDependencyWithTwoConditionsTest.java @@ -41,9 +41,11 @@ protected TsArtifact modelApp() { protected void assertDeploymentDeps(List deploymentDeps) throws Exception { final Set expected = new HashSet<>(); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-c-deployment", TsArtifact.DEFAULT_VERSION), "compile")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-c-deployment", TsArtifact.DEFAULT_VERSION), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add(new AppDependency( - new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-a-deployment", TsArtifact.DEFAULT_VERSION), "compile")); + new AppArtifact(TsArtifact.DEFAULT_GROUP_ID, "ext-a-deployment", TsArtifact.DEFAULT_VERSION), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); assertEquals(expected, new HashSet<>(deploymentDeps)); } } diff --git a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/BasicExecutableOutputOutcomeTest.java b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/BasicExecutableOutputOutcomeTest.java index 194cd875253eb..e7cf9feaeace5 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/BasicExecutableOutputOutcomeTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/BasicExecutableOutputOutcomeTest.java @@ -31,7 +31,7 @@ protected TsArtifact modelApp() { final TsArtifact providedDep = TsArtifact.jar("provided-dep"); final TsArtifact optionalDep = TsArtifact.jar("optional-dep"); - addToExpectedLib(optionalDep); // TODO should direct optional deps be included? + addToExpectedLib(optionalDep); final TsArtifact directRtDep = TsArtifact.jar("runtime-dep"); addToExpectedLib(directRtDep); diff --git a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExcludeExtensionDepsTest.java b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExcludeExtensionDepsTest.java index 980bf49c1282d..634ef1ca41717 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExcludeExtensionDepsTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExcludeExtensionDepsTest.java @@ -69,16 +69,23 @@ protected TsArtifact modelApp() { protected void assertAppModel(AppModel appModel) throws Exception { final Set expectedDeployDeps = new HashSet<>(); expectedDeployDeps - .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-deployment", "1"), "compile")); + .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-deployment", "1"), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); assertEquals(expectedDeployDeps, new HashSet<>(appModel.getDeploymentDependencies())); final Set expectedRuntimeDeps = new HashSet<>(); - expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b", "1"), "compile")); - expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-dep-1", "1"), "compile")); - expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-dep-2", "1"), "compile")); + expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b", "1"), "compile", + AppDependency.DIRECT_FLAG, AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG)); + expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-dep-1", "1"), "compile", + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG)); + expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-dep-2", "1"), "compile", + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG)); expectedRuntimeDeps - .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-dep-trans-1", "1"), "compile")); + .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-dep-trans-1", "1"), "compile", + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG)); expectedRuntimeDeps - .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-dep-trans-2", "1"), "compile")); + .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-dep-trans-2", "1"), "compile", + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG)); assertEquals(expectedRuntimeDeps, new HashSet<>(appModel.getUserDependencies())); final Set expectedFullDeps = new HashSet<>(); expectedFullDeps.addAll(expectedDeployDeps); diff --git a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExcludeLibDepsTest.java b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExcludeLibDepsTest.java index a660f1951ecfd..80537c2dd27ea 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExcludeLibDepsTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExcludeLibDepsTest.java @@ -61,16 +61,23 @@ protected TsArtifact modelApp() { protected void assertAppModel(AppModel appModel) throws Exception { final Set expectedDeployDeps = new HashSet<>(); expectedDeployDeps - .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-deployment", "1"), "compile")); + .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-deployment", "1"), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); assertEquals(expectedDeployDeps, new HashSet<>(appModel.getDeploymentDependencies())); final Set expectedRuntimeDeps = new HashSet<>(); - expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a", "1"), "compile")); - expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-dep-1", "1"), "compile")); - expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-dep-2", "1"), "compile")); + expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a", "1"), "compile", + AppDependency.DIRECT_FLAG, AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG)); + expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-dep-1", "1"), "compile", + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG)); + expectedRuntimeDeps.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-dep-2", "1"), "compile", + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG)); expectedRuntimeDeps - .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-dep-trans-1", "1"), "compile")); + .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-dep-trans-1", "1"), "compile", + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG)); expectedRuntimeDeps - .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-dep-trans-2", "1"), "compile")); + .add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-dep-trans-2", "1"), "compile", + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG)); assertEquals(expectedRuntimeDeps, new HashSet<>(appModel.getUserDependencies())); final Set expectedFullDeps = new HashSet<>(); expectedFullDeps.addAll(expectedDeployDeps); diff --git a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExecutableOutputOutcomeTestBase.java b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExecutableOutputOutcomeTestBase.java index 00013e201311c..fdb2ebe7b8737 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExecutableOutputOutcomeTestBase.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ExecutableOutputOutcomeTestBase.java @@ -110,6 +110,7 @@ public Path getPath(Path workDir) throws IOException { return platformPropsDep; } + @SuppressWarnings("deprecation") @Override protected void testCreator(QuarkusBootstrap creator) throws Exception { System.setProperty("quarkus.package.type", "legacy-jar"); @@ -193,6 +194,7 @@ protected void testCreator(QuarkusBootstrap creator) throws Exception { } } + @SuppressWarnings("deprecation") private static void assertExtensionDependencies(AppModel appModel, String[] expectedExtensions) { final Set expectedRuntime = new HashSet<>(expectedExtensions.length); final Set expectedDeployment = new HashSet<>(expectedExtensions.length); diff --git a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/OptionalDepsTest.java b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/OptionalDepsTest.java index 764e145dd906d..d3fbaca4ef03a 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/OptionalDepsTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/OptionalDepsTest.java @@ -68,12 +68,16 @@ protected TsArtifact modelApp() { @Override protected void assertDeploymentDeps(List deploymentDeps) throws Exception { final Set expected = new HashSet<>(); - expected.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-deployment", "1"), "compile", true)); + expected.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-deployment", "1"), "compile", true, + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add( - new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-deployment-dep", "1"), "compile", true)); - expected.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-deployment", "1"), "compile", true)); + new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-deployment-dep", "1"), "compile", true, + AppDependency.DEPLOYMENT_CP_FLAG)); + expected.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-b-deployment", "1"), "compile", true, + AppDependency.DEPLOYMENT_CP_FLAG)); expected.add( - new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-d-deployment", "1"), "compile", false)); + new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-d-deployment", "1"), "compile", false, + AppDependency.DEPLOYMENT_CP_FLAG)); assertEquals(expected, new HashSet<>(deploymentDeps)); } } diff --git a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ProvidedExtensionDepsTest.java b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ProvidedExtensionDepsTest.java index fa09f84adb0de..86ab3e41fb15b 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ProvidedExtensionDepsTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/runnerjar/ProvidedExtensionDepsTest.java @@ -43,8 +43,10 @@ protected TsArtifact modelApp() { @Override protected void assertDeploymentDeps(List deploymentDeps) throws Exception { final Set expected = new HashSet<>(); - expected.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-deployment", "1"), "compile")); - expected.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-deployment-dep", "1"), "compile")); + expected.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-deployment", "1"), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); + expected.add(new AppDependency(new AppArtifact("io.quarkus.bootstrap.test", "ext-a-deployment-dep", "1"), "compile", + AppDependency.DEPLOYMENT_CP_FLAG)); assertEquals(expected, new HashSet<>(deploymentDeps)); } } diff --git a/devtools/gradle/src/main/java/io/quarkus/gradle/builder/QuarkusModelBuilder.java b/devtools/gradle/src/main/java/io/quarkus/gradle/builder/QuarkusModelBuilder.java index ac70d8c8e8095..79f279557a901 100644 --- a/devtools/gradle/src/main/java/io/quarkus/gradle/builder/QuarkusModelBuilder.java +++ b/devtools/gradle/src/main/java/io/quarkus/gradle/builder/QuarkusModelBuilder.java @@ -8,19 +8,16 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Set; -import java.util.stream.Collectors; import org.gradle.api.GradleException; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; -import org.gradle.api.artifacts.ExternalModuleDependency; import org.gradle.api.artifacts.ResolvedArtifact; import org.gradle.api.artifacts.ResolvedConfiguration; +import org.gradle.api.artifacts.ResolvedDependency; import org.gradle.api.artifacts.component.ProjectComponentIdentifier; -import org.gradle.api.attributes.Category; import org.gradle.api.initialization.IncludedBuild; import org.gradle.api.internal.artifacts.dependencies.DefaultDependencyArtifact; import org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency; @@ -31,10 +28,11 @@ import org.gradle.tooling.provider.model.ParameterizedToolingModelBuilder; import io.quarkus.bootstrap.BootstrapConstants; +import io.quarkus.bootstrap.model.AppArtifactKey; +import io.quarkus.bootstrap.model.AppDependency; import io.quarkus.bootstrap.model.PlatformImports; import io.quarkus.bootstrap.model.PlatformImportsImpl; import io.quarkus.bootstrap.model.gradle.ArtifactCoords; -import io.quarkus.bootstrap.model.gradle.Dependency; import io.quarkus.bootstrap.model.gradle.ModelParameter; import io.quarkus.bootstrap.model.gradle.QuarkusModel; import io.quarkus.bootstrap.model.gradle.WorkspaceModule; @@ -116,13 +114,13 @@ public Object buildAll(String modelName, ModelParameter parameter, Project proje final List deploymentDeps = DependencyUtils.getEnforcedPlatforms(project); final PlatformImports platformImports = resolvePlatformImports(project, deploymentDeps); - final Map appDependencies = new LinkedHashMap<>(); + final Map appDependencies = new LinkedHashMap<>(); Configuration classpathConfig = classpathConfig(project, mode); final ResolvedConfiguration resolvedConfiguration = classpathConfig.getResolvedConfiguration(); collectDependencies(resolvedConfiguration, mode, project, appDependencies); Configuration deploymentConfig = deploymentClasspathConfig(project, mode, deploymentDeps); - final List extensionDependencies = collectExtensionDependencies(deploymentConfig); + collectExtensionDependencies(deploymentConfig, appDependencies); ArtifactCoords appArtifactCoords = new ArtifactCoordsImpl(project.getGroup().toString(), project.getName(), project.getVersion().toString()); @@ -130,9 +128,6 @@ public Object buildAll(String modelName, ModelParameter parameter, Project proje return new QuarkusModelImpl( new WorkspaceImpl(appArtifactCoords, getWorkspace(project.getRootProject(), mode, appArtifactCoords)), new ArrayList<>(appDependencies.values()), - extensionDependencies, - deploymentDeps.stream().map(QuarkusModelBuilder::toEnforcedPlatformDependency) - .filter(Objects::nonNull).collect(Collectors.toList()), platformImports); } @@ -211,34 +206,75 @@ private WorkspaceModule getWorkspaceModule(Project project, LaunchMode mode, boo project.getBuildDir().getAbsoluteFile(), getSourceSourceSet(mainSourceSet), modelSourceSet); } - private List collectExtensionDependencies(Configuration deploymentConfiguration) { - final List extensionDependencies = new ArrayList<>(); + private void collectExtensionDependencies(Configuration deploymentConfiguration, + Map appDependencies) { final ResolvedConfiguration rc = deploymentConfiguration.getResolvedConfiguration(); for (ResolvedArtifact a : rc.getResolvedArtifacts()) { if (isDependency(a)) { - extensionDependencies.add(toDependency(a)); + DependencyImpl dep = appDependencies.computeIfAbsent( + toAppDependenciesKey(a.getModuleVersion().getId().getGroup(), a.getName(), a.getClassifier()), + k -> toDependency(a, AppDependency.DEPLOYMENT_CP_FLAG)); + dep.setFlag(AppDependency.DEPLOYMENT_CP_FLAG); } } - - return extensionDependencies; } private void collectDependencies(ResolvedConfiguration configuration, - LaunchMode mode, Project project, Map appDependencies) { - - final Set artifacts = configuration.getResolvedArtifacts(); - Set artifactFiles = null; + LaunchMode mode, Project project, Map appDependencies) { + final Set resolvedArtifacts = configuration.getResolvedArtifacts(); // if the number of artifacts is less than the number of files then probably // the project includes direct file dependencies - if (artifacts.size() < configuration.getFiles().size()) { - artifactFiles = new HashSet<>(artifacts.size()); + final Set artifactFiles = resolvedArtifacts.size() < configuration.getFiles().size() + ? new HashSet<>(resolvedArtifacts.size()) + : null; + + configuration.getFirstLevelModuleDependencies() + .forEach(d -> collectDependencies(d, mode, project, appDependencies, artifactFiles, new HashSet<>())); + + if (artifactFiles != null) { + // detect FS paths that aren't provided by the resolved artifacts + for (File f : configuration.getFiles()) { + if (artifactFiles.contains(f)) { + continue; + } + // here we are trying to represent a direct FS path dependency + // as an artifact dependency + // SHA1 hash is used to avoid long file names in the lib dir + final String parentPath = f.getParent(); + final String group = HashUtil.sha1(parentPath == null ? f.getName() : parentPath); + String name = f.getName(); + String type = "jar"; + if (!f.isDirectory()) { + final int dot = f.getName().lastIndexOf('.'); + if (dot > 0) { + name = f.getName().substring(0, dot); + type = f.getName().substring(dot + 1); + } + } + // hash could be a better way to represent the version + final String version = String.valueOf(f.lastModified()); + final DependencyImpl dep = new DependencyImpl(name, group, version, "compile", type, null, + AppDependency.DIRECT_FLAG, AppDependency.RUNTIME_CP_FLAG); + dep.addPath(f); + final ArtifactCoords key = toAppDependenciesKey(group, name, ""); + appDependencies.put(key, dep); + } } - for (ResolvedArtifact a : artifacts) { - if (!isDependency(a)) { + } + + private void collectDependencies(ResolvedDependency resolvedDep, LaunchMode mode, Project project, + Map appDependencies, Set artifactFiles, + Set processedModules) { + + for (ResolvedArtifact a : resolvedDep.getModuleArtifacts()) { + final ArtifactCoords artifactKey = toAppDependenciesKey(a.getModuleVersion().getId().getGroup(), a.getName(), + a.getClassifier()); + if (!isDependency(a) || appDependencies.containsKey(artifactKey)) { continue; } - final DependencyImpl dep = initDependency(a); + final DependencyImpl dep = initDependency(a, processedModules.isEmpty() ? AppDependency.DIRECT_FLAG : 0, + AppDependency.RUNTIME_CP_FLAG); if ((LaunchMode.DEVELOPMENT.equals(mode) || LaunchMode.TEST.equals(mode)) && a.getId().getComponentIdentifier() instanceof ProjectComponentIdentifier) { if ("test-fixtures".equals(a.getClassifier()) || "test".equals(a.getClassifier())) { @@ -262,38 +298,16 @@ private void collectDependencies(ResolvedConfiguration configuration, } else { dep.addPath(a.getFile()); } - appDependencies.put(toAppDependenciesKey(dep.getGroupId(), dep.getName(), dep.getClassifier()), dep); + appDependencies.put(artifactKey, dep); if (artifactFiles != null) { artifactFiles.add(a.getFile()); } } - if (artifactFiles != null) { - // detect FS paths that aren't provided by the resolved artifacts - for (File f : configuration.getFiles()) { - if (artifactFiles.contains(f)) { - continue; - } - // here we are trying to represent a direct FS path dependency - // as an artifact dependency - // SHA1 hash is used to avoid long file names in the lib dir - final String parentPath = f.getParent(); - final String group = HashUtil.sha1(parentPath == null ? f.getName() : parentPath); - String name = f.getName(); - String type = "jar"; - if (!f.isDirectory()) { - final int dot = f.getName().lastIndexOf('.'); - if (dot > 0) { - name = f.getName().substring(0, dot); - type = f.getName().substring(dot + 1); - } - } - // hash could be a better way to represent the version - final String version = String.valueOf(f.lastModified()); - final ArtifactCoords key = toAppDependenciesKey(group, name, ""); - final DependencyImpl dep = new DependencyImpl(name, group, version, "compile", type, null); - dep.addPath(f); - appDependencies.put(key, dep); + processedModules.add(new AppArtifactKey(resolvedDep.getModuleGroup(), resolvedDep.getModuleName())); + for (ResolvedDependency child : resolvedDep.getChildren()) { + if (!processedModules.contains(new AppArtifactKey(child.getModuleGroup(), child.getModuleName()))) { + collectDependencies(child, mode, project, appDependencies, artifactFiles, processedModules); } } } @@ -384,31 +398,19 @@ private static boolean isDependency(ResolvedArtifact a) { /** * Creates an instance of Dependency and associates it with the ResolvedArtifact's path */ - static Dependency toDependency(ResolvedArtifact a) { - final DependencyImpl dependency = initDependency(a); + static DependencyImpl toDependency(ResolvedArtifact a, int... flags) { + final DependencyImpl dependency = initDependency(a, flags); dependency.addPath(a.getFile()); return dependency; } - static Dependency toEnforcedPlatformDependency(org.gradle.api.artifacts.Dependency dependency) { - if (dependency instanceof ExternalModuleDependency) { - ExternalModuleDependency emd = (ExternalModuleDependency) dependency; - Category category = emd.getAttributes().getAttribute(Category.CATEGORY_ATTRIBUTE); - if (category != null && Category.ENFORCED_PLATFORM.equals(category.getName())) { - return new DependencyImpl(emd.getName(), emd.getGroup(), emd.getVersion(), - "compile", "pom", null); - } - } - return null; - } - /** * Creates an instance of DependencyImpl but does not associates it with a path */ - private static DependencyImpl initDependency(ResolvedArtifact a) { + private static DependencyImpl initDependency(ResolvedArtifact a, int... flags) { final String[] split = a.getModuleVersion().toString().split(":"); return new DependencyImpl(split[1], split[0], split.length > 2 ? split[2] : null, - "compile", a.getType(), a.getClassifier()); + "compile", a.getType(), a.getClassifier(), flags); } private static ArtifactCoords toAppDependenciesKey(String groupId, String artifactId, String classifier) { diff --git a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/AppDependency.java b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/AppDependency.java index d25b2d45fc2c2..3fc311d513e42 100644 --- a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/AppDependency.java +++ b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/AppDependency.java @@ -1,26 +1,32 @@ package io.quarkus.bootstrap.model; import java.io.Serializable; +import java.util.Objects; -/** - * Represents an application artifact dependency. - * - * @author Alexey Loubyansky - */ public class AppDependency implements Serializable { + public static final int OPTIONAL_FLAG = 0b000001; + public static final int DIRECT_FLAG = 0b000010; + public static final int RUNTIME_CP_FLAG = 0b000100; + public static final int DEPLOYMENT_CP_FLAG = 0b001000; + public static final int RUNTIME_EXTENSION_ARTIFACT_FLAG = 0b010000; + private final AppArtifact artifact; private final String scope; - private final boolean optional; + private final int flags; - public AppDependency(AppArtifact artifact, String scope) { - this(artifact, scope, false); + public AppDependency(AppArtifact artifact, String scope, int... flags) { + this(artifact, scope, false, flags); } - public AppDependency(AppArtifact artifact, String scope, boolean optional) { + public AppDependency(AppArtifact artifact, String scope, boolean optional, int... flags) { this.artifact = artifact; this.scope = scope; - this.optional = optional; + int tmpFlags = optional ? OPTIONAL_FLAG : 0; + for (int f : flags) { + tmpFlags |= f; + } + this.flags = tmpFlags; } public AppArtifact getArtifact() { @@ -32,17 +38,36 @@ public String getScope() { } public boolean isOptional() { - return optional; + return isFlagSet(OPTIONAL_FLAG); + } + + public boolean isDirect() { + return isFlagSet(DIRECT_FLAG); + } + + public boolean isRuntimeExtensionArtifact() { + return isFlagSet(RUNTIME_EXTENSION_ARTIFACT_FLAG); + } + + public boolean isRuntimeCp() { + return isFlagSet(RUNTIME_CP_FLAG); + } + + public boolean isDeploymentCp() { + return isFlagSet(DEPLOYMENT_CP_FLAG); + } + + public boolean isFlagSet(int flag) { + return (flags & flag) > 0; + } + + public int getFlags() { + return flags; } @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((artifact == null) ? 0 : artifact.hashCode()); - result = prime * result + (optional ? 1231 : 1237); - result = prime * result + ((scope == null) ? 0 : scope.hashCode()); - return result; + return Objects.hash(artifact, flags, scope); } @Override @@ -54,28 +79,28 @@ public boolean equals(Object obj) { if (getClass() != obj.getClass()) return false; AppDependency other = (AppDependency) obj; - if (artifact == null) { - if (other.artifact != null) - return false; - } else if (!artifact.equals(other.artifact)) - return false; - if (optional != other.optional) - return false; - if (scope == null) { - if (other.scope != null) - return false; - } else if (!scope.equals(other.scope)) - return false; - return true; + return Objects.equals(artifact, other.artifact) && flags == other.flags && Objects.equals(scope, other.scope); } @Override public String toString() { final StringBuilder buf = new StringBuilder(); - artifact.append(buf).append('(').append(scope); - if (optional) { - buf.append(" optional"); + artifact.append(buf).append('('); + if (isDirect()) { + buf.append("direct "); + } + if (isOptional()) { + buf.append("optional "); + } + if (isRuntimeExtensionArtifact()) { + buf.append("extension "); + } + if (isRuntimeCp()) { + buf.append("runtime-cp "); + } + if (isDeploymentCp()) { + buf.append("deployment-cp "); } - return buf.append(')').toString(); + return buf.append(scope).append(')').toString(); } } diff --git a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/AppModel.java b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/AppModel.java index 67983300d10ec..ebd5ac9dc4d59 100644 --- a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/AppModel.java +++ b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/AppModel.java @@ -31,20 +31,21 @@ public class AppModel implements Serializable { private final AppArtifact appArtifact; - /** - * The deployment dependencies, less the runtime parts. This will likely go away - */ - private final List deploymentDeps; /** * The deployment dependencies, including all transitive dependencies. This is used to build an isolated class * loader to run the augmentation */ - private final List fullDeploymentDeps; + private final List dependencies; /** * The runtime dependencies of the application, including the runtime parts of all extensions. */ - private final List runtimeDeps; + private transient List runtimeDeps; + + /** + * The deployment dependencies, less the runtime parts. This will likely go away + */ + private transient List deploymentDeps; private final Set parentFirstArtifacts; @@ -68,9 +69,7 @@ public class AppModel implements Serializable { private AppModel(Builder builder) { this.appArtifact = builder.appArtifact; - this.runtimeDeps = builder.filter(builder.runtimeDeps); - this.deploymentDeps = builder.filter(builder.deploymentDeps); - this.fullDeploymentDeps = builder.filter(builder.fullDeploymentDeps); + this.dependencies = builder.filter(builder.dependencies); this.parentFirstArtifacts = builder.parentFirstArtifacts; this.runnerParentFirstArtifacts = builder.runnerParentFirstArtifacts; this.lesserPriorityArtifacts = builder.lesserPriorityArtifacts; @@ -96,7 +95,9 @@ public AppArtifact getAppArtifact() { * Dependencies that the user has added that have nothing to do with Quarkus (3rd party libs, additional modules etc) */ public List getUserDependencies() { - return runtimeDeps; + return runtimeDeps == null + ? runtimeDeps = dependencies.stream().filter(d -> d.isRuntimeCp()).collect(Collectors.toList()) + : runtimeDeps; } /** @@ -105,11 +106,13 @@ public List getUserDependencies() { */ @Deprecated public List getDeploymentDependencies() { - return deploymentDeps; + return deploymentDeps == null + ? deploymentDeps = dependencies.stream().filter(d -> !d.isRuntimeCp()).collect(Collectors.toList()) + : deploymentDeps; } public List getFullDeploymentDeps() { - return fullDeploymentDeps; + return dependencies; } public Set getParentFirstArtifacts() { @@ -136,9 +139,7 @@ public Map getCapabilityContracts() { public String toString() { return "AppModel{" + "appArtifact=" + appArtifact + - ", deploymentDeps=" + deploymentDeps + - ", fullDeploymentDeps=" + fullDeploymentDeps + - ", runtimeDeps=" + runtimeDeps + + ", fullDeploymentDeps=" + dependencies + ", parentFirstArtifacts=" + parentFirstArtifacts + ", runnerParentFirstArtifacts=" + runnerParentFirstArtifacts + '}'; @@ -148,9 +149,7 @@ public static class Builder { private AppArtifact appArtifact; - private final List deploymentDeps = new ArrayList<>(); - private final List fullDeploymentDeps = new ArrayList<>(); - private final List runtimeDeps = new ArrayList<>(); + private final List dependencies = new ArrayList<>(); private final Set parentFirstArtifacts = new HashSet<>(); private final Set runnerParentFirstArtifacts = new HashSet<>(); private final Set excludedArtifacts = new HashSet<>(); @@ -176,34 +175,44 @@ public Builder setCapabilitiesContracts(Map capabili return this; } - public Builder addDeploymentDep(AppDependency dep) { - this.deploymentDeps.add(dep); + public Builder addDependency(AppDependency dep) { + dependencies.add(dep); return this; } - public Builder addDeploymentDeps(List deps) { - this.deploymentDeps.addAll(deps); + public Builder addDependencies(Collection deps) { + dependencies.addAll(deps); return this; } + @Deprecated + public Builder addDeploymentDep(AppDependency dep) { + return addDependency(dep); + } + + @Deprecated + public Builder addDeploymentDeps(List deps) { + return addDependencies(deps); + } + + @Deprecated public Builder addFullDeploymentDep(AppDependency dep) { - this.fullDeploymentDeps.add(dep); - return this; + return addDependency(dep); } + @Deprecated public Builder addFullDeploymentDeps(List deps) { - this.fullDeploymentDeps.addAll(deps); - return this; + return addDependencies(deps); } + @Deprecated public Builder addRuntimeDep(AppDependency dep) { - this.runtimeDeps.add(dep); - return this; + return addDependency(dep); } + @Deprecated public Builder addRuntimeDeps(List deps) { - this.runtimeDeps.addAll(deps); - return this; + return addDependencies(deps); } public Builder addParentFirstArtifact(AppArtifactKey deps) { diff --git a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/PersistentAppModel.java b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/PersistentAppModel.java index cc4e128d740e3..7e2762c82adc7 100644 --- a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/PersistentAppModel.java +++ b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/PersistentAppModel.java @@ -21,9 +21,7 @@ public class PersistentAppModel implements Serializable { private final String baseName; private final SerializedDep appArtifact; - private List deploymentDeps; - private List fullDeploymentDeps; - private List runtimeDeps; + private List dependencies; private Set parentFirstArtifacts; private Set runnerParentFirstArtifacts; private Set lesserPriorityArtifacts; @@ -36,19 +34,11 @@ public PersistentAppModel(String baseName, Map> pat String userProvidersDirectory, String appArchivePath) { this.baseName = baseName; this.userProvidersDirectory = userProvidersDirectory; - appArtifact = new SerializedDep(appModel.getAppArtifact(), paths); + appArtifact = new SerializedDep(appModel.getAppArtifact(), paths, 0); appArtifact.paths = Collections.singletonList(appArchivePath.replace('\\', '/')); - deploymentDeps = new ArrayList<>(appModel.getDeploymentDependencies().size()); - for (AppDependency i : appModel.getDeploymentDependencies()) { - deploymentDeps.add(new SerializedDep(i, paths)); - } - fullDeploymentDeps = new ArrayList<>(appModel.getFullDeploymentDeps().size()); + dependencies = new ArrayList<>(appModel.getFullDeploymentDeps().size()); for (AppDependency i : appModel.getFullDeploymentDeps()) { - fullDeploymentDeps.add(new SerializedDep(i, paths)); - } - runtimeDeps = new ArrayList<>(appModel.getUserDependencies().size()); - for (AppDependency i : appModel.getUserDependencies()) { - runtimeDeps.add(new SerializedDep(i, paths)); + dependencies.add(new SerializedDep(i, paths, i.getFlags())); } platformProperties = new HashMap<>(appModel.getPlatformProperties()); localProjectArtifacts = new HashSet<>(appModel.getLocalProjectArtifacts()); @@ -65,15 +55,8 @@ public String getUserProvidersDirectory() { public AppModel getAppModel(Path root) { AppModel.Builder model = new AppModel.Builder(); model.setAppArtifact(appArtifact.getDep(root).getArtifact()); - - for (SerializedDep i : deploymentDeps) { - model.addDeploymentDep(i.getDep(root)); - } - for (SerializedDep i : fullDeploymentDeps) { - model.addFullDeploymentDep(i.getDep(root)); - } - for (SerializedDep i : runtimeDeps) { - model.addRuntimeDep(i.getDep(root)); + for (SerializedDep i : dependencies) { + model.addDependency(i.getDep(root)); } for (AppArtifactKey i : parentFirstArtifacts) { model.addParentFirstArtifact(i); @@ -101,8 +84,9 @@ public String getBaseName() { private static class SerializedDep extends AppArtifactCoords { private List paths; + private final int flags; - public SerializedDep(AppArtifact dependency, Map> paths) { + public SerializedDep(AppArtifact dependency, Map> paths, int flags) { super(dependency.getGroupId(), dependency.getArtifactId(), dependency.getClassifier(), dependency.getType(), dependency.getVersion()); @@ -111,10 +95,11 @@ public SerializedDep(AppArtifact dependency, Map> p pathList = Collections.emptyList(); } this.paths = pathList.stream().map(s -> s.replace('\\', '/')).collect(Collectors.toList()); + this.flags = flags; } - public SerializedDep(AppDependency dependency, Map> paths) { - this(dependency.getArtifact(), paths); + public SerializedDep(AppDependency dependency, Map> paths, int flags) { + this(dependency.getArtifact(), paths, flags); } public AppDependency getDep(Path root) { @@ -125,12 +110,7 @@ public AppDependency getDep(Path root) { AppArtifact appArtifact = new AppArtifact(getGroupId(), getArtifactId(), getClassifier(), getType(), getVersion()); appArtifact.setPaths(builder.build()); - return new AppDependency(appArtifact, "compile", false); //we don't care about scope at this point - } - - public List getPaths() { - return paths; + return new AppDependency(appArtifact, "compile", flags); //we don't care about scope at this point } } - } diff --git a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/Dependency.java b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/Dependency.java index 89ab5a95506f2..c0ac1a241e5e0 100644 --- a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/Dependency.java +++ b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/Dependency.java @@ -19,4 +19,5 @@ public interface Dependency { String getScope(); + int getFlags(); } diff --git a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/QuarkusModel.java b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/QuarkusModel.java index 70938352e5516..f93eb75207af1 100644 --- a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/QuarkusModel.java +++ b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/QuarkusModel.java @@ -7,11 +7,7 @@ public interface QuarkusModel { Workspace getWorkspace(); - List getAppDependencies(); - - List getExtensionDependencies(); - - List getEnforcedPlatformDependencies(); + List getDependencies(); PlatformImports getPlatformImports(); } diff --git a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/impl/DependencyImpl.java b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/impl/DependencyImpl.java index 20597ca0d74ad..74f1b74086550 100644 --- a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/impl/DependencyImpl.java +++ b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/impl/DependencyImpl.java @@ -16,20 +16,27 @@ public class DependencyImpl implements Dependency, Serializable { private final Set paths = new HashSet<>(); private final String scope; private final String type; + private int flags; public DependencyImpl(String name, String groupId, String version, File path, String scope, String type, - String classifier) { - this(name, groupId, version, scope, type, classifier); + String classifier, int... flags) { + this(name, groupId, version, scope, type, classifier, flags); this.paths.add(path); } - public DependencyImpl(String name, String groupId, String version, String scope, String type, String classifier) { + public DependencyImpl(String name, String groupId, String version, String scope, String type, String classifier, + int... flags) { this.name = name; this.groupId = groupId; this.version = version; this.scope = scope; this.type = type; this.classifier = classifier; + int allFlags = 0; + for (int flag : flags) { + allFlags |= flag; + } + this.flags = allFlags; } @Override @@ -71,6 +78,19 @@ public String getScope() { return scope; } + @Override + public int getFlags() { + return flags; + } + + public void setFlag(int flag) { + flags |= flag; + } + + public boolean isFlagSet(int flag) { + return (flags & flag) > 0; + } + @Override public String toString() { return "DependencyImpl{" + @@ -85,22 +105,22 @@ public String toString() { } @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - DependencyImpl that = (DependencyImpl) o; - return name.equals(that.name) && - groupId.equals(that.groupId) && - version.equals(that.version) && - paths.equals(that.paths) && - scope.equals(that.scope) && - type.equals(that.type); + public int hashCode() { + return Objects.hash(classifier, flags, groupId, name, paths, scope, type, version); } @Override - public int hashCode() { - return Objects.hash(name, groupId, version, paths, scope, type); + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DependencyImpl other = (DependencyImpl) obj; + return Objects.equals(classifier, other.classifier) && flags == other.flags + && Objects.equals(groupId, other.groupId) && Objects.equals(name, other.name) + && Objects.equals(paths, other.paths) && Objects.equals(scope, other.scope) + && Objects.equals(type, other.type) && Objects.equals(version, other.version); } } diff --git a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/impl/QuarkusModelImpl.java b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/impl/QuarkusModelImpl.java index f2f120440fd55..81eb45cf3ad91 100644 --- a/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/impl/QuarkusModelImpl.java +++ b/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/gradle/impl/QuarkusModelImpl.java @@ -10,20 +10,14 @@ public class QuarkusModelImpl implements QuarkusModel, Serializable { private final Workspace workspace; - private final List appDependencies; - private final List extensionDependencies; - private final List enforcedPlatformDependencies; + private final List dependencies; private final PlatformImports platformImports; public QuarkusModelImpl(Workspace workspace, - List appDependencies, - List extensionDependencies, - List enforcedPlatformDependencies, + List dependencies, PlatformImports platformImports) { this.workspace = workspace; - this.appDependencies = appDependencies; - this.extensionDependencies = extensionDependencies; - this.enforcedPlatformDependencies = enforcedPlatformDependencies; + this.dependencies = dependencies; this.platformImports = platformImports; } @@ -33,18 +27,8 @@ public Workspace getWorkspace() { } @Override - public List getAppDependencies() { - return appDependencies; - } - - @Override - public List getExtensionDependencies() { - return extensionDependencies; - } - - @Override - public List getEnforcedPlatformDependencies() { - return enforcedPlatformDependencies; + public List getDependencies() { + return dependencies; } @Override diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/CollectDependenciesBase.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/CollectDependenciesBase.java index 88aeebfabf7b6..40606c0eb741a 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/CollectDependenciesBase.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/CollectDependenciesBase.java @@ -87,7 +87,7 @@ protected TsQuarkusExt install(TsQuarkusExt ext) { protected void install(TsQuarkusExt ext, boolean collected) { ext.install(repo); if (collected) { - addCollectedDep(ext.getRuntime(), "compile", false); + addCollectedDep(ext.getRuntime(), "compile", false, AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG); addCollectedDeploymentDep(ext.getDeployment()); } } @@ -95,20 +95,21 @@ protected void install(TsQuarkusExt ext, boolean collected) { protected void installAsDep(TsQuarkusExt ext) { ext.install(repo); root.addDependency(ext); - addCollectedDep(ext.getRuntime(), "compile", false); + addCollectedDep(ext.getRuntime(), "compile", false, AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG); addCollectedDeploymentDep(ext.getDeployment()); } - protected void installAsDep(TsArtifact dep) { - installAsDep(dep, true); + protected void installAsDep(TsArtifact dep, int... flags) { + installAsDep(dep, true, flags); } - protected void installAsDep(TsArtifact dep, boolean collected) { - installAsDep(dep, null, collected); + protected void installAsDep(TsArtifact dep, boolean collected, int... flags) { + installAsDep(dep, null, collected, flags); } - protected void installAsDep(TsArtifact dep, Path p, boolean collected) { - installAsDep(new TsDependency(dep), p, collected); + protected void installAsDep(TsArtifact dep, Path p, boolean collected, int... flags) { + installAsDep(new TsDependency(dep), p, collected, flags); } protected void installAsDep(TsDependency dep) { @@ -123,32 +124,40 @@ protected void installAsDep(TsDependency dep, boolean collected) { installAsDep(dep, null, collected); } - protected void installAsDep(TsDependency dep, Path p, boolean collected) { + protected void installAsDep(TsDependency dep, Path p, boolean collected, int... flags) { final TsArtifact artifact = dep.artifact; install(artifact, p); root.addDependency(dep); if (!collected) { return; } - addCollectedDep(artifact, dep.scope == null ? "compile" : dep.scope, dep.optional); + int allFlags = AppDependency.DIRECT_FLAG; + for (int f : flags) { + allFlags |= f; + } + addCollectedDep(artifact, dep.scope == null ? "compile" : dep.scope, dep.optional, allFlags); } - protected void addCollectedDep(final TsArtifact artifact) { - addCollectedDep(artifact, "compile", false); + protected void addCollectedDep(final TsArtifact artifact, int... flags) { + addCollectedDep(artifact, "compile", false, flags); } - protected void addCollectedDep(final TsArtifact artifact, final String scope, boolean optional) { + protected void addCollectedDep(final TsArtifact artifact, final String scope, boolean optional, int... flags) { + int allFlags = AppDependency.RUNTIME_CP_FLAG | AppDependency.DEPLOYMENT_CP_FLAG; + for (int f : flags) { + allFlags |= f; + } if (expectedResult.isEmpty()) { expectedResult = new ArrayList<>(); } - expectedResult.add(new AppDependency(artifact.toAppArtifact(), scope, optional)); + expectedResult.add(new AppDependency(artifact.toAppArtifact(), scope, optional, allFlags)); } protected void addCollectedDeploymentDep(TsArtifact ext) { if (deploymentDeps.isEmpty()) { deploymentDeps = new ArrayList<>(); } - deploymentDeps.add(new AppDependency(ext.toAppArtifact(), "compile", false)); + deploymentDeps.add(new AppDependency(ext.toAppArtifact(), "compile", false, AppDependency.DEPLOYMENT_CP_FLAG)); } protected void addManagedDep(TsQuarkusExt ext) { diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/replace/test/ManagedReplacedDependencyTestCase.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/replace/test/ManagedReplacedDependencyTestCase.java index 9a2c556906621..72511dd27df07 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/replace/test/ManagedReplacedDependencyTestCase.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/replace/test/ManagedReplacedDependencyTestCase.java @@ -1,5 +1,6 @@ package io.quarkus.bootstrap.resolver.replace.test; +import io.quarkus.bootstrap.model.AppDependency; import io.quarkus.bootstrap.resolver.CollectDependenciesBase; import io.quarkus.bootstrap.resolver.TsArtifact; import io.quarkus.bootstrap.resolver.TsQuarkusExt; @@ -51,7 +52,7 @@ protected void setupDependencies() throws Exception { addManagedDep(ext201); addManagedDep(ext301); - addCollectedDep(ext301.getRuntime()); + addCollectedDep(ext301.getRuntime(), AppDependency.DIRECT_FLAG, AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG); addCollectedDeploymentDep(ext301.getDeployment()); } } diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/replace/test/SimpleReplacedDependencyTestCase.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/replace/test/SimpleReplacedDependencyTestCase.java index ce02eefcd43bf..815e3bc06e38e 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/replace/test/SimpleReplacedDependencyTestCase.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/replace/test/SimpleReplacedDependencyTestCase.java @@ -1,9 +1,7 @@ package io.quarkus.bootstrap.resolver.replace.test; -import io.quarkus.bootstrap.BootstrapConstants; import io.quarkus.bootstrap.resolver.CollectDependenciesBase; -import io.quarkus.bootstrap.resolver.PropsBuilder; -import io.quarkus.bootstrap.resolver.TsArtifact; +import io.quarkus.bootstrap.resolver.TsQuarkusExt; /** * @@ -13,18 +11,6 @@ public class SimpleReplacedDependencyTestCase extends CollectDependenciesBase { @Override protected void setupDependencies() throws Exception { - - final TsArtifact extension = TsArtifact.jar("extension"); - final TsArtifact deployment = new TsArtifact("deployment").addDependency(extension); - - installAsDep( - extension, - newJar().addEntry( - PropsBuilder.build(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT, deployment.toString()), - BootstrapConstants.DESCRIPTOR_PATH) - .getPath(workDir), - true); - - install(deployment, true); + installAsDep(new TsQuarkusExt("extension")); } } diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/test/SystemPropertyOverridesPomPropertyDependencyTestCase.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/test/SystemPropertyOverridesPomPropertyDependencyTestCase.java index 23306dbd40d13..e9f424e1af6bb 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/test/SystemPropertyOverridesPomPropertyDependencyTestCase.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/test/SystemPropertyOverridesPomPropertyDependencyTestCase.java @@ -1,5 +1,6 @@ package io.quarkus.bootstrap.resolver.test; +import io.quarkus.bootstrap.model.AppDependency; import io.quarkus.bootstrap.resolver.BootstrapAppModelResolver; import io.quarkus.bootstrap.resolver.CollectDependenciesBase; import io.quarkus.bootstrap.resolver.TsArtifact; @@ -30,7 +31,7 @@ protected void setupDependencies() { setSystemProperty("x.version", "3"); // it is expected that the system property will dominate - addCollectedDep(x13); + addCollectedDep(x13, AppDependency.DIRECT_FLAG); } @Override diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/test/VersionPropertyDependencyTestCase.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/test/VersionPropertyDependencyTestCase.java index 494dd121952ae..7ea2f804a9e76 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/test/VersionPropertyDependencyTestCase.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/test/VersionPropertyDependencyTestCase.java @@ -1,5 +1,6 @@ package io.quarkus.bootstrap.resolver.test; +import io.quarkus.bootstrap.model.AppDependency; import io.quarkus.bootstrap.resolver.CollectDependenciesBase; import io.quarkus.bootstrap.resolver.TsArtifact; @@ -20,6 +21,6 @@ protected void setupDependencies() { setPomProperty("x.version", "2"); addDep(new TsArtifact("x", "${x.version}")); - addCollectedDep(x12); + addCollectedDep(x12, AppDependency.DIRECT_FLAG); } } \ No newline at end of file diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMajorUpdatesTest.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMajorUpdatesTest.java index 07ada4ee7086d..0ebe54ab1bd49 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMajorUpdatesTest.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMajorUpdatesTest.java @@ -47,14 +47,21 @@ protected void testCreator(QuarkusBootstrap creator) throws Exception { final AppModel effectiveModel = outcome.getAppModel(); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1", "3.1.1").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1", "3.1.1").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getUserDependencies()); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1-deployment", "3.1.1").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1-deployment", "3.1.1").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getDeploymentDependencies()); } diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMicroUpdatesTest.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMicroUpdatesTest.java index bfea7aff4f839..7efdcf844d6c1 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMicroUpdatesTest.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMicroUpdatesTest.java @@ -44,14 +44,21 @@ protected void testCreator(QuarkusBootstrap creator) throws Exception { final AppModel effectiveModel = outcome.getAppModel(); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1", "1.0.2").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1", "1.0.2").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getUserDependencies()); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1-deployment", "1.0.2").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1-deployment", "1.0.2").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getDeploymentDependencies()); } diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMinorUpdatesTest.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMinorUpdatesTest.java index 103f384ad1b9c..361ce19f3d0fd 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMinorUpdatesTest.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForLatestMinorUpdatesTest.java @@ -44,14 +44,21 @@ protected void testCreator(QuarkusBootstrap creator) throws Exception { final AppModel effectiveModel = outcome.getAppModel(); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1", "1.2.1").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1", "1.2.1").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getUserDependencies()); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1-deployment", "1.2.1").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1-deployment", "1.2.1").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getDeploymentDependencies()); } diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMajorUpdatesTest.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMajorUpdatesTest.java index c98d6fdd92c5b..5e1a0e87d9ac8 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMajorUpdatesTest.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMajorUpdatesTest.java @@ -46,14 +46,21 @@ protected void testCreator(QuarkusBootstrap creator) throws Exception { final AppModel effectiveModel = outcome.getAppModel(); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1", "2.0.0").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1", "2.0.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getUserDependencies()); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1-deployment", "2.0.0").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1-deployment", "2.0.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getDeploymentDependencies()); } diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMicroUpdatesTest.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMicroUpdatesTest.java index 007fcc23b2f87..6cdf62dc0c304 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMicroUpdatesTest.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMicroUpdatesTest.java @@ -44,14 +44,21 @@ protected void testCreator(QuarkusBootstrap creator) throws Exception { final AppModel effectiveModel = outcome.getAppModel(); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1", "1.0.1").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1", "1.0.1").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getUserDependencies()); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1-deployment", "1.0.1").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1-deployment", "1.0.1").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getDeploymentDependencies()); } diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMinorUpdatesTest.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMinorUpdatesTest.java index c08b164e56e19..a0699c63f8883 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMinorUpdatesTest.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckForNextMinorUpdatesTest.java @@ -44,14 +44,21 @@ protected void testCreator(QuarkusBootstrap creator) throws Exception { final AppModel effectiveModel = outcome.getAppModel(); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1", "1.1.0").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1", "1.1.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getUserDependencies()); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1-deployment", "1.1.0").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1-deployment", "1.1.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getDeploymentDependencies()); } diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckUpdatesDisableTest.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckUpdatesDisableTest.java index fc69e833d0dd3..da4e766b8dccb 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckUpdatesDisableTest.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/CheckUpdatesDisableTest.java @@ -47,14 +47,21 @@ protected void testCreator(QuarkusBootstrap creator) throws Exception { final AppModel effectiveModel = outcome.getAppModel(); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1", "1.0.0").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1", "1.0.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getUserDependencies()); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1-deployment", "1.0.0").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1-deployment", "1.0.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getDeploymentDependencies()); } diff --git a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/UpdateToNextMicroAndPersistStateTest.java b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/UpdateToNextMicroAndPersistStateTest.java index 386d6b254a59c..4100bc7c998d7 100644 --- a/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/UpdateToNextMicroAndPersistStateTest.java +++ b/independent-projects/bootstrap/core/src/test/java/io/quarkus/bootstrap/resolver/update/UpdateToNextMicroAndPersistStateTest.java @@ -60,14 +60,21 @@ protected void testCreator(QuarkusBootstrap creator) throws Exception { final AppModel effectiveModel = outcome.getAppModel(); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1", expectedVersion).toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1", expectedVersion).toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("random").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2", "1.0.0").toAppArtifact(), "compile", AppDependency.DIRECT_FLAG, + AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, AppDependency.RUNTIME_CP_FLAG, + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getUserDependencies()); assertEquals(Arrays.asList(new AppDependency[] { - new AppDependency(TsArtifact.jar("ext1-deployment", expectedVersion).toAppArtifact(), "compile"), - new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile") + new AppDependency(TsArtifact.jar("ext1-deployment", expectedVersion).toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG), + new AppDependency(TsArtifact.jar("ext2-deployment", "1.0.0").toAppArtifact(), "compile", + AppDependency.DEPLOYMENT_CP_FLAG) }), effectiveModel.getDeploymentDependencies()); outcome.getCurationResult().persist(outcome.getQuarkusBootstrap().getAppModelResolver()); diff --git a/independent-projects/bootstrap/gradle-resolver/src/main/java/io/quarkus/bootstrap/util/QuarkusModelHelper.java b/independent-projects/bootstrap/gradle-resolver/src/main/java/io/quarkus/bootstrap/util/QuarkusModelHelper.java index fa47dee5f4c99..fcb54b999571e 100644 --- a/independent-projects/bootstrap/gradle-resolver/src/main/java/io/quarkus/bootstrap/util/QuarkusModelHelper.java +++ b/independent-projects/bootstrap/gradle-resolver/src/main/java/io/quarkus/bootstrap/util/QuarkusModelHelper.java @@ -23,7 +23,6 @@ import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -101,30 +100,23 @@ public static Path getClassPath(WorkspaceModule model) throws BootstrapGradleExc public static AppModel convert(QuarkusModel model, AppArtifact appArtifact) throws AppModelResolverException { AppModel.Builder appBuilder = new AppModel.Builder(); - final List userDeps = new ArrayList<>(); - Map versionMap = new HashMap<>(); - model.getAppDependencies().stream().map(QuarkusModelHelper::toAppDependency).forEach(appDependency -> { - userDeps.add(appDependency); - versionMap.put(appDependency.getArtifact().getKey(), appDependency); - }); - final Map capabilities = new HashMap<>(); - final List deploymentDeps = new ArrayList<>(); final Map capabilitiesContracts = new HashMap<>(); - for (Dependency extensionDependency : model.getExtensionDependencies()) { - AppDependency appDep = toAppDependency(extensionDependency); - for (Path artifactPath : appDep.getArtifact().getPaths()) { + for (Dependency extensionDependency : model.getDependencies()) { + boolean extension = false; + for (File f : extensionDependency.getPaths()) { + final Path artifactPath = f.toPath(); if (!Files.exists(artifactPath) || !extensionDependency.getType().equals("jar")) { continue; } if (Files.isDirectory(artifactPath)) { - processQuarkusDir(appDep.getArtifact(), + extension |= processQuarkusDir(extensionDependency, artifactPath.resolve(BootstrapConstants.META_INF), appBuilder, capabilities, capabilitiesContracts); } else { try (FileSystem artifactFs = FileSystems.newFileSystem(artifactPath, QuarkusModelHelper.class.getClassLoader())) { - processQuarkusDir(appDep.getArtifact(), + extension |= processQuarkusDir(extensionDependency, artifactFs.getPath(BootstrapConstants.META_INF), appBuilder, capabilities, capabilitiesContracts); } catch (IOException e) { @@ -132,16 +124,11 @@ public static AppModel convert(QuarkusModel model, AppArtifact appArtifact) thro } } } - if (!userDeps.contains(appDep)) { - AppDependency deploymentDep = alignVersion(appDep, versionMap); - deploymentDeps.add(deploymentDep); - } + appBuilder.addDependency(toAppDependency(extensionDependency, extensionDependency.getFlags(), + extension ? AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG : 0)); } appBuilder.setCapabilitiesContracts(capabilitiesContracts); - final List fullDeploymentDeps = new ArrayList<>(userDeps); - fullDeploymentDeps.addAll(deploymentDeps); - if (!appArtifact.isResolved()) { PathsCollection.Builder paths = PathsCollection.builder(); WorkspaceModule module = model.getWorkspace().getMainModule(); @@ -162,16 +149,17 @@ public static AppModel convert(QuarkusModel model, AppArtifact appArtifact) thro new AppArtifactKey(coords.getGroupId(), coords.getArtifactId(), null, coords.getType())); } - appBuilder.addRuntimeDeps(userDeps) - .addFullDeploymentDeps(fullDeploymentDeps) - .addDeploymentDeps(deploymentDeps) - .setAppArtifact(appArtifact) + appBuilder.setAppArtifact(appArtifact) .setPlatformImports(model.getPlatformImports()); return appBuilder.build(); } - public static AppDependency toAppDependency(Dependency dependency) { - return new AppDependency(toAppArtifact(dependency), "runtime"); + public static AppDependency toAppDependency(Dependency dependency, int... flags) { + int allFlags = dependency.getFlags(); + for (int f : flags) { + allFlags |= f; + } + return new AppDependency(toAppArtifact(dependency), "runtime", allFlags); } private static AppArtifact toAppArtifact(Dependency dependency) { @@ -204,20 +192,22 @@ public static Properties resolveDescriptor(final Path path) { return rtProps; } - private static void processQuarkusDir(AppArtifact a, Path quarkusDir, AppModel.Builder appBuilder, + private static boolean processQuarkusDir(Dependency d, Path quarkusDir, AppModel.Builder appBuilder, Map capabilities, Map capabilitiesContracts) { if (!Files.exists(quarkusDir)) { - return; + return false; } final Path quarkusDescr = quarkusDir.resolve(BootstrapConstants.DESCRIPTOR_FILE_NAME); if (!Files.exists(quarkusDescr)) { - return; + return false; } final Properties extProps = QuarkusModelHelper.resolveDescriptor(quarkusDescr); if (extProps == null) { - return; + return false; } - final String extensionCoords = a.toString(); + final String extensionCoords = d.getGroupId() + ":" + d.getName() + ":" + + (d.getClassifier() == null ? "" : d.getClassifier()) + ":" + + (d.getType() == null || d.getType().isEmpty() ? "jar" : d.getType()) + ":" + d.getVersion(); appBuilder.handleExtensionProperties(extProps, extensionCoords); final String providesCapabilities = extProps.getProperty(BootstrapConstants.PROP_PROVIDES_CAPABILITIES); @@ -225,6 +215,7 @@ private static void processQuarkusDir(AppArtifact a, Path quarkusDir, AppModel.B capabilitiesContracts.put(extensionCoords, CapabilityContract.providesCapabilities(extensionCoords, providesCapabilities)); } + return true; } static AppDependency alignVersion(AppDependency dependency, Map versionMap) { diff --git a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java index 1b1baed07dc9d..cbddded5c0c4f 100644 --- a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java +++ b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java @@ -155,7 +155,7 @@ private AppModel doResolveModel(AppArtifact appArtifact, List direct } final Artifact mvnArtifact = toAetherArtifact(appArtifact); - AppModel.Builder appBuilder = new AppModel.Builder(); + AppModel.Builder appBuilder = new AppModel.Builder().setAppArtifact(appArtifact); List managedDeps = Collections.emptyList(); List managedRepos = Collections.emptyList(); if (managingProject != null) { @@ -203,15 +203,13 @@ private AppModel doResolveModel(AppArtifact appArtifact, List direct final DeploymentInjectingDependencyVisitor deploymentInjector; try { - deploymentInjector = new DeploymentInjectingDependencyVisitor(mvn, - managedDeps, repos, appBuilder); + deploymentInjector = new DeploymentInjectingDependencyVisitor(mvn, managedDeps, repos, appBuilder); deploymentInjector.injectDeploymentDependencies(resolvedDeps); } catch (BootstrapDependencyProcessingException e) { throw new AppModelResolverException( "Failed to inject extension deployment dependencies for " + resolvedDeps.getArtifact(), e); } - List deploymentDeps = Collections.emptyList(); if (deploymentInjector.isInjectedDeps()) { final DependencyGraphTransformationContext context = new SimpleDependencyGraphTransformationContext( mvn.getSession()); @@ -239,10 +237,10 @@ private AppModel doResolveModel(AppArtifact appArtifact, List direct } } final List deploymentDepNodes = buildDepsVisitor.getDeploymentNodes(); - deploymentDeps = new ArrayList<>(deploymentDepNodes.size()); for (DependencyNode dep : deploymentDepNodes) { - deploymentDeps.add(new AppDependency(BootstrapAppModelResolver.toAppArtifact(dep.getArtifact()), - dep.getDependency().getScope(), dep.getDependency().isOptional())); + appBuilder.addDependency(new AppDependency(BootstrapAppModelResolver.toAppArtifact(dep.getArtifact()), + dep.getDependency().getScope(), dep.getDependency().isOptional(), + AppDependency.DEPLOYMENT_CP_FLAG)); } } } @@ -254,11 +252,7 @@ private AppModel doResolveModel(AppArtifact appArtifact, List direct for (AppArtifactKey i : localProjects) { appBuilder.addLocalProjectArtifact(new AppArtifactKey(i.getGroupId(), i.getArtifactId(), null, "jar")); } - return appBuilder - .addDeploymentDeps(deploymentDeps) - .setAppArtifact(appArtifact) - .addFullDeploymentDeps(deploymentDeps) - .build(); + return appBuilder.build(); } private void collectPlatformProperties(AppModel.Builder appBuilder, List managedDeps) diff --git a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/DeploymentInjectingDependencyVisitor.java b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/DeploymentInjectingDependencyVisitor.java index 1d544fc8660dd..1843d6bc2d016 100644 --- a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/DeploymentInjectingDependencyVisitor.java +++ b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/DeploymentInjectingDependencyVisitor.java @@ -66,6 +66,7 @@ public static Artifact getRuntimeArtifact(DependencyNode dep) { private final AppModel.Builder appBuilder; private boolean collectingTopRuntimeNodes = true; + private boolean collectingDirectExtensionDeps = true; private final List topExtensionDeps = new ArrayList<>(); private ExtensionDependency lastVisitedRuntimeExtNode; private final Map allExtensions = new HashMap<>(); @@ -164,17 +165,8 @@ private void visitRuntimeDependencies(List list) { } private void visitRuntimeDependency(DependencyNode node) { - Artifact artifact = node.getArtifact(); - - if (allRuntimeDeps.add(DependencyNodeUtils.toKey(artifact))) { - artifact = resolve(artifact); - final AppArtifact appArtifact = toAppArtifact(artifact); - final AppDependency appDep = new AppDependency(appArtifact, node.getDependency().getScope(), - node.getDependency().isOptional()); - appBuilder.addRuntimeDep(appDep); - appBuilder.addFullDeploymentDep(appDep); - } + final boolean prevCollectingDirectExtensionDeps = collectingDirectExtensionDeps; final boolean prevCollectingTopRtNodes = collectingTopRuntimeNodes; final ExtensionDependency prevLastVisitedRtExtNode = lastVisitedRuntimeExtNode; @@ -183,8 +175,27 @@ private void visitRuntimeDependency(DependencyNode node) { exclusionStack.addLast(node.getDependency().getExclusions()); } + Artifact artifact = node.getArtifact(); + AppArtifact newRtArtifactDep = null; + if (allRuntimeDeps.add(DependencyNodeUtils.toKey(artifact))) { + artifact = resolve(artifact); + newRtArtifactDep = toAppArtifact(artifact); + } + try { final ExtensionDependency extDep = getExtensionDependencyOrNull(node, artifact); + + if (newRtArtifactDep != null) { + final AppDependency appDep = new AppDependency(newRtArtifactDep, node.getDependency().getScope(), + node.getDependency().isOptional(), + collectingDirectExtensionDeps ? AppDependency.DIRECT_FLAG : 0, + extDep == null ? 0 : AppDependency.RUNTIME_EXTENSION_ARTIFACT_FLAG, + AppDependency.RUNTIME_CP_FLAG, AppDependency.DEPLOYMENT_CP_FLAG); + appBuilder.addDependency(appDep); + } + + collectingDirectExtensionDeps = false; + if (extDep != null) { extDep.info.ensureActivated(); visitExtensionDependency(extDep); @@ -199,6 +210,7 @@ private void visitRuntimeDependency(DependencyNode node) { if (popExclusions) { exclusionStack.pollLast(); } + collectingDirectExtensionDeps = prevCollectingDirectExtensionDeps; collectingTopRuntimeNodes = prevCollectingTopRtNodes; lastVisitedRuntimeExtNode = prevLastVisitedRtExtNode; } diff --git a/integration-tests/gradle/src/main/resources/.quarkus/config.yaml b/integration-tests/gradle/src/main/resources/.quarkus/config.yaml index 82f4783ee7130..bdc4a9e80babd 100644 --- a/integration-tests/gradle/src/main/resources/.quarkus/config.yaml +++ b/integration-tests/gradle/src/main/resources/.quarkus/config.yaml @@ -4,4 +4,4 @@ registries: - test.registry.quarkus.io: maven: repository: - url: file://$testResourcesDir/test-registry-repo + url: file://${project.build.outputDirectory}/test-registry-repo