You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kh...@apache.org on 2016/09/10 16:58:28 UTC
svn commit: r1760196 - in /maven/shared/trunk/maven-artifact-transfer: ./
src/main/java/org/apache/maven/shared/project/deploy/
src/main/java/org/apache/maven/shared/project/deploy/internal/
Author: khmarbaise
Date: Sat Sep 10 16:58:28 2016
New Revision: 1760196
URL: http://svn.apache.org/viewvc?rev=1760196&view=rev
Log:
[MSHARED-591] Add interface to deploy a Maven Project
Added:
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/DeployProject.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/ProjectDeployRequest.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/internal/
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/internal/DefaultDeployProject.java
Modified:
maven/shared/trunk/maven-artifact-transfer/pom.xml
Modified: maven/shared/trunk/maven-artifact-transfer/pom.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/pom.xml?rev=1760196&r1=1760195&r2=1760196&view=diff
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/pom.xml (original)
+++ maven/shared/trunk/maven-artifact-transfer/pom.xml Sat Sep 10 16:58:28 2016
@@ -209,6 +209,13 @@
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.5</version>
+ <scope>provided</scope>
+ </dependency>
+
<!-- TEST -->
<dependency>
<groupId>junit</groupId>
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/DeployProject.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/DeployProject.java?rev=1760196&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/DeployProject.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/DeployProject.java Sat Sep 10 16:58:28 2016
@@ -0,0 +1,42 @@
+package org.apache.maven.shared.project.deploy;
+
+/*
+ * 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.artifact.repository.ArtifactRepository;
+import org.apache.maven.project.ProjectBuildingRequest;
+
+/**
+ * This defines the interface to deploy a single Maven Project.
+ *
+ * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a>
+ */
+public interface DeployProject
+{
+ /**
+ * This will deploy a single project which may contain several artifacts. Those artifacts will be deployed into the
+ * appropriate remote repository.
+ *
+ * @param buildingRequest {@link ProjectBuildingRequest}
+ * @param request {@link ProjectDeployRequest}
+ * @param artifactRepository {@link ArtifactRepository}
+ */
+ void deployProject( ProjectBuildingRequest buildingRequest, ProjectDeployRequest request,
+ ArtifactRepository artifactRepository );
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/ProjectDeployRequest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/ProjectDeployRequest.java?rev=1760196&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/ProjectDeployRequest.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/ProjectDeployRequest.java Sat Sep 10 16:58:28 2016
@@ -0,0 +1,148 @@
+package org.apache.maven.shared.project.deploy;
+
+/*
+ * 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.project.MavenProject;
+
+/**
+ *
+ * @author Robert Scholte
+ */
+public class ProjectDeployRequest
+{
+
+ // From AbstractDeployMojo
+
+ private boolean updateReleaseInfo;
+
+ private int retryFailedDeploymentCount;
+
+ // From DeployMojo
+
+ private MavenProject project;
+
+ private String altDeploymentRepository;
+
+ private String altSnapshotDeploymentRepository;
+
+ private String altReleaseDeploymentRepository;
+
+ /**
+ * @return the updateReleaseInfo
+ */
+ public boolean isUpdateReleaseInfo()
+ {
+ return updateReleaseInfo;
+ }
+
+ /**
+ * @param updateReleaseInfo the updateReleaseInfo to set
+ */
+ public ProjectDeployRequest setUpdateReleaseInfo( boolean updateReleaseInfo )
+ {
+ this.updateReleaseInfo = updateReleaseInfo;
+ return this;
+ }
+
+ /**
+ * @return the retryFailedDeploymentCount
+ */
+ public int getRetryFailedDeploymentCount()
+ {
+ return retryFailedDeploymentCount;
+ }
+
+ /**
+ * @param retryFailedDeploymentCount the retryFailedDeploymentCount to set
+ */
+ public ProjectDeployRequest setRetryFailedDeploymentCount( int retryFailedDeploymentCount )
+ {
+ this.retryFailedDeploymentCount = retryFailedDeploymentCount;
+ return this;
+ }
+
+ /**
+ * @return the project
+ */
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ /**
+ * @param project the project to set
+ */
+ public ProjectDeployRequest setProject( MavenProject project )
+ {
+ this.project = project;
+ return this;
+ }
+
+ /**
+ * @return the altDeploymentRepository
+ */
+ public String getAltDeploymentRepository()
+ {
+ return altDeploymentRepository;
+ }
+
+ /**
+ * @param altDeploymentRepository the altDeploymentRepository to set
+ */
+ public ProjectDeployRequest setAltDeploymentRepository( String altDeploymentRepository )
+ {
+ this.altDeploymentRepository = altDeploymentRepository;
+ return this;
+ }
+
+ /**
+ * @return the altSnapshotDeploymentRepository
+ */
+ public String getAltSnapshotDeploymentRepository()
+ {
+ return altSnapshotDeploymentRepository;
+ }
+
+ /**
+ * @param altSnapshotDeploymentRepository the altSnapshotDeploymentRepository to set
+ */
+ public ProjectDeployRequest setAltSnapshotDeploymentRepository( String altSnapshotDeploymentRepository )
+ {
+ this.altSnapshotDeploymentRepository = altSnapshotDeploymentRepository;
+ return this;
+ }
+
+ /**
+ * @return the altReleaseDeploymentRepository
+ */
+ public String getAltReleaseDeploymentRepository()
+ {
+ return altReleaseDeploymentRepository;
+ }
+
+ /**
+ * @param altReleaseDeploymentRepository the altReleaseDeploymentRepository to set
+ */
+ public ProjectDeployRequest setAltReleaseDeploymentRepository( String altReleaseDeploymentRepository )
+ {
+ this.altReleaseDeploymentRepository = altReleaseDeploymentRepository;
+ return this;
+ }
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/internal/DefaultDeployProject.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/internal/DefaultDeployProject.java?rev=1760196&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/internal/DefaultDeployProject.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/internal/DefaultDeployProject.java Sat Sep 10 16:58:28 2016
@@ -0,0 +1,188 @@
+package org.apache.maven.shared.project.deploy.internal;
+
+/*
+ * 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.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.project.artifact.ProjectArtifactMetadata;
+import org.apache.maven.shared.artifact.deploy.ArtifactDeployer;
+import org.apache.maven.shared.artifact.deploy.ArtifactDeployerException;
+import org.apache.maven.shared.project.deploy.DeployProject;
+import org.apache.maven.shared.project.deploy.ProjectDeployRequest;
+import org.codehaus.plexus.component.annotations.Component;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This will deploy a whole project into the appropriate remote repository.
+ *
+ * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a>
+ *
+ * Most of the code is taken from maven-dependency-plugin.
+ *
+ */
+@Component( role = DeployProject.class )
+public class DefaultDeployProject implements DeployProject
+{
+ private static final Logger LOGGER = LoggerFactory.getLogger( DefaultDeployProject.class );
+
+ @Inject
+ private ArtifactDeployer deployer;
+
+ /**
+ * This will deploy a single project which may contain several artifacts
+ * into the appropriate remote repository.
+ *
+ * @param buildingRequest {@link ProjectBuildingRequest}
+ * @param request {@link ProjectDeployRequest}
+ * @param artifactRepository {@link ArtifactRepository}
+ */
+ public void deployProject( ProjectBuildingRequest buildingRequest, ProjectDeployRequest request,
+ ArtifactRepository artifactRepository )
+ {
+ List<Artifact> deployableArtifacts = new ArrayList<Artifact>();
+
+ Artifact artifact = request.getProject().getArtifact();
+ String packaging = request.getProject().getPackaging();
+ File pomFile = request.getProject().getFile();
+
+ List<Artifact> attachedArtifacts = request.getProject().getAttachedArtifacts();
+
+ // Deploy the POM
+ boolean isPomArtifact = "pom".equals( packaging );
+ if ( !isPomArtifact )
+ {
+ ProjectArtifactMetadata metadata = new ProjectArtifactMetadata( artifact, pomFile );
+ artifact.addMetadata( metadata );
+ }
+ else
+ {
+ artifact.setFile( pomFile );
+ }
+
+ if ( request.isUpdateReleaseInfo() )
+ {
+ artifact.setRelease( true );
+ }
+
+ artifact.setRepository( artifactRepository );
+
+ int retryFailedDeploymentCount = request.getRetryFailedDeploymentCount();
+
+ try
+ {
+ if ( isPomArtifact )
+ {
+ deployableArtifacts.add( artifact );
+ }
+ else
+ {
+ File file = artifact.getFile();
+
+ if ( file != null && file.isFile() )
+ {
+ deployableArtifacts.add( artifact );
+ }
+ else if ( !attachedArtifacts.isEmpty() )
+ {
+ throw new IllegalArgumentException( "The packaging plugin for this project did not assign "
+ + "a main file to the project but it has attachments. Change packaging to 'pom'." );
+ }
+ else
+ {
+ throw new IllegalArgumentException( "The packaging for this project did not assign "
+ + "a file to the build artifact" );
+ }
+ }
+
+ for ( Artifact attached : attachedArtifacts )
+ {
+ // This is here when AttachedArtifact is used, like m-sources-plugin:2.0.4
+ try
+ {
+ attached.setRepository( artifactRepository );
+ }
+ catch ( UnsupportedOperationException e )
+ {
+ LOGGER.warn( attached.getId() + " has been attached with deprecated code, "
+ + "try to upgrade the responsible plugin" );
+ }
+
+ deployableArtifacts.add( attached );
+ }
+
+ deploy( buildingRequest, deployableArtifacts, artifactRepository, retryFailedDeploymentCount );
+ }
+ catch ( ArtifactDeployerException e )
+ {
+ throw new IllegalArgumentException( e.getMessage(), e );
+ }
+ }
+
+ private void deploy( ProjectBuildingRequest request, Collection<Artifact> artifacts,
+ ArtifactRepository deploymentRepository, int retryFailedDeploymentCount )
+ throws ArtifactDeployerException
+ {
+
+ // for now retry means redeploy the complete artifacts collection
+ int retryFailedDeploymentCounter = Math.max( 1, Math.min( 10, retryFailedDeploymentCount ) );
+ ArtifactDeployerException exception = null;
+ for ( int count = 0; count < retryFailedDeploymentCounter; count++ )
+ {
+ try
+ {
+ if ( count > 0 )
+ {
+ LOGGER.info( "Retrying deployment attempt " + ( count + 1 ) + " of "
+ + retryFailedDeploymentCounter );
+ }
+
+ deployer.deploy( request, deploymentRepository, artifacts );
+ exception = null;
+ break;
+ }
+ catch ( ArtifactDeployerException e )
+ {
+ if ( count + 1 < retryFailedDeploymentCounter )
+ {
+ LOGGER.warn( "Encountered issue during deployment: " + e.getLocalizedMessage() );
+ LOGGER.debug( e.getMessage() );
+ }
+ if ( exception == null )
+ {
+ exception = e;
+ }
+ }
+ }
+ if ( exception != null )
+ {
+ throw exception;
+ }
+ }
+
+}