You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/07/12 11:16:53 UTC
[maven-deploy-plugin] 02/02: Cleanup
This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch full-resolver
in repository https://gitbox.apache.org/repos/asf/maven-deploy-plugin.git
commit 241c28b0c85ae4e097a233992cc5de885a6cf54f
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Tue Jul 12 13:16:38 2022 +0200
Cleanup
---
.../maven/plugins/deploy/AbstractDeployMojo.java | 51 +---
.../maven/plugins/deploy/DeployFileMojo.java | 272 ++++++++++++---------
.../apache/maven/plugins/deploy/DeployMojo.java | 108 ++++----
.../maven/plugins/deploy/DeployMojoTest.java | 79 +++---
4 files changed, 261 insertions(+), 249 deletions(-)
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 dda506b..42dda04 100644
--- a/src/main/java/org/apache/maven/plugins/deploy/AbstractDeployMojo.java
+++ b/src/main/java/org/apache/maven/plugins/deploy/AbstractDeployMojo.java
@@ -19,28 +19,18 @@ package org.apache.maven.plugins.deploy;
* under the License.
*/
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
-import org.apache.maven.artifact.repository.MavenArtifactRepository;
-import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.artifact.ProjectArtifactMetadata;
import org.apache.maven.rtinfo.RuntimeInformation;
import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.deployment.DeployRequest;
import org.eclipse.aether.deployment.DeploymentException;
import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.util.artifact.SubArtifact;
import org.eclipse.aether.util.version.GenericVersionScheme;
import org.eclipse.aether.version.InvalidVersionSpecificationException;
import org.eclipse.aether.version.Version;
@@ -90,12 +80,6 @@ public abstract class AbstractDeployMojo
}
}
- protected ArtifactRepository createDeploymentArtifactRepository( String id, String url )
- {
- return new MavenArtifactRepository( id, url, new DefaultRepositoryLayout(), new ArtifactRepositoryPolicy(),
- new ArtifactRepositoryPolicy() );
- }
-
protected void warnIfAffectedPackagingAndMaven( final String packaging )
{
if ( AFFECTED_MAVEN_PACKAGING.equals( packaging ) )
@@ -121,9 +105,9 @@ public abstract class AbstractDeployMojo
}
}
- private RemoteRepository getRemoteRepository( ArtifactRepository remoteRepository )
+ protected RemoteRepository getRemoteRepository( final String repositoryId, final String url )
{
- RemoteRepository result = RepositoryUtils.toRepo( remoteRepository );
+ RemoteRepository result = new RemoteRepository.Builder( repositoryId, "default", url ).build();
if ( result.getAuthentication() == null || result.getProxy() == null )
{
@@ -146,29 +130,10 @@ public abstract class AbstractDeployMojo
return result;
}
- protected DeployRequest deployRequest( ArtifactRepository repository, List<Artifact> artifacts )
- {
- DeployRequest deployRequest = new DeployRequest();
- deployRequest.setRepository( getRemoteRepository( repository ) );
- for ( Artifact artifact : artifacts )
- {
- org.eclipse.aether.artifact.Artifact aetherArtifact = RepositoryUtils.toArtifact( artifact );
- deployRequest.addArtifact( aetherArtifact );
-
- for ( ArtifactMetadata metadata : artifact.getMetadataList() )
- {
- if ( metadata instanceof ProjectArtifactMetadata )
- {
- org.eclipse.aether.artifact.Artifact pomArtifact = new SubArtifact( aetherArtifact, "", "pom" );
- pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
- deployRequest.addArtifact( pomArtifact );
- }
- }
- }
- return deployRequest;
- }
-
- protected void deploy( DeployRequest deployRequest ) throws MojoExecutionException
+ /**
+ * Handles high level retries (this was buried into MAT).
+ */
+ protected void deploy( RepositorySystemSession session, DeployRequest deployRequest ) throws MojoExecutionException
{
int retryFailedDeploymentCounter = Math.max( 1, Math.min( 10, retryFailedDeploymentCount ) );
DeploymentException exception = null;
@@ -182,7 +147,7 @@ public abstract class AbstractDeployMojo
+ retryFailedDeploymentCounter );
}
- repositorySystem.deploy( session.getRepositorySession(), deployRequest );
+ repositorySystem.deploy( session, deployRequest );
exception = null;
break;
}
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 eb2e42d..a51b4a7 100644
--- a/src/main/java/org/apache/maven/plugins/deploy/DeployFileMojo.java
+++ b/src/main/java/org/apache/maven/plugins/deploy/DeployFileMojo.java
@@ -27,40 +27,34 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
-import java.util.ArrayList;
import java.util.Enumeration;
-import java.util.List;
+import java.util.Objects;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.regex.Pattern;
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.model.Model;
import org.apache.maven.model.Parent;
-import org.apache.maven.model.building.ModelBuildingException;
-import org.apache.maven.model.building.ModelSource;
-import org.apache.maven.model.building.StringModelSource;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-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.project.DefaultProjectBuildingRequest;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectHelper;
-import org.apache.maven.project.ProjectBuilder;
-import org.apache.maven.project.ProjectBuildingException;
-import org.apache.maven.project.artifact.ProjectArtifactMetadata;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.WriterFactory;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.ArtifactType;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.deployment.DeployRequest;
+import org.eclipse.aether.deployment.DeploymentException;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.util.artifact.SubArtifact;
/**
* Installs the artifact in the remote repository.
@@ -71,19 +65,7 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
public class DeployFileMojo
extends AbstractDeployMojo
{
- private static final String LINE_SEP = System.getProperty( "line.separator" );
-
- /**
- * Used for attaching the artifacts to deploy to the project.
- */
- @Component
- private MavenProjectHelper projectHelper;
-
- /**
- * Used for creating the project to which the artifacts to deploy will be attached.
- */
- @Component
- private ProjectBuilder projectBuilder;
+ private static final String LS = System.getProperty( "line.separator" );
/**
* GroupId of the artifact to be deployed. Retrieved from POM file if specified.
@@ -285,7 +267,7 @@ public class DeployFileMojo
if ( packaging == null && file != null )
{
- packaging = FileUtils.getExtension( file.getName() );
+ packaging = getExtension( file );
}
}
@@ -301,68 +283,84 @@ public class DeployFileMojo
initProperties();
- ArtifactRepository deploymentRepository = createDeploymentArtifactRepository( repositoryId, url );
-
- String protocol = deploymentRepository.getProtocol();
+ RemoteRepository remoteRepository = getRemoteRepository( repositoryId, url );
- if ( StringUtils.isEmpty( protocol ) )
+ if ( StringUtils.isEmpty( remoteRepository.getProtocol() ) )
{
throw new MojoExecutionException( "No transfer protocol found." );
}
- MavenProject project = createMavenProject();
- Artifact artifact = project.getArtifact();
+ if ( groupId == null || artifactId == null || version == null || packaging == null )
+ {
+ throw new MojoExecutionException( "The artifact information is incomplete: 'groupId', 'artifactId', "
+ + "'version' and 'packaging' are required." );
+ }
- if ( file.equals( getLocalRepoFile( artifact ) ) )
+ if ( !isValidId( groupId )
+ || !isValidId( artifactId )
+ || !isValidVersion( version ) )
{
- throw new MojoFailureException( "Cannot deploy artifact from the local repository: " + file );
+ throw new MojoExecutionException( "The artifact information is not valid: uses invalid characters." );
}
- List<Artifact> deployableArtifacts = new ArrayList<Artifact>();
+ DeployRequest deployRequest = new DeployRequest();
+ deployRequest.setRepository( remoteRepository );
- if ( classifier == null )
+ boolean isFilePom = classifier == null && "pom".equals( packaging );
+ if ( !isFilePom )
{
- artifact.setFile( file );
- deployableArtifacts.add( artifact );
+ ArtifactType artifactType = session.getRepositorySession().getArtifactTypeRegistry().get( packaging );
+ if ( artifactType != null
+ && StringUtils.isEmpty( classifier )
+ && !StringUtils.isEmpty( artifactType.getClassifier() ) )
+ {
+ classifier = artifactType.getClassifier();
+ }
}
- else
+ Artifact mainArtifact = new DefaultArtifact(
+ groupId,
+ artifactId,
+ classifier,
+ isFilePom ? "pom" : getExtension( file ),
+ version
+ ).setFile( file );
+ deployRequest.addArtifact( mainArtifact );
+
+ File artifactLocalFile = getLocalRepositoryFile( session.getRepositorySession(), mainArtifact );
+ File pomLocalFile = getPomLocalRepositoryFile( session.getRepositorySession(), mainArtifact );
+
+ if ( file.equals( artifactLocalFile ) )
{
- projectHelper.attachArtifact( project, packaging, classifier, file );
+ throw new MojoFailureException( "Cannot deploy artifact from the local repository: " + file );
}
- // Upload the POM if requested, generating one if need be
+ File temporaryPom = null;
if ( !"pom".equals( packaging ) )
{
- File pom = pomFile;
- if ( pom == null && generatePom )
+ if ( pomFile != null )
{
- pom = generatePomFile();
+ deployRequest.addArtifact( new SubArtifact( mainArtifact, "", "pom", pomFile ) );
}
- if ( pom != null )
+ else if ( generatePom )
{
- if ( classifier == null )
- {
- ProjectArtifactMetadata metadata = new ProjectArtifactMetadata( artifact, pom );
- artifact.addMetadata( metadata );
- }
- else
- {
- artifact.setFile( pom );
- deployableArtifacts.add( artifact );
- }
+ temporaryPom = generatePomFile();
+ getLog().debug( "Deploying generated POM" );
+ deployRequest.addArtifact( new SubArtifact( mainArtifact, "", "pom", temporaryPom ) );
+ }
+ else
+ {
+ getLog().debug( "Skipping deploying POM" );
}
}
- artifact.setRepository( deploymentRepository );
-
if ( sources != null )
{
- projectHelper.attachArtifact( project, "jar", "sources", sources );
+ deployRequest.addArtifact( new SubArtifact( mainArtifact, "sources", "jar", sources ) );
}
if ( javadoc != null )
{
- projectHelper.attachArtifact( project, "jar", "javadoc", javadoc );
+ deployRequest.addArtifact( new SubArtifact( mainArtifact, "javadoc", "jar", javadoc ) );
}
if ( files != null )
@@ -381,12 +379,12 @@ public class DeployFileMojo
if ( typesLength != filesLength )
{
throw new MojoExecutionException( "You must specify the same number of entries in 'files' and "
- + "'types' (respectively " + filesLength + " and " + typesLength + " entries )" );
+ + "'types' (respectively " + filesLength + " and " + typesLength + " entries )" );
}
if ( classifiersLength != filesLength )
{
throw new MojoExecutionException( "You must specify the same number of entries in 'files' and "
- + "'classifiers' (respectively " + filesLength + " and " + classifiersLength + " entries )" );
+ + "'classifiers' (respectively " + filesLength + " and " + classifiersLength + " entries )" );
}
int fi = 0;
int ti = 0;
@@ -412,19 +410,21 @@ public class DeployFileMojo
if ( !file.isFile() )
{
// try relative to the project basedir just in case
- file = new File( project.getBasedir(), files.substring( fi, nfi ) );
+ file = new File( files.substring( fi, nfi ) );
}
if ( file.isFile() )
{
- if ( StringUtils.isWhitespace( classifiers.substring( ci, nci ) ) )
- {
- projectHelper.attachArtifact( project, types.substring( ti, nti ).trim(), file );
- }
- else
+ String extension = getExtension( file );
+ ArtifactType artifactType = session.getRepositorySession().getArtifactTypeRegistry()
+ .get( types.substring( ti, nti ).trim() );
+ if ( artifactType != null && !Objects.equals( extension, artifactType.getExtension() ) )
{
- projectHelper.attachArtifact( project, types.substring( ti, nti ).trim(),
- classifiers.substring( ci, nci ).trim(), file );
+ extension = artifactType.getExtension();
}
+
+ deployRequest.addArtifact(
+ new SubArtifact( mainArtifact, classifiers.substring( ci, nci ).trim(), extension, file )
+ );
}
else
{
@@ -447,62 +447,43 @@ public class DeployFileMojo
}
}
- deployableArtifacts.addAll( project.getAttachedArtifacts() );
-
- warnIfAffectedPackagingAndMaven( packaging );
- deploy( deployRequest( deploymentRepository, deployableArtifacts ) );
- }
-
- /**
- * Creates a Maven project in-memory from the user-supplied groupId, artifactId and version. When a classifier is
- * supplied, the packaging must be POM because the project with only have attachments. This project serves as basis
- * to attach the artifacts to deploy to.
- *
- * @return The created Maven project, never <code>null</code>.
- * @throws MojoExecutionException When the model of the project could not be built.
- * @throws MojoFailureException When building the project failed.
- */
- private MavenProject createMavenProject()
- throws MojoExecutionException, MojoFailureException
- {
- if ( groupId == null || artifactId == null || version == null || packaging == null )
- {
- throw new MojoExecutionException( "The artifact information is incomplete: 'groupId', 'artifactId', "
- + "'version' and 'packaging' are required." );
- }
- ModelSource modelSource =
- new StringModelSource( "<project>" + "<modelVersion>4.0.0</modelVersion>" + "<groupId>" + groupId
- + "</groupId>" + "<artifactId>" + artifactId + "</artifactId>" + "<version>" + version + "</version>"
- + "<packaging>" + ( classifier == null ? packaging : "pom" ) + "</packaging>" + "</project>" );
- DefaultProjectBuildingRequest buildingRequest =
- new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
- buildingRequest.setProcessPlugins( false );
try
{
- return projectBuilder.build( modelSource, buildingRequest ).getProject();
+ repositorySystem.deploy( session.getRepositorySession(), deployRequest );
+ }
+ catch ( DeploymentException e )
+ {
+ throw new MojoExecutionException( e.getMessage(), e );
}
- catch ( ProjectBuildingException e )
+ finally
{
- if ( e.getCause() instanceof ModelBuildingException )
+ if ( temporaryPom != null )
{
- throw new MojoExecutionException( "The artifact information is not valid:" + LINE_SEP
- + e.getCause().getMessage() );
+ // noinspection ResultOfMethodCallIgnored
+ temporaryPom.delete();
}
- throw new MojoFailureException( "Unable to create the project.", e );
}
}
/**
- * Gets the path of the artifact constructed from the supplied groupId, artifactId, version, classifier and
- * packaging within the local repository. Note that the returned path need not exist (yet).
- *
- * @return The absolute path to the artifact when installed, never <code>null</code>.
+ * Gets the path of the specified artifact within the local repository. Note that the returned path need not exist
+ * (yet).
+ */
+ private File getLocalRepositoryFile( RepositorySystemSession session, Artifact artifact )
+ {
+ String path = session.getLocalRepositoryManager().getPathForLocalArtifact( artifact );
+ return new File( session.getLocalRepository().getBasedir(), path );
+ }
+
+ /**
+ * Gets the path of the specified artifact POM within the local repository. Note that the returned path need
+ * not exist (yet).
*/
- private File getLocalRepoFile( Artifact artifact )
+ private File getPomLocalRepositoryFile( RepositorySystemSession session, Artifact artifact )
{
- String path = session.getRepositorySession().getLocalRepositoryManager().getPathForLocalArtifact(
- RepositoryUtils.toArtifact( artifact ) );
- return new File( session.getRepositorySession().getLocalRepository().getBasedir(), path );
+ SubArtifact pomArtifact = new SubArtifact( artifact, "", "pom" );
+ String path = session.getLocalRepositoryManager().getPathForLocalArtifact( pomArtifact );
+ return new File( session.getLocalRepository().getBasedir(), path );
}
/**
@@ -694,4 +675,63 @@ public class DeployFileMojo
this.classifier = classifier;
}
+ // these below should be shared (duplicated in m-install-p, m-deploy-p)
+
+ /**
+ * Specialization of {@link FileUtils#getExtension(String)} that honors various {@code tar.xxx} combinations.
+ */
+ private String getExtension( final File file )
+ {
+ String filename = file.getName();
+ if ( filename.contains( ".tar." ) )
+ {
+ return "tar." + FileUtils.getExtension( filename );
+ }
+ else
+ {
+ return FileUtils.getExtension( filename );
+ }
+ }
+
+ /**
+ * Returns {@code true} if passed in string is "valid Maven ID" (groupId or artifactId).
+ */
+ private boolean isValidId( String id )
+ {
+ if ( id == null )
+ {
+ return false;
+ }
+ for ( int i = 0; i < id.length(); i++ )
+ {
+ char c = id.charAt( i );
+ if ( !( c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'
+ || c >= '0' && c <= '9' || c == '-' || c == '_' || c == '.' ) )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static final String ILLEGAL_VERSION_CHARS = "\\/:\"<>|?*[](){},";
+
+ /**
+ * Returns {@code true} if passed in string is "valid Maven (simple. non range, expression, etc) version".
+ */
+ private boolean isValidVersion( String version )
+ {
+ if ( version == null )
+ {
+ return false;
+ }
+ for ( int i = version.length() - 1; i >= 0; i-- )
+ {
+ if ( ILLEGAL_VERSION_CHARS.indexOf( version.charAt( i ) ) >= 0 )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
}
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 98223ee..9ae0e8c 100644
--- a/src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java
+++ b/src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java
@@ -20,15 +20,13 @@ package org.apache.maven.plugins.deploy;
*/
import java.io.File;
-import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.apache.maven.artifact.Artifact;
+import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.ArtifactUtils;
-import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
@@ -36,8 +34,11 @@ import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.ProjectArtifact;
import org.apache.maven.project.artifact.ProjectArtifactMetadata;
import org.eclipse.aether.deployment.DeployRequest;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.util.artifact.SubArtifact;
/**
* Deploys an artifact to remote repository.
@@ -189,7 +190,8 @@ public class DeployMojo
if ( !deployAtEnd )
{
- deploy( processProject( project,
+ deploy( session.getRepositorySession(),
+ processProject( project,
altSnapshotDeploymentRepository, altReleaseDeploymentRepository, altDeploymentRepository ) );
putState( State.DEPLOYED );
}
@@ -199,7 +201,8 @@ public class DeployMojo
putPluginContextValue( DEPLOY_ALT_SNAPSHOT_DEPLOYMENT_REPOSITORY, altSnapshotDeploymentRepository );
putPluginContextValue( DEPLOY_ALT_DEPLOYMENT_REPOSITORY, altDeploymentRepository );
putState( State.TO_BE_DEPLOYED );
- getLog().info( "Deferring deploy for " + getProjectReferenceId( project ) + " at end" );
+ getLog().info( "Deferring deploy for " + project.getGroupId()
+ + ":" + project.getArtifactId() + ":" + project.getVersion() + " at end" );
}
}
@@ -218,7 +221,8 @@ public class DeployMojo
String altDeploymentRepository =
getPluginContextValue( pluginContext, DEPLOY_ALT_DEPLOYMENT_REPOSITORY );
- deploy( processProject( reactorProject,
+ deploy( session.getRepositorySession(),
+ processProject( reactorProject,
altSnapshotDeploymentRepository, altReleaseDeploymentRepository, altDeploymentRepository )
);
}
@@ -226,11 +230,6 @@ public class DeployMojo
}
}
- private String getProjectReferenceId( MavenProject mavenProject )
- {
- return mavenProject.getGroupId() + ":" + mavenProject.getArtifactId() + ":" + mavenProject.getVersion();
- }
-
private boolean allProjectsMarked()
{
for ( MavenProject reactorProject : reactorProjects )
@@ -249,37 +248,47 @@ public class DeployMojo
final String altDeploymentRepository )
throws MojoExecutionException, MojoFailureException
{
- ArrayList<Artifact> deployableArtifacts = new ArrayList<>();
- Artifact artifact = project.getArtifact();
+ DeployRequest request = new DeployRequest();
+ request.setRepository( getDeploymentRepository( project,
+ altSnapshotDeploymentRepository, altReleaseDeploymentRepository, altDeploymentRepository ) );
+
+ org.apache.maven.artifact.Artifact mavenMainArtifact = project.getArtifact();
String packaging = project.getPackaging();
File pomFile = project.getFile();
- List<Artifact> attachedArtifacts = project.getAttachedArtifacts();
-
- // Deploy the POM
boolean isPomArtifact = "pom".equals( packaging );
- if ( isPomArtifact )
- {
- artifact.setFile( pomFile );
- }
- else
- {
- ProjectArtifactMetadata metadata = new ProjectArtifactMetadata( artifact, pomFile );
- artifact.addMetadata( metadata );
- }
+ boolean pomArtifactAttached = false;
- if ( isPomArtifact )
+ if ( pomFile != null )
{
- deployableArtifacts.add( artifact );
+ request.addArtifact( RepositoryUtils.toArtifact( new ProjectArtifact( project ) ) );
+ pomArtifactAttached = true;
}
- else
- {
- File file = artifact.getFile();
+ if ( !isPomArtifact )
+ {
+ File file = mavenMainArtifact.getFile();
if ( file != null && file.isFile() )
{
- deployableArtifacts.add( artifact );
+ org.eclipse.aether.artifact.Artifact mainArtifact = RepositoryUtils.toArtifact( mavenMainArtifact );
+ request.addArtifact( mainArtifact );
+
+ if ( !pomArtifactAttached )
+ {
+ for ( Object metadata : mavenMainArtifact.getMetadataList() )
+ {
+ if ( metadata instanceof ProjectArtifactMetadata )
+ {
+ request.addArtifact( new SubArtifact(
+ mainArtifact,
+ "",
+ "pom"
+ ).setFile( ( (ProjectArtifactMetadata) metadata ).getFile() ) );
+ pomArtifactAttached = true;
+ }
+ }
+ }
}
- else if ( !attachedArtifacts.isEmpty() )
+ else if ( !project.getAttachedArtifacts().isEmpty() )
{
throw new MojoExecutionException( "The packaging plugin for this project did not assign "
+ "a main file to the project but it has attachments. Change packaging to 'pom'." );
@@ -290,25 +299,32 @@ public class DeployMojo
+ "a file to the build artifact" );
}
}
- deployableArtifacts.addAll( attachedArtifacts );
- return deployRequest(
- getDeploymentRepository( project,
- altSnapshotDeploymentRepository, altReleaseDeploymentRepository, altDeploymentRepository ),
- deployableArtifacts
- );
+
+ if ( !pomArtifactAttached )
+ {
+ throw new MojoExecutionException( "The POM could not be attached" );
+ }
+
+ for ( org.apache.maven.artifact.Artifact attached : project.getAttachedArtifacts() )
+ {
+ getLog().debug( "Attaching for install: " + attached.getId() );
+ request.addArtifact( RepositoryUtils.toArtifact( attached ) );
+ }
+
+ return request;
}
/**
* Visible for testing.
*/
- ArtifactRepository getDeploymentRepository( final MavenProject project,
- final String altSnapshotDeploymentRepository,
- final String altReleaseDeploymentRepository,
- final String altDeploymentRepository )
+ RemoteRepository getDeploymentRepository( final MavenProject project,
+ final String altSnapshotDeploymentRepository,
+ final String altReleaseDeploymentRepository,
+ final String altDeploymentRepository )
throws MojoExecutionException, MojoFailureException
{
- ArtifactRepository repo = null;
+ RemoteRepository repo = null;
String altDeploymentRepo;
if ( ArtifactUtils.isSnapshot( project.getVersion() ) && altSnapshotDeploymentRepository != null )
@@ -340,7 +356,7 @@ public class DeployMojo
{
getLog().warn( "Using legacy syntax for alternative repository. "
+ "Use \"" + id + "::" + url + "\" instead." );
- repo = createDeploymentArtifactRepository( id, url );
+ repo = getRemoteRepository( id, url );
}
else
{
@@ -367,14 +383,14 @@ public class DeployMojo
String id = matcher.group( 1 ).trim();
String url = matcher.group( 2 ).trim();
- repo = createDeploymentArtifactRepository( id, url );
+ repo = getRemoteRepository( id, url );
}
}
}
if ( repo == null )
{
- repo = project.getDistributionManagementArtifactRepository();
+ repo = RepositoryUtils.toRepo( project.getDistributionManagementArtifactRepository() );
}
if ( repo == null )
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 49f645b..f34abd0 100644
--- a/src/test/java/org/apache/maven/plugins/deploy/DeployMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/deploy/DeployMojoTest.java
@@ -20,6 +20,7 @@ package org.apache.maven.plugins.deploy;
*/
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -31,7 +32,6 @@ import java.util.List;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
-import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
@@ -46,9 +46,9 @@ import org.codehaus.plexus.util.FileUtils;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
import org.junit.Ignore;
import org.mockito.InjectMocks;
-import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
@@ -83,6 +83,9 @@ public class DeployMojoTest
session = mock( MavenSession.class );
when( session.getPluginContext(any(PluginDescriptor.class), any(MavenProject.class)))
.thenReturn( new ConcurrentHashMap<String, Object>() );
+ DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession();
+ repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repositorySession, new LocalRepository( LOCAL_REPO ) ) );
+ when( session.getRepositorySession() ).thenReturn( repositorySession );
remoteRepo = new File( REMOTE_REPO );
@@ -99,8 +102,6 @@ public class DeployMojoTest
{
FileUtils.deleteDirectory( remoteRepo );
}
-
-
}
public void tearDown()
@@ -135,7 +136,7 @@ public class DeployMojoTest
MockitoAnnotations.initMocks( this );
assertNotNull( mojo );
-
+
ProjectBuildingRequest buildingRequest = mock ( ProjectBuildingRequest.class );
when( session.getProjectBuildingRequest() ).thenReturn( buildingRequest );
DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession();
@@ -150,6 +151,9 @@ public class DeployMojoTest
assertTrue( file.exists() );
MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" );
+ project.setGroupId( "org.apache.maven.test" );
+ project.setArtifactId( "maven-deploy-test" );
+ project.setVersion( "1.0-SNAPSHOT" );
setVariableValueToObject( mojo, "pluginContext", new ConcurrentHashMap<>() );
setVariableValueToObject( mojo, "reactorProjects", Collections.singletonList( project ) );
@@ -326,6 +330,9 @@ public class DeployMojoTest
assertTrue( pomFile.exists() );
MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" );
+ project.setGroupId( "org.apache.maven.test" );
+ project.setArtifactId( "maven-deploy-test" );
+ project.setVersion( "1.0-SNAPSHOT" );
setVariableValueToObject( mojo, "pluginContext", new ConcurrentHashMap<>() );
setVariableValueToObject( mojo, "reactorProjects", Collections.singletonList( project ) );
@@ -392,6 +399,9 @@ public class DeployMojoTest
assertNotNull( mojo );
MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" );
+ project.setGroupId( "org.apache.maven.test" );
+ project.setArtifactId( "maven-deploy-test" );
+ project.setVersion( "1.0-SNAPSHOT" );
setVariableValueToObject( mojo, "pluginContext", new ConcurrentHashMap<>() );
setVariableValueToObject( mojo, "reactorProjects", Collections.singletonList( project ) );
@@ -435,6 +445,9 @@ public class DeployMojoTest
when( session.getRepositorySession() ).thenReturn( repositorySession );
MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" );
+ project.setGroupId( "org.apache.maven.test" );
+ project.setArtifactId( "maven-deploy-test" );
+ project.setVersion( "1.0-SNAPSHOT" );
setVariableValueToObject( mojo, "pluginContext", new ConcurrentHashMap<>() );
setVariableValueToObject( mojo, "reactorProjects", Collections.singletonList( project ) );
@@ -573,18 +586,15 @@ public class DeployMojoTest
public void testLegacyAltDeploymentRepositoryWithDefaultLayout()
throws Exception
{
- DeployMojo mojo = spy( new DeployMojo() );
+ DeployMojo mojo = new DeployMojo();
setVariableValueToObject( mojo, "project", project );
+ setVariableValueToObject( mojo, "session", session );
setVariableValueToObject( mojo, "altDeploymentRepository", "altDeploymentRepository::default::http://localhost" );
- ArtifactRepository repository = mock( ArtifactRepository.class );
- when( mojo.createDeploymentArtifactRepository( "altDeploymentRepository", "http://localhost"
- ) ).thenReturn( repository );
-
project.setVersion( "1.0-SNAPSHOT" );
- assertEquals( repository,
+ assertEquals( new RemoteRepository.Builder( "altDeploymentRepository", "default", "http://localhost" ).build(),
mojo.getDeploymentRepository( project, null, null, "altDeploymentRepository::default::http://localhost") );
}
@@ -592,17 +602,13 @@ public class DeployMojoTest
public void testLegacyAltDeploymentRepositoryWithLegacyLayout()
throws Exception
{
- DeployMojo mojo = spy( new DeployMojo() );
+ DeployMojo mojo = new DeployMojo();
setVariableValueToObject( mojo, "project", project );
+ setVariableValueToObject( mojo, "session", session );
setVariableValueToObject( mojo, "altDeploymentRepository", "altDeploymentRepository::legacy::http://localhost" );
- ArtifactRepository repository = mock( ArtifactRepository.class );
- when( mojo.createDeploymentArtifactRepository( "altDeploymentRepository", "http://localhost"
- ) ).thenReturn( repository );
-
project.setVersion( "1.0-SNAPSHOT" );
-
try
{
mojo.getDeploymentRepository( project, null, null, "altDeploymentRepository::legacy::http://localhost" );
@@ -618,15 +624,12 @@ public class DeployMojoTest
public void testInsaneAltDeploymentRepository()
throws Exception
{
- DeployMojo mojo = spy( new DeployMojo() );
+ DeployMojo mojo = new DeployMojo();
setVariableValueToObject( mojo, "project", project );
+ setVariableValueToObject( mojo, "session", session );
setVariableValueToObject( mojo, "altDeploymentRepository", "altDeploymentRepository::hey::wow::foo::http://localhost" );
- ArtifactRepository repository = mock( ArtifactRepository.class );
- when( mojo.createDeploymentArtifactRepository( "altDeploymentRepository", "http://localhost"
- ) ).thenReturn( repository );
-
project.setVersion( "1.0-SNAPSHOT" );
try
{
@@ -643,32 +646,25 @@ public class DeployMojoTest
public void testDefaultScmSvnAltDeploymentRepository()
throws Exception
{
- DeployMojo mojo = spy( new DeployMojo() );
+ DeployMojo mojo = new DeployMojo();
setVariableValueToObject( mojo, "project", project );
+ setVariableValueToObject( mojo, "session", session );
setVariableValueToObject( mojo, "altDeploymentRepository", "altDeploymentRepository::default::scm:svn:http://localhost" );
- ArtifactRepository repository = mock( ArtifactRepository.class );
- when( mojo.createDeploymentArtifactRepository( "altDeploymentRepository", "scm:svn:http://localhost"
- ) ).thenReturn( repository );
-
project.setVersion( "1.0-SNAPSHOT" );
- assertEquals( repository,
+ assertEquals( new RemoteRepository.Builder( "altDeploymentRepository", "default", "scm:svn:http://localhost" ).build(),
mojo.getDeploymentRepository( project, null, null, "altDeploymentRepository::default::scm:svn:http://localhost" ) );
}
public void testLegacyScmSvnAltDeploymentRepository()
throws Exception
{
- DeployMojo mojo = spy( new DeployMojo() );
+ DeployMojo mojo = new DeployMojo();
setVariableValueToObject( mojo, "project", project );
setVariableValueToObject( mojo, "altDeploymentRepository", "altDeploymentRepository::legacy::scm:svn:http://localhost" );
- ArtifactRepository repository = mock( ArtifactRepository.class );
- when( mojo.createDeploymentArtifactRepository( "altDeploymentRepository", "http://localhost"
- ) ).thenReturn( repository );
-
project.setVersion( "1.0-SNAPSHOT" );
try
{
@@ -685,35 +681,30 @@ public class DeployMojoTest
public void testAltSnapshotDeploymentRepository()
throws Exception
{
- DeployMojo mojo = spy( new DeployMojo() );
+ DeployMojo mojo = new DeployMojo();
setVariableValueToObject( mojo, "project", project );
+ setVariableValueToObject( mojo, "session", session );
setVariableValueToObject( mojo, "altSnapshotDeploymentRepository", "altSnapshotDeploymentRepository::http://localhost" );
- ArtifactRepository repository = mock( ArtifactRepository.class );
- when( mojo.createDeploymentArtifactRepository( "altSnapshotDeploymentRepository", "http://localhost"
- ) ).thenReturn( repository );
-
project.setVersion( "1.0-SNAPSHOT" );
- assertEquals( repository,
+ assertEquals( new RemoteRepository.Builder( "altSnapshotDeploymentRepository", "default", "http://localhost" ).build(),
mojo.getDeploymentRepository( project, "altSnapshotDeploymentRepository::http://localhost", null, null ));
}
public void testAltReleaseDeploymentRepository()
throws Exception
{
- DeployMojo mojo = spy( new DeployMojo() );
+ DeployMojo mojo = new DeployMojo();
setVariableValueToObject( mojo, "project", project );
+ setVariableValueToObject( mojo, "session", session );
setVariableValueToObject( mojo, "altReleaseDeploymentRepository", "altReleaseDeploymentRepository::http://localhost" );
- ArtifactRepository repository = mock( ArtifactRepository.class );
- when( mojo.createDeploymentArtifactRepository( "altReleaseDeploymentRepository", "http://localhost" ) ).thenReturn( repository );
-
project.setVersion( "1.0" );
- assertEquals( repository,
+ assertEquals( new RemoteRepository.Builder("altReleaseDeploymentRepository", "default", "http://localhost").build(),
mojo.getDeploymentRepository( project, null, "altReleaseDeploymentRepository::http://localhost", null ));
}