diff --git a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java index eddacd921..8f3f160f9 100644 --- a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java +++ b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java @@ -106,6 +106,7 @@ public static Test suite() // Tests that don't run stable and need to be fixed // ------------------------------------------------------------------------------------------------------------- // suite.addTestSuite( MavenIT0108SnapshotUpdateTest.class ); -- MNG-3137 + suite.addTestSuite( MavenITmng7529VersionRangeRepositorySelection.class ); suite.addTestSuite( MavenITmng7443ConsistencyOfOptionalProjectsAndProfilesTest.class ); suite.addTestSuite( MavenITmng7353CliGoalInvocationTest.class ); suite.addTestSuite( MavenITmng7504NotWarnUnsupportedReportPluginsTest.class ); diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng7529VersionRangeRepositorySelection.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng7529VersionRangeRepositorySelection.java new file mode 100644 index 000000000..341e657b2 --- /dev/null +++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng7529VersionRangeRepositorySelection.java @@ -0,0 +1,57 @@ +package org.apache.maven.it; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import java.io.File; +import java.util.Properties; +import org.apache.maven.it.util.ResourceExtractor; + +/** + * This is a test set for MNG-7529. + */ +public class MavenITmng7529VersionRangeRepositorySelection + extends AbstractMavenIntegrationTestCase { + + public MavenITmng7529VersionRangeRepositorySelection() { + super("(3.8.6,)"); + } + + /** + * Test dependency resolution from a version range using multiple remote repositories + * with snapshot or release enabled. + * + * @throws Exception in case of failure + */ + public void testit() + throws Exception { + File testDir = ResourceExtractor.simpleExtractResources(getClass(), "/mng-7529"); + Verifier verifier = newVerifier(testDir.getAbsolutePath()); + verifier.setAutoclean(false); + verifier.deleteDirectory("target"); + verifier.deleteArtifacts("org.apache.maven.its.mng7529"); + verifier.addCliOption("--settings"); + verifier.addCliOption("settings.xml"); + + verifier.filterFile("settings-template.xml", "settings.xml", "UTF-8", verifier.newDefaultFilterProperties()); + verifier.executeGoal("validate"); + verifier.verifyErrorFreeLog(); + verifier.resetStreams(); + } +} diff --git a/core-it-suite/src/test/resources/mng-7529/.gitattributes b/core-it-suite/src/test/resources/mng-7529/.gitattributes new file mode 100644 index 000000000..e3bce59d1 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/.gitattributes @@ -0,0 +1,3 @@ +*.pom text eol=lf +maven-metadata.xml text eol=lf + diff --git a/core-it-suite/src/test/resources/mng-7529/pom.xml b/core-it-suite/src/test/resources/mng-7529/pom.xml new file mode 100644 index 000000000..2a39a105e --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/pom.xml @@ -0,0 +1,62 @@ + + + + + + 4.0.0 + + org.apache.maven.its.mng7529 + test + 0.1 + jar + + Maven Integration Test :: MNG-7529 + + Verify that artifact ranges are resolved to the right release repository. + + + + + org.apache.maven.its.mng7529 + a + (0.0,] + + + + + + + org.apache.maven.its.plugins + mng-7529-version-range-repository-selection-plugin + 2.1-SNAPSHOT + + + resolve + validate + + resolve + + + + + + + + diff --git a/core-it-suite/src/test/resources/mng-7529/repo/.gitattributes b/core-it-suite/src/test/resources/mng-7529/repo/.gitattributes new file mode 100644 index 000000000..e3bce59d1 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/repo/.gitattributes @@ -0,0 +1,3 @@ +*.pom text eol=lf +maven-metadata.xml text eol=lf + diff --git a/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.jar b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.jar new file mode 100644 index 000000000..b3f60649d Binary files /dev/null and b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.jar differ diff --git a/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.jar.sha1 b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.jar.sha1 new file mode 100644 index 000000000..f3ef6b933 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.jar.sha1 @@ -0,0 +1 @@ +d532fcb4ba249192671e9954b80422819ce72679 diff --git a/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.pom b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.pom new file mode 100644 index 000000000..810c1b6d1 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.pom @@ -0,0 +1,28 @@ + + + + + + 4.0.0 + org.apache.maven.its.mng7529 + a + 1.0 + jar + diff --git a/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.pom.sha1 b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.pom.sha1 new file mode 100644 index 000000000..1bfa2dd51 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.0/a-1.0.pom.sha1 @@ -0,0 +1 @@ +e231c56d8ec5e15fa40147933ece7335cb450b80 diff --git a/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.jar b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.jar new file mode 100644 index 000000000..b3f60649d Binary files /dev/null and b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.jar differ diff --git a/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.jar.sha1 b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.jar.sha1 new file mode 100644 index 000000000..f3ef6b933 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.jar.sha1 @@ -0,0 +1 @@ +d532fcb4ba249192671e9954b80422819ce72679 diff --git a/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.pom b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.pom new file mode 100644 index 000000000..093ae54cf --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.pom @@ -0,0 +1,29 @@ + + + + + + 4.0.0 + + org.apache.maven.its.mng7529 + a + 1.1 + jar + diff --git a/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.pom.sha1 b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.pom.sha1 new file mode 100644 index 000000000..993259be3 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/1.1/a-1.1.pom.sha1 @@ -0,0 +1 @@ +2463dfbdb7f0a1efbb1163e39dfed1f5a4a8bdc5 diff --git a/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/maven-metadata.xml b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/maven-metadata.xml new file mode 100644 index 000000000..af588405f --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/maven-metadata.xml @@ -0,0 +1,13 @@ + + org.apache.maven.its.mng7529 + a + 1.0 + + 1.1 + + 1.0 + 1.1 + + 20220820180700 + + diff --git a/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/maven-metadata.xml.sha1 b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/maven-metadata.xml.sha1 new file mode 100644 index 000000000..e45bef318 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/repo/org/apache/maven/its/mng7529/a/maven-metadata.xml.sha1 @@ -0,0 +1 @@ +1879cdd62495339b931a092a7e899b2dce39b826 \ No newline at end of file diff --git a/core-it-suite/src/test/resources/mng-7529/settings-template.xml b/core-it-suite/src/test/resources/mng-7529/settings-template.xml new file mode 100644 index 000000000..2201ee377 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7529/settings-template.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + maven-core-it-repo + + + maven-core-it-snapshots + @baseurl@/repo + + false + + + ignore + + + + maven-core-it + @baseurl@/repo + + ignore + + + false + + + + + + + maven-core-it-repo + + diff --git a/core-it-support/core-it-plugins/mng7529-plugin/pom.xml b/core-it-support/core-it-plugins/mng7529-plugin/pom.xml new file mode 100644 index 000000000..a9a8a80cd --- /dev/null +++ b/core-it-support/core-it-plugins/mng7529-plugin/pom.xml @@ -0,0 +1,66 @@ + + + + + + 4.0.0 + + + maven-it-plugins + org.apache.maven.its.plugins + 2.1-SNAPSHOT + + + mng-7529-version-range-repository-selection-plugin + maven-plugin + + + 3.6.0 + + + Maven IT Plugin :: mng-7529 plugin + + + + org.apache.maven + maven-plugin-api + ${maven-version} + provided + + + org.apache.maven.plugin-tools + maven-plugin-annotations + provided + + + org.apache.maven + maven-core + ${maven-version} + provided + + + org.apache.maven + maven-model + ${maven-version} + provided + + + diff --git a/core-it-support/core-it-plugins/mng7529-plugin/src/main/java/org/apache/maven/its/mng7529/plugin/ResolveMojo.java b/core-it-support/core-it-plugins/mng7529-plugin/src/main/java/org/apache/maven/its/mng7529/plugin/ResolveMojo.java new file mode 100644 index 000000000..5582f112e --- /dev/null +++ b/core-it-support/core-it-plugins/mng7529-plugin/src/main/java/org/apache/maven/its/mng7529/plugin/ResolveMojo.java @@ -0,0 +1,77 @@ +package org.apache.maven.its.mng7529.plugin; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.Component; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.DefaultDependencyResolutionRequest; +import org.apache.maven.project.DefaultProjectBuildingRequest; +import org.apache.maven.project.DependencyResolutionRequest; +import org.apache.maven.project.DependencyResolutionResult; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectDependenciesResolver; + +/** + * Attempts to resolve a single artifact from dependencies with the project dependency resolver, + * and logs the results for the Verifier to look at. + */ +@Mojo( name = "resolve", requiresDependencyResolution = ResolutionScope.NONE ) +public class ResolveMojo + extends AbstractMojo +{ + @Parameter( defaultValue = "${project}", readonly = true, required = true ) + private MavenProject project; + + @Parameter( defaultValue = "${session}", readonly = true, required = true ) + private MavenSession mavenSession; + + @Component + private ProjectDependenciesResolver dependencyResolver; + + public void execute() + throws MojoExecutionException + { + + try + { + DefaultProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest( + mavenSession.getProjectBuildingRequest() ); + buildingRequest.setRemoteRepositories( project.getRemoteArtifactRepositories() ); + + DependencyResolutionRequest request = new DefaultDependencyResolutionRequest(); + request.setMavenProject( project ); + request.setRepositorySession( buildingRequest.getRepositorySession() ); + + DependencyResolutionResult result = dependencyResolver.resolve( request ); + + getLog().info( "Resolution successful, resolved ok" ); + } + catch ( Exception e ) + { + getLog().error( "Resolution failed, could not resolve ranged dependency" + + " (you hit MNG-7529)" ); + } + } +} diff --git a/core-it-support/core-it-plugins/pom.xml b/core-it-support/core-it-plugins/pom.xml index 95932b95e..ed0e815a5 100644 --- a/core-it-support/core-it-plugins/pom.xml +++ b/core-it-support/core-it-plugins/pom.xml @@ -84,6 +84,7 @@ under the License. mng5805-plugin-dep mng5958-extension mng6759-plugin-resolves-project-dependencies + mng7529-plugin