From 7cd3f12727361d484384aac8e15456bc9d3e473b Mon Sep 17 00:00:00 2001 From: Emond Papegaaij Date: Fri, 30 Oct 2026 09:43:17 +0100 Subject: [PATCH 1/2] Upgrade to Maven 3.10.0 and Maven Resolver 2.0 Maven 3.10.0 moves from Resolver 1.9 to Resolver 2.0, which requires more than a version bump: - Bump Maven to 3.10.0, MIMA to 3.0.1 and Sisu to 1.1.0; replace the removed maven-resolver-transport-http with maven-resolver-transport-apache - Keep the pre-order (depth-first) ordering of resolved artifacts; Resolver 2 defaults to level-order. Opt in with -Daether.system.dependencyVisitor=levelOrder - Work around Resolver 2.0.24 passing the filtered node itself as the first element of DependencyFilter parents, which broke ancestor based filters - Build POMs loaded from file with validation level 2.0, as Maven 3.10 treats lower levels as external models (no file based profile activation, restricted interpolation) - Make ClasspathWorkspaceReader.findArtifact thread safe, as Resolver 2 collects dependencies in parallel - Require Maven 3.10.0 for the Maven plugin, as MIMA 3 uses Resolver 2 APIs - Use Maven 3.10.0 as default Embedded Maven version and for the wrapper Co-Authored-By: Claude Opus 5.5 --- .mvn/wrapper/maven-wrapper.properties | 2 +- .../api/maven/embedded/DistributionStage.java | 2 +- ...ddedMavenForMultiModuleSampleTestCase.java | 4 +- ...ppedEmbeddedMavenForWarSampleTestCase.java | 4 +- ...ddedMavenForMultiModuleSampleTestCase.java | 4 +- ...ppedEmbeddedMavenForWarSampleTestCase.java | 4 +- maven/impl-maven/pom.xml | 2 +- .../impl/maven/MavenWorkingSessionImpl.java | 4 +- .../aether/ClasspathWorkspaceReader.java | 3 +- .../bootstrap/MavenRepositorySystem.java | 12 +++ .../PropertiesInterpolationTestCase.java | 19 ++++- .../integration/ResolutionOrderTestCase.java | 85 +++++++++++++++++++ maven/maven-plugin/pom.xml | 4 +- pom.xml | 6 +- 14 files changed, 137 insertions(+), 18 deletions(-) create mode 100644 maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/ResolutionOrderTestCase.java diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index 216df058..bb58b3c2 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1,3 +1,3 @@ wrapperVersion=3.3.4 distributionType=only-script -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.16/apache-maven-3.9.16-bin.zip +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.10.0/apache-maven-3.10.0-bin.zip diff --git a/maven/api-maven-embedded/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/embedded/DistributionStage.java b/maven/api-maven-embedded/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/embedded/DistributionStage.java index 0938ddbc..3a9c5ea1 100644 --- a/maven/api-maven-embedded/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/embedded/DistributionStage.java +++ b/maven/api-maven-embedded/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/embedded/DistributionStage.java @@ -27,7 +27,7 @@ public interface DistributionStage, DAEMON_TRIGGER_TYPE extends DaemonBuildTrigger> extends BuildStage { - String DEFAULT_MAVEN_VERSION = "3.9.16"; + String DEFAULT_MAVEN_VERSION = "3.10.0"; /** * Configures EmbeddedMaven to build project with Maven 3 of given version. If the zip file is not cached in directory diff --git a/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/invoker/equipped/InvokerEquippedEmbeddedMavenForMultiModuleSampleTestCase.java b/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/invoker/equipped/InvokerEquippedEmbeddedMavenForMultiModuleSampleTestCase.java index bd9f1134..b10247bf 100644 --- a/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/invoker/equipped/InvokerEquippedEmbeddedMavenForMultiModuleSampleTestCase.java +++ b/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/invoker/equipped/InvokerEquippedEmbeddedMavenForMultiModuleSampleTestCase.java @@ -61,11 +61,11 @@ void testMultiModuleSampleBuildWithMaven310() { BuiltProject builtProject = EmbeddedMaven .withMavenInvokerSet(request, invoker) - .useMaven3Version("3.9.16") + .useMaven3Version("3.10.0") .build(); builtProject.setMavenLog(logBuffer.toString()); - verifyMavenVersion(builtProject, "3.9.16"); + verifyMavenVersion(builtProject, "3.10.0"); verifyMultiModuleSample(builtProject, true); } diff --git a/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/invoker/equipped/InvokerEquippedEmbeddedMavenForWarSampleTestCase.java b/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/invoker/equipped/InvokerEquippedEmbeddedMavenForWarSampleTestCase.java index 69f7f9b2..f06e08b9 100644 --- a/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/invoker/equipped/InvokerEquippedEmbeddedMavenForWarSampleTestCase.java +++ b/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/invoker/equipped/InvokerEquippedEmbeddedMavenForWarSampleTestCase.java @@ -52,12 +52,12 @@ void testWarSampleBuildWithMaven310() { BuiltProject builtProject = EmbeddedMaven .withMavenInvokerSet(request, invoker) - .useMaven3Version("3.9.16") + .useMaven3Version("3.10.0") .build(); builtProject.setMavenLog(logBuffer.toString()); verifyWarSampleWithSources(builtProject); - verifyMavenVersion(builtProject, "3.9.16"); + verifyMavenVersion(builtProject, "3.10.0"); } @Test diff --git a/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/pom/equipped/PomEquippedEmbeddedMavenForMultiModuleSampleTestCase.java b/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/pom/equipped/PomEquippedEmbeddedMavenForMultiModuleSampleTestCase.java index 84a257e1..3fbea672 100644 --- a/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/pom/equipped/PomEquippedEmbeddedMavenForMultiModuleSampleTestCase.java +++ b/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/pom/equipped/PomEquippedEmbeddedMavenForMultiModuleSampleTestCase.java @@ -32,7 +32,7 @@ class PomEquippedEmbeddedMavenForMultiModuleSampleTestCase { void testMultiModuleSampleBuildWithMaven310() { BuiltProject builtProject = EmbeddedMaven .forProject(workDirExtension.prepareProject(pathToMultiModulePom)) - .useMaven3Version("3.9.16") + .useMaven3Version("3.10.0") .setUserSettingsFile(new File("src/it/settings.xml")) .setGoals("install") .addProperty(multiModuleactivateModulesParamKey, multiModuleactivateModulesParamValue) @@ -40,7 +40,7 @@ void testMultiModuleSampleBuildWithMaven310() { .setShowVersion(true) .build(); - verifyMavenVersion(builtProject, "3.9.16"); + verifyMavenVersion(builtProject, "3.10.0"); verifyMultiModuleSample(builtProject, true); } diff --git a/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/pom/equipped/PomEquippedEmbeddedMavenForWarSampleTestCase.java b/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/pom/equipped/PomEquippedEmbeddedMavenForWarSampleTestCase.java index 27a373c2..ae35ee33 100644 --- a/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/pom/equipped/PomEquippedEmbeddedMavenForWarSampleTestCase.java +++ b/maven/impl-maven-embedded/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/embedded/pom/equipped/PomEquippedEmbeddedMavenForWarSampleTestCase.java @@ -26,13 +26,13 @@ void testWarSampleBuildWithMaven310() { BuiltProject builtProject = EmbeddedMaven .forProject(workDirExtension.prepareProject(pathToWarSamplePom)) .setUserSettingsFile(new File("src/it/settings.xml")) - .useMaven3Version("3.9.16") + .useMaven3Version("3.10.0") .setGoals("clean", "package", "source:jar") .setShowVersion(true) .build(); verifyWarSampleWithSources(builtProject); - verifyMavenVersion(builtProject, "3.9.16"); + verifyMavenVersion(builtProject, "3.10.0"); } @Test diff --git a/maven/impl-maven/pom.xml b/maven/impl-maven/pom.xml index a48f40a8..7d948367 100644 --- a/maven/impl-maven/pom.xml +++ b/maven/impl-maven/pom.xml @@ -152,7 +152,7 @@ org.apache.maven.resolver - maven-resolver-transport-http + maven-resolver-transport-apache diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java index e8770ce7..fcfb4ffb 100644 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java +++ b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java @@ -162,7 +162,9 @@ public MavenWorkingSession loadPomFromFile(File pomFile, Properties userProperti .setSystemProperties(SecurityActions.getProperties()).setProfiles(this.getSettingsDefinedProfiles()) .setPomFile(pomFile).setActiveProfileIds(SettingsXmlProfileSelector.explicitlyActivatedProfiles(profiles)) .setInactiveProfileIds(SettingsXmlProfileSelector.explicitlyDisabledProfiles(profiles)) - .setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL) + // Maven 3.10 treats models built with a validation level below 2.0 as external (resolved from a + // repository), which disables file based profile activation and restricts interpolation + .setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0) .setProcessPlugins(false); if (userProperties != null){ diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/aether/ClasspathWorkspaceReader.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/aether/ClasspathWorkspaceReader.java index 07133a83..1bfb7cc2 100644 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/aether/ClasspathWorkspaceReader.java +++ b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/aether/ClasspathWorkspaceReader.java @@ -179,8 +179,9 @@ public WorkspaceRepository getRepository() { return new WorkspaceRepository("classpath"); } + // Resolver 2.x collects dependencies in parallel, while the caches, DocumentBuilder and XPath are not thread safe @Override - public File findArtifact(final Artifact artifact) { + public synchronized File findArtifact(final Artifact artifact) { for (String classpathEntry : classPathEntries) { final FileInfo fileInfo = getClasspathFileInfo(classpathEntry); final File file = fileInfo.getFile(); diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/bootstrap/MavenRepositorySystem.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/bootstrap/MavenRepositorySystem.java index 9b981d1a..70262b8e 100644 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/bootstrap/MavenRepositorySystem.java +++ b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/bootstrap/MavenRepositorySystem.java @@ -27,6 +27,7 @@ import java.util.logging.Logger; import org.apache.maven.settings.Settings; +import org.eclipse.aether.ConfigurationProperties; import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; @@ -100,6 +101,13 @@ public DefaultRepositorySystemSession getSession(final Settings settings, boolea session.setSystemProperties(SecurityActions.getProperties()); session.setConfigProperties(SecurityActions.getProperties()); + // Resolver 2.x defaults to level-order (breadth-first) ordering of resolved artifacts, keep the pre-order + // (depth-first) ordering of Resolver 1.x unless explicitly overridden by a system property + if (!session.getConfigProperties().containsKey(ConfigurationProperties.REPOSITORY_SYSTEM_DEPENDENCY_VISITOR)) { + session.setConfigProperty(ConfigurationProperties.REPOSITORY_SYSTEM_DEPENDENCY_VISITOR, + ConfigurationProperties.REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_PREORDER); + } + return session; } @@ -194,6 +202,10 @@ public boolean accept(final DependencyNode node, List parents) { List ancestors = new ArrayList<>(); for (DependencyNode parent : parents) { + // Resolver 2.0.24 passes the node itself as the first element of parents + if (parent == node) { + continue; + } Dependency parentDependency = parent.getDependency(); if (parentDependency != null) { ancestors.add(MavenConverter.fromDependency(parentDependency)); diff --git a/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PropertiesInterpolationTestCase.java b/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PropertiesInterpolationTestCase.java index f3c6bf08..ff928870 100644 --- a/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PropertiesInterpolationTestCase.java +++ b/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PropertiesInterpolationTestCase.java @@ -36,6 +36,8 @@ */ class PropertiesInterpolationTestCase { + private static final String FULL_EXTERNAL_INTERPOLATION_PROPERTY = "maven.model.dependencyInterpolation.full"; + private static final File INTERPOLATED_REPOSITORY; static { String javaVersion = System.getProperty("java.version"); @@ -62,11 +64,26 @@ void interpolateSettingsXml() { @Test void interpolatePomWithSystemScopeXml() { + System.setProperty(FULL_EXTERNAL_INTERPOLATION_PROPERTY, "true"); + try { + File[] files = Maven.configureResolver().fromFile("target/settings/profiles/settings.xml") + .resolve("org.jboss.shrinkwrap.test:test-system-scope:pom:1.0.0") + .withTransitivity().asFile(); + + new ValidationUtil("test-system-scope").validate(files); + } finally { + System.clearProperty(FULL_EXTERNAL_INTERPOLATION_PROPERTY); + } + } + + // Maven 3.10 restricts interpolation in models resolved from a repository, so ${basedir} is not interpolated + @Test + void doNotInterpolateSystemScopeOfExternalPomByDefault() { File[] files = Maven.configureResolver().fromFile("target/settings/profiles/settings.xml") .resolve("org.jboss.shrinkwrap.test:test-system-scope:pom:1.0.0") .withTransitivity().asFile(); - new ValidationUtil("test-system-scope").validate(files); + Assertions.assertEquals(0, files.length, "System scoped dependency of an external pom is not resolved"); } } diff --git a/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/ResolutionOrderTestCase.java b/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/ResolutionOrderTestCase.java new file mode 100644 index 00000000..a0aa0284 --- /dev/null +++ b/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/ResolutionOrderTestCase.java @@ -0,0 +1,85 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2026, Red Hat Middleware LLC, and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.shrinkwrap.resolver.impl.maven.integration; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.eclipse.aether.ConfigurationProperties; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.jboss.shrinkwrap.resolver.impl.maven.bootstrap.MavenSettingsBuilder; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +/** + * Tests the order of resolved artifacts. Resolver 2.x defaults to level-order, ShrinkWrap keeps the pre-order + * ordering of Resolver 1.x unless it is overridden by a system property. + */ +class ResolutionOrderTestCase { + + @BeforeAll + static void setRemoteRepository() { + System + .setProperty(MavenSettingsBuilder.ALT_USER_SETTINGS_XML_LOCATION, "target/settings/profiles/settings.xml"); + System.setProperty(MavenSettingsBuilder.ALT_LOCAL_REPOSITORY_LOCATION, "target/the-other-repository"); + } + + @AfterAll + static void clearRemoteRepository() { + System.clearProperty(MavenSettingsBuilder.ALT_USER_SETTINGS_XML_LOCATION); + System.clearProperty(MavenSettingsBuilder.ALT_LOCAL_REPOSITORY_LOCATION); + } + + @AfterEach + void clearDependencyVisitor() { + System.clearProperty(ConfigurationProperties.REPOSITORY_SYSTEM_DEPENDENCY_VISITOR); + } + + // test-filter depends on test-deps-a, -c, -d and -e, test-deps-c depends on test-deps-b + @Test + void preOrderByDefault() { + File[] files = Maven.resolver().resolve("org.jboss.shrinkwrap.test:test-filter:pom:1.0.0") + .withTransitivity().asFile(); + + assertOrder(files, "test-deps-a", "test-deps-c", "test-deps-b", "test-deps-d", "test-deps-e"); + } + + @Test + void levelOrderViaSystemProperty() { + System.setProperty(ConfigurationProperties.REPOSITORY_SYSTEM_DEPENDENCY_VISITOR, + ConfigurationProperties.REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_LEVELORDER); + + File[] files = Maven.resolver().resolve("org.jboss.shrinkwrap.test:test-filter:pom:1.0.0") + .withTransitivity().asFile(); + + assertOrder(files, "test-deps-a", "test-deps-c", "test-deps-d", "test-deps-e", "test-deps-b"); + } + + private static void assertOrder(File[] files, String... expectedPrefixes) { + List actual = new ArrayList<>(); + for (File file : files) { + String name = file.getName(); + actual.add(name.substring(0, name.lastIndexOf('-'))); + } + Assertions.assertEquals(Arrays.asList(expectedPrefixes), actual); + } +} diff --git a/maven/maven-plugin/pom.xml b/maven/maven-plugin/pom.xml index 31d32a07..381199e0 100644 --- a/maven/maven-plugin/pom.xml +++ b/maven/maven-plugin/pom.xml @@ -49,7 +49,7 @@ org.apache.maven.resolver - maven-resolver-transport-http + maven-resolver-transport-apache @@ -148,6 +148,8 @@ shrinkwrap-resolver true + + 3.10.0 diff --git a/pom.xml b/pom.xml index 8ceacd7e..45bd49cd 100644 --- a/pom.xml +++ b/pom.xml @@ -34,14 +34,14 @@ 1.22.1 1.28.0 2.22.0 - 2.4.48 - 3.9.16 + 3.0.1 + 3.10.0 3.16.0 3.3.0 2.12.1 2.17.1 2.0 - 1.0.0 + 1.1.0 8.13 1.2.6 From 0939705bdf84a17d5cbe677556884199d6871ae8 Mon Sep 17 00:00:00 2001 From: Emond Papegaaij Date: Fri, 30 Oct 2026 10:40:49 +0100 Subject: [PATCH 2/2] Replace deprecated Resolver File and version selector APIs Use the Path based Resolver 2 APIs instead of the deprecated File based ones (Artifact, RepositoryEvent, LocalRepository) and ConfigurableVersionSelector with the Nearest strategy instead of NearestVersionSelector. The public ShrinkWrap API is unchanged. Co-Authored-By: Claude Opus 5.5 --- .../impl/maven/MavenResolvedArtifactImpl.java | 12 +++++++----- .../resolver/impl/maven/MavenWorkingSessionImpl.java | 2 +- .../impl/maven/aether/ClasspathWorkspaceReader.java | 5 ++--- .../impl/maven/bootstrap/MavenManagerBuilder.java | 12 ++++++------ .../impl/maven/internal/MavenModelResolver.java | 2 +- .../impl/maven/logging/LogRepositoryListener.java | 8 ++++---- .../maven/PackageDirectoriesWithClassesTestCase.java | 4 ++-- 7 files changed, 23 insertions(+), 22 deletions(-) diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenResolvedArtifactImpl.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenResolvedArtifactImpl.java index acd571a5..c5ef0b04 100644 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenResolvedArtifactImpl.java +++ b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenResolvedArtifactImpl.java @@ -135,20 +135,22 @@ private static File artifactToFile(final Artifact artifact) throws IllegalArgume throw new IllegalArgumentException("ArtifactResult must not be null"); } + final File file = artifact.getPath().toFile(); + // FIXME: this is not a safe assumption, file can have a different name - if ("pom.xml".equals(artifact.getFile().getName())) { + if ("pom.xml".equals(file.getName())) { String artifactId = artifact.getArtifactId(); String extension = artifact.getExtension(); String classifier = artifact.getClassifier(); - File root = new File(artifact.getFile().getParentFile(), "target/classes"); + File root = new File(file.getParentFile(), "target/classes"); if (!Validate.isNullOrEmpty(classifier) && "tests".equals(classifier)) { // SHRINKRES-102, allow test classes to be packaged as well - root = new File(artifact.getFile().getParentFile(), "target/test-classes"); + root = new File(file.getParentFile(), "target/test-classes"); } else if ("war".equals(artifact.getProperty(ArtifactProperties.TYPE, null))) { // SHRINKRES-263, allow .war files to be packaged as well - root = new File(artifact.getFile().getParentFile(), "target/" + artifactId + "-" + artifact.getVersion()); + root = new File(file.getParentFile(), "target/" + artifactId + "-" + artifact.getVersion()); } try { @@ -162,7 +164,7 @@ private static File artifactToFile(final Artifact artifact) throws IllegalArgume } } else { - return artifact.getFile(); + return file; } } diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java index fcfb4ffb..aeec971a 100644 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java +++ b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java @@ -281,7 +281,7 @@ private List filterFromLocal(final List depsFo .noneMatch(result -> MavenConverter.asArtifact(dependency, getSession().getArtifactTypeRegistry()) .setProperties(Collections.EMPTY_MAP) - .equals(result.getArtifact().setFile(null)))) + .equals(result.getArtifact().setPath(null)))) .collect(Collectors.toList()); } diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/aether/ClasspathWorkspaceReader.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/aether/ClasspathWorkspaceReader.java index 1bfb7cc2..68363d68 100644 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/aether/ClasspathWorkspaceReader.java +++ b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/aether/ClasspathWorkspaceReader.java @@ -341,9 +341,8 @@ private Artifact createFoundArtifact(final File pomFile) { version = getXPathParentVersionExpression().evaluate(pom); } - final Artifact foundArtifact = new DefaultArtifact(groupId + ":" + artifactId + ":" + type + ":" + version); - foundArtifact.setFile(pomFile); - return foundArtifact; + return new DefaultArtifact(groupId + ":" + artifactId + ":" + type + ":" + version) + .setPath(pomFile.toPath()); } catch (final Exception e) { throw new RuntimeException("Could not parse pom.xml: " + pomFile, e); } diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/bootstrap/MavenManagerBuilder.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/bootstrap/MavenManagerBuilder.java index cf1218f2..94905a98 100644 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/bootstrap/MavenManagerBuilder.java +++ b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/bootstrap/MavenManagerBuilder.java @@ -39,11 +39,11 @@ import org.eclipse.aether.util.artifact.DefaultArtifactTypeRegistry; import org.eclipse.aether.util.graph.manager.ClassicDependencyManager; import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer; +import org.eclipse.aether.util.graph.transformer.ConfigurableVersionSelector; import org.eclipse.aether.util.graph.transformer.ConflictResolver; import org.eclipse.aether.util.graph.transformer.JavaDependencyContextRefiner; import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver; import org.eclipse.aether.util.graph.transformer.JavaScopeSelector; -import org.eclipse.aether.util.graph.transformer.NearestVersionSelector; import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector; import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser; import org.eclipse.aether.util.repository.DefaultMirrorSelector; @@ -74,21 +74,21 @@ private enum SWRLocalRepositoryManager { @Override public LocalRepositoryManager localRepositoryManager(RepositorySystem system, RepositorySystemSession session, File localRepositoryPath) { - return system.newLocalRepositoryManager(session, new LocalRepository(localRepositoryPath, "simple")); + return system.newLocalRepositoryManager(session, new LocalRepository(localRepositoryPath.toPath(), "simple")); } }, ENHANCED { @Override public LocalRepositoryManager localRepositoryManager(RepositorySystem system, RepositorySystemSession session, File localRepositoryPath) { - return system.newLocalRepositoryManager(session, new LocalRepository(localRepositoryPath, "default")); + return system.newLocalRepositoryManager(session, new LocalRepository(localRepositoryPath.toPath(), "default")); } }, LEGACY { @Override public LocalRepositoryManager localRepositoryManager(RepositorySystem system, RepositorySystemSession session, File localRepositoryPath) { - return system.newLocalRepositoryManager(session, new LocalRepository(localRepositoryPath, "simple")); + return system.newLocalRepositoryManager(session, new LocalRepository(localRepositoryPath.toPath(), "simple")); } }; @@ -253,8 +253,8 @@ public DependencyTraverser dependencyTraverser() { */ public DependencyGraphTransformer dependencyGraphTransformer() { DependencyGraphTransformer transformer = - new ConflictResolver(new NearestVersionSelector(), new JavaScopeSelector(), - new SimpleOptionalitySelector(), new JavaScopeDeriver()); + new ConflictResolver(new ConfigurableVersionSelector(new ConfigurableVersionSelector.Nearest()), + new JavaScopeSelector(), new SimpleOptionalitySelector(), new JavaScopeDeriver()); return new ChainedDependencyGraphTransformer(transformer, new JavaDependencyContextRefiner()); } diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/internal/MavenModelResolver.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/internal/MavenModelResolver.java index fec13749..e6f15bb5 100644 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/internal/MavenModelResolver.java +++ b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/internal/MavenModelResolver.java @@ -135,7 +135,7 @@ public ModelSource resolveModel(String groupId, String artifactId, String versio + version + " due to " + e.getMessage(), groupId, artifactId, version, e); } - final File pomFile = pomArtifact.getFile(); + final File pomFile = pomArtifact.getPath().toFile(); return new FileModelSource(pomFile); diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/logging/LogRepositoryListener.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/logging/LogRepositoryListener.java index 8ad0cdb4..e3f4457e 100644 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/logging/LogRepositoryListener.java +++ b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/logging/LogRepositoryListener.java @@ -88,7 +88,7 @@ public void artifactDescriptorMissing(RepositoryEvent event) { */ @Override public void artifactInstalled(RepositoryEvent event) { - log.fine("Installed " + event.getArtifact() + " to " + event.getFile()); + log.fine("Installed " + event.getArtifact() + " to " + event.getPath()); } /* @@ -99,7 +99,7 @@ public void artifactInstalled(RepositoryEvent event) { */ @Override public void artifactInstalling(RepositoryEvent event) { - log.finer("Installing " + event.getArtifact() + " to " + event.getFile()); + log.finer("Installing " + event.getArtifact() + " to " + event.getPath()); } /* @@ -154,7 +154,7 @@ public void metadataDeploying(RepositoryEvent event) { */ @Override public void metadataInstalled(RepositoryEvent event) { - log.fine("Installed " + event.getMetadata() + " to " + event.getFile()); + log.fine("Installed " + event.getMetadata() + " to " + event.getPath()); } /* @@ -165,7 +165,7 @@ public void metadataInstalled(RepositoryEvent event) { */ @Override public void metadataInstalling(RepositoryEvent event) { - log.finer("Installing " + event.getMetadata() + " to " + event.getFile()); + log.finer("Installing " + event.getMetadata() + " to " + event.getPath()); } /* diff --git a/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/PackageDirectoriesWithClassesTestCase.java b/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/PackageDirectoriesWithClassesTestCase.java index bb7624a9..b60869f1 100644 --- a/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/PackageDirectoriesWithClassesTestCase.java +++ b/maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/PackageDirectoriesWithClassesTestCase.java @@ -47,7 +47,7 @@ void packageDirectoriesWithClasses() throws IOException { Mockito.when(testPomArtifactMock.getExtension()).thenReturn("xml"); Mockito.when(testPomArtifactMock.getClassifier()).thenReturn(""); Mockito.when(testPomArtifactMock.getVersion()).thenReturn("1.0.0"); - Mockito.when(testPomArtifactMock.getFile()).thenReturn(artifactFile); + Mockito.when(testPomArtifactMock.getPath()).thenReturn(artifactFile.toPath()); Mockito.when(testPomArtifactMock.getProperty(ArtifactProperties.TYPE, testPomArtifactMock.getExtension())) .thenReturn("pom"); @@ -85,7 +85,7 @@ void packageWar() throws IOException { Mockito.when(testPomArtifactMock.getExtension()).thenReturn("war"); Mockito.when(testPomArtifactMock.getClassifier()).thenReturn(""); Mockito.when(testPomArtifactMock.getVersion()).thenReturn("1.0.0"); - Mockito.when(testPomArtifactMock.getFile()).thenReturn(artifactFile); + Mockito.when(testPomArtifactMock.getPath()).thenReturn(artifactFile.toPath()); Mockito.when(testPomArtifactMock.getProperty(eq(ArtifactProperties.TYPE), any())).thenReturn("war"); ArtifactRequest artifactRequest = new ArtifactRequest();