diff --git a/pom.xml b/pom.xml index bb3114c5..1284f130 100644 --- a/pom.xml +++ b/pom.xml @@ -25,8 +25,8 @@ under the License. org.apache.maven.plugins maven-plugins - 34 - ../../pom/maven/maven-plugins/pom.xml + 36 + maven-deploy-plugin @@ -63,7 +63,9 @@ under the License. - 3.0 + 3.2.5 + 1.7.5 + 1.0.0.v20140518 7 2021-12-27T14:11:19Z @@ -73,50 +75,71 @@ under the License. org.apache.maven maven-plugin-api ${mavenVersion} + provided org.apache.maven maven-core ${mavenVersion} + provided org.apache.maven maven-model ${mavenVersion} + provided org.apache.maven maven-artifact ${mavenVersion} + provided + + + + org.slf4j + slf4j-api + ${slf4jVersion} + provided - org.apache.maven.shared maven-artifact-transfer 0.13.1 - commons-io commons-io - 2.5 + 2.6 - + + org.codehaus.plexus + plexus-utils + 3.3.1 + + + org.eclipse.aether + aether-api + ${resolverVersion} + + + org.eclipse.aether + aether-util + ${resolverVersion} + + org.apache.maven.plugin-tools maven-plugin-annotations provided - - org.codehaus.plexus - plexus-utils - 3.2.0 - + + org.apache.maven.plugin-testing maven-plugin-testing-harness - 2.1 + 3.3.0 test @@ -126,33 +149,45 @@ under the License. test - org.mockito - mockito-core - 2.28.2 + org.apache.maven + maven-aether-provider + ${mavenVersion} test - junit - junit - 4.13.1 + org.eclipse.aether + aether-connector-basic + ${resolverVersion} test - org.sonatype.aether - aether-connector-file - 1.7 + org.eclipse.aether + aether-transport-file + ${resolverVersion} test - org.slf4j - slf4j-api - 1.7.5 - provided + org.eclipse.aether + aether-transport-http + ${resolverVersion} + test + + + org.mockito + mockito-core + 2.28.2 + test + + + junit + junit + 4.13.2 + test org.slf4j slf4j-nop - 1.7.5 + ${slf4jVersion} test diff --git a/src/main/java/org/apache/maven/plugins/deploy/AbstractDeployMojo.java b/src/main/java/org/apache/maven/plugins/deploy/AbstractDeployMojo.java index f933e36c..3939a8ea 100644 --- a/src/main/java/org/apache/maven/plugins/deploy/AbstractDeployMojo.java +++ b/src/main/java/org/apache/maven/plugins/deploy/AbstractDeployMojo.java @@ -26,7 +26,12 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.rtinfo.RuntimeInformation; +import org.eclipse.aether.util.version.GenericVersionScheme; +import org.eclipse.aether.version.InvalidVersionSpecificationException; +import org.eclipse.aether.version.Version; /** * Abstract class for Deploy mojo's. @@ -52,7 +57,14 @@ public abstract class AbstractDeployMojo @Parameter( defaultValue = "${session}", readonly = true, required = true ) private MavenSession session; - + + @Component + private RuntimeInformation runtimeInformation; + + private static final String AFFECTED_MAVEN_PACKAGING = "maven-plugin"; + + private static final String FIXED_MAVEN_VERSION = "3.9.0"; + /* Setters and Getters */ void failIfOffline() @@ -79,4 +91,29 @@ protected final MavenSession getSession() { return session; } + + protected void warnIfAffectedPackagingAndMaven( final String packaging ) + { + if ( AFFECTED_MAVEN_PACKAGING.equals( packaging ) ) + { + try + { + GenericVersionScheme versionScheme = new GenericVersionScheme(); + Version fixedMavenVersion = versionScheme.parseVersion( FIXED_MAVEN_VERSION ); + Version currentMavenVersion = versionScheme.parseVersion( runtimeInformation.getMavenVersion() ); + if ( fixedMavenVersion.compareTo( currentMavenVersion ) > 0 ) + { + getLog().warn( "" ); + getLog().warn( "You are about to deploy a maven-plugin using Maven " + currentMavenVersion + "." ); + getLog().warn( "This plugin should be used ONLY with Maven 3.9.0 and newer, as MNG-7055" ); + getLog().warn( "is fixed in those versions of Maven only!" ); + getLog().warn( "" ); + } + } + catch ( InvalidVersionSpecificationException e ) + { + // skip it: Generic does not throw, only API contains this exception + } + } + } } diff --git a/src/main/java/org/apache/maven/plugins/deploy/DeployFileMojo.java b/src/main/java/org/apache/maven/plugins/deploy/DeployFileMojo.java index 43044218..12267e7e 100644 --- a/src/main/java/org/apache/maven/plugins/deploy/DeployFileMojo.java +++ b/src/main/java/org/apache/maven/plugins/deploy/DeployFileMojo.java @@ -481,6 +481,7 @@ public void execute() try { + warnIfAffectedPackagingAndMaven( packaging ); artifactDeployer.deploy( getSession().getProjectBuildingRequest(), deploymentRepository, deployableArtifacts ); } diff --git a/src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java b/src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java index ae26134b..4aaa971a 100644 --- a/src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java +++ b/src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java @@ -207,6 +207,7 @@ private void deployProject( ProjectBuildingRequest pbr, ProjectDeployerRequest p { try { + warnIfAffectedPackagingAndMaven( pir.getProject().getPackaging() ); projectDeployer.deploy( pbr, pir, repo ); } catch ( NoFileAssignedException e ) diff --git a/src/test/java/org/apache/maven/plugins/deploy/DeployFileMojoTest.java b/src/test/java/org/apache/maven/plugins/deploy/DeployFileMojoTest.java index 6c7064bb..371838bd 100644 --- a/src/test/java/org/apache/maven/plugins/deploy/DeployFileMojoTest.java +++ b/src/test/java/org/apache/maven/plugins/deploy/DeployFileMojoTest.java @@ -30,11 +30,12 @@ import org.apache.maven.model.Model; import org.apache.maven.plugin.testing.AbstractMojoTestCase; import org.apache.maven.project.ProjectBuildingRequest; -import org.apache.maven.repository.internal.MavenRepositorySystemSession; +import org.eclipse.aether.DefaultRepositorySystemSession; +import org.eclipse.aether.repository.LocalRepository; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager; +import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; /** * @author Allan Ramirez @@ -91,9 +92,10 @@ public void testBasicDeployFile() assertNotNull( mojo ); ProjectBuildingRequest buildingRequest = mock ( ProjectBuildingRequest.class ); + when( buildingRequest.getRepositoryMerging() ).thenReturn( ProjectBuildingRequest.RepositoryMerging.POM_DOMINANT ); when( session.getProjectBuildingRequest() ).thenReturn( buildingRequest ); - MavenRepositorySystemSession repositorySession = new MavenRepositorySystemSession(); - repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( LOCAL_REPO ) ); + DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession(); + repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repositorySession, new LocalRepository( LOCAL_REPO ) ) ); when( buildingRequest.getRepositorySession() ).thenReturn( repositorySession ); String groupId = (String) getVariableValueFromObject( mojo, "groupId" ); @@ -192,9 +194,10 @@ public void testDeployIfClassifierIsSet() assertNotNull( mojo ); ProjectBuildingRequest buildingRequest = mock ( ProjectBuildingRequest.class ); + when( buildingRequest.getRepositoryMerging() ).thenReturn( ProjectBuildingRequest.RepositoryMerging.POM_DOMINANT ); when( session.getProjectBuildingRequest() ).thenReturn( buildingRequest ); - MavenRepositorySystemSession repositorySession = new MavenRepositorySystemSession(); - repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( LOCAL_REPO ) ); + DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession(); + repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repositorySession, new LocalRepository( LOCAL_REPO ) ) ); when( buildingRequest.getRepositorySession() ).thenReturn( repositorySession ); String classifier = ( String ) getVariableValueFromObject( mojo, "classifier" ); @@ -240,9 +243,10 @@ public void testDeployIfArtifactIsNotJar() assertNotNull( mojo ); ProjectBuildingRequest buildingRequest = mock ( ProjectBuildingRequest.class ); + when( buildingRequest.getRepositoryMerging() ).thenReturn( ProjectBuildingRequest.RepositoryMerging.POM_DOMINANT ); when( session.getProjectBuildingRequest() ).thenReturn( buildingRequest ); - MavenRepositorySystemSession repositorySession = new MavenRepositorySystemSession(); - repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( LOCAL_REPO ) ); + DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession(); + repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repositorySession, new LocalRepository( LOCAL_REPO ) ) ); when( buildingRequest.getRepositorySession() ).thenReturn( repositorySession ); String groupId = (String) getVariableValueFromObject( mojo, "groupId" ); diff --git a/src/test/java/org/apache/maven/plugins/deploy/DeployMojoTest.java b/src/test/java/org/apache/maven/plugins/deploy/DeployMojoTest.java index 63fe2dee..6404f5ad 100644 --- a/src/test/java/org/apache/maven/plugins/deploy/DeployMojoTest.java +++ b/src/test/java/org/apache/maven/plugins/deploy/DeployMojoTest.java @@ -40,14 +40,15 @@ import org.apache.maven.plugins.deploy.stubs.DeployArtifactStub; import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuildingRequest; -import org.apache.maven.repository.internal.MavenRepositorySystemSession; import org.apache.maven.shared.transfer.project.deploy.ProjectDeployerRequest; import org.codehaus.plexus.util.FileUtils; +import org.eclipse.aether.DefaultRepositorySystemSession; +import org.eclipse.aether.repository.LocalRepository; import org.junit.Ignore; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager; +import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; /** * @author Allan Ramirez @@ -132,8 +133,8 @@ public void testBasicDeploy() ProjectBuildingRequest buildingRequest = mock ( ProjectBuildingRequest.class ); when( session.getProjectBuildingRequest() ).thenReturn( buildingRequest ); - MavenRepositorySystemSession repositorySession = new MavenRepositorySystemSession(); - repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( LOCAL_REPO ) ); + DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession(); + repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repositorySession, new LocalRepository( LOCAL_REPO ) ) ); when( buildingRequest.getRepositorySession() ).thenReturn( repositorySession ); File file = new File( getBasedir(), @@ -303,8 +304,8 @@ public void testBasicDeployWithPackagingAsPom() ProjectBuildingRequest buildingRequest = mock ( ProjectBuildingRequest.class ); when( session.getProjectBuildingRequest() ).thenReturn( buildingRequest ); - MavenRepositorySystemSession repositorySession = new MavenRepositorySystemSession(); - repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( LOCAL_REPO ) ); + DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession(); + repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repositorySession, new LocalRepository( LOCAL_REPO ) ) ); when( buildingRequest.getRepositorySession() ).thenReturn( repositorySession ); File pomFile = new File( getBasedir(), @@ -415,8 +416,8 @@ public void testDeployWithAttachedArtifacts() ProjectBuildingRequest buildingRequest = mock ( ProjectBuildingRequest.class ); when( session.getProjectBuildingRequest() ).thenReturn( buildingRequest ); - MavenRepositorySystemSession repositorySession = new MavenRepositorySystemSession(); - repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( LOCAL_REPO ) ); + DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession(); + repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repositorySession, new LocalRepository( LOCAL_REPO ) ) ); when( buildingRequest.getRepositorySession() ).thenReturn( repositorySession ); MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" ); diff --git a/src/test/java/org/apache/maven/plugins/deploy/Utils.java b/src/test/java/org/apache/maven/plugins/deploy/Utils.java index 4df74424..f4acbc9d 100644 --- a/src/test/java/org/apache/maven/plugins/deploy/Utils.java +++ b/src/test/java/org/apache/maven/plugins/deploy/Utils.java @@ -26,7 +26,7 @@ import java.util.Map; import org.apache.maven.plugin.MojoExecutionException; -import org.sonatype.aether.util.ChecksumUtils; +import org.eclipse.aether.util.ChecksumUtils; /** * A utility class to assist testing. diff --git a/src/test/java/org/apache/maven/plugins/deploy/stubs/ArtifactRepositoryStub.java b/src/test/java/org/apache/maven/plugins/deploy/stubs/ArtifactRepositoryStub.java index 0b94ebed..92db6c19 100644 --- a/src/test/java/org/apache/maven/plugins/deploy/stubs/ArtifactRepositoryStub.java +++ b/src/test/java/org/apache/maven/plugins/deploy/stubs/ArtifactRepositoryStub.java @@ -131,4 +131,16 @@ public boolean isBlacklisted() { return blacklisted; } + + // @Override + public boolean isBlocked() + { + return false; + } + + // @Override + public void setBlocked( boolean b ) + { + + } }