You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by ev...@apache.org on 2005/05/17 08:53:41 UTC
svn commit: r170521 - in
/maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release:
AbstractReleaseMojo.java PerformReleaseMojo.java PrepareReleaseMojo.java
ReleaseMojo.java
Author: evenisse
Date: Mon May 16 23:53:39 2005
New Revision: 170521
URL: http://svn.apache.org/viewcvs?rev=170521&view=rev
Log:
Split ReleaseMojo to PrepareReleaseMojo and PerformReleaseMojo
Added:
maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/AbstractReleaseMojo.java
maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PerformReleaseMojo.java
maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java
Removed:
maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/ReleaseMojo.java
Added: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/AbstractReleaseMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/AbstractReleaseMojo.java?rev=170521&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/AbstractReleaseMojo.java (added)
+++ maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/AbstractReleaseMojo.java Mon May 16 23:53:39 2005
@@ -0,0 +1,156 @@
+package org.apache.maven.plugin.release;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.scm.ScmBean;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.manager.ScmManager;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id: DoxiaMojo.java 169372 2005-05-09 22:47:34Z evenisse $
+ */
+public abstract class AbstractReleaseMojo
+ extends AbstractMojo
+ implements Contextualizable
+{
+ /**
+ * @parameter expression="${project.build.directory}/checkout"
+ * @required
+ */
+ private String workingDirectory;
+
+ /**
+ * @parameter expression="${project.scm.developerConnection}"
+ * @required
+ */
+ private String urlScm;
+
+ /**
+ * @parameter expression="${username}"
+ */
+ private String username;
+
+ /**
+ * @parameter expression="${password}"
+ */
+ private String password;
+
+ /**
+ * @parameter expression="${tagBase}"
+ */
+ private String tagBase = "../tags";
+
+ /**
+ * @parameter expression="${tag}"
+ */
+ private String tag;
+
+ private PlexusContainer container;
+
+ private ScmManager scmManager;
+
+ protected ScmManager getScmManager()
+ {
+ return scmManager;
+ }
+
+ protected ScmBean getScm()
+ {
+ ScmBean scm = new ScmBean();
+ scm.setScmManager( scmManager );
+ scm.setUrl( urlScm );
+ scm.setTag( tag );
+ scm.setTagBase( tagBase );
+ scm.setUsername( username );
+ scm.setPassword( password );
+ scm.setWorkingDirectory( workingDirectory );
+ return scm;
+ }
+
+ public void execute()
+ throws MojoExecutionException
+ {
+ try
+ {
+ initScmManager();
+ }
+ catch ( Exception e )
+ {
+ throw new MojoExecutionException( "Can't initialize ReleaseMojo.", e );
+ }
+
+ try
+ {
+ executeTask();
+ }
+ finally
+ {
+ releaseScmManager();
+ }
+ }
+
+ protected abstract void executeTask()
+ throws MojoExecutionException;
+
+ private void initScmManager()
+ throws Exception
+ {
+ scmManager = (ScmManager) container.lookup( ScmManager.ROLE );
+ }
+
+ private void releaseScmManager()
+ {
+ try
+ {
+ container.release( scmManager );
+ }
+ catch ( Exception e )
+ {
+ getLog().warn( "Error releasing component - ignoring", e );
+ }
+ }
+
+ public void contextualize( Context context )
+ throws ContextException
+ {
+ container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+ }
+}
Added: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PerformReleaseMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PerformReleaseMojo.java?rev=170521&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PerformReleaseMojo.java (added)
+++ maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PerformReleaseMojo.java Mon May 16 23:53:39 2005
@@ -0,0 +1,50 @@
+package org.apache.maven.plugin.release;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+import org.apache.maven.plugin.MojoExecutionException;
+
+/**
+ * @goal perform
+ * @description Perform a release from SCM
+ * @requiresDependencyResolution test
+ *
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id: DoxiaMojo.java 169372 2005-05-09 22:47:34Z evenisse $
+ */
+public class PerformReleaseMojo
+ extends AbstractReleaseMojo
+{
+ protected void executeTask()
+ throws MojoExecutionException
+ {
+ checkout();
+ }
+
+ private void checkout()
+ throws MojoExecutionException
+ {
+ try
+ {
+ getScm().checkout();
+ }
+ catch ( Exception e )
+ {
+ throw new MojoExecutionException( "An error is occurred in the checkout process.", e );
+ }
+ }
+}
Added: maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java?rev=170521&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java (added)
+++ maven/components/trunk/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugin/release/PrepareReleaseMojo.java Mon May 16 23:53:39 2005
@@ -0,0 +1,255 @@
+package org.apache.maven.plugin.release;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.scm.ScmBean;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @goal prepare
+ * @description Prepare for a release in SCM
+ * @requiresDependencyResolution test
+ *
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id: DoxiaMojo.java 169372 2005-05-09 22:47:34Z evenisse $
+ */
+public class PrepareReleaseMojo
+ extends AbstractReleaseMojo
+{
+ /**
+ * @parameter expression="${basedir}"
+ * @required
+ * @readonly
+ */
+ private String basedir;
+
+ /**
+ * @parameter expression="${project}"
+ * @required
+ * @readonly
+ */
+ private MavenProject project;
+
+ private static final String SNAPSHOT = "-SNAPSHOT";
+
+ protected void executeTask()
+ throws MojoExecutionException
+ {
+ checkStatus();
+
+ checkDependencies();
+
+ transformPom();
+
+ //commit();
+
+ tag();
+ }
+
+ private boolean isSnapshot( String version )
+ {
+ return version.endsWith( SNAPSHOT );
+ }
+
+ private void checkStatus()
+ throws MojoExecutionException
+ {
+ getLog().info( "Verifying no modifications are present." );
+
+ List changedFiles;
+ try
+ {
+ ScmBean scm = getScm();
+ scm.setWorkingDirectory( basedir );
+ changedFiles = scm.getStatus();
+ }
+ catch ( ScmException e )
+ {
+ throw new MojoExecutionException( "An error is occurred in the status process.", e );
+ }
+
+ if ( !changedFiles.isEmpty() )
+ {
+ StringBuffer message = new StringBuffer();
+ for ( Iterator i = changedFiles.iterator(); i.hasNext(); )
+ {
+ ScmFile file = (ScmFile) i.next();
+ message.append( file.toString() );
+ message.append( "\n" );
+ }
+ throw new MojoExecutionException( "Cannot prepare a release - You have some uncommitted files : \n" + message.toString() );
+ }
+ }
+
+ private void checkDependencies()
+ throws MojoExecutionException
+ {
+ MavenProject currentProject = project;
+ while ( currentProject.hasParent() )
+ {
+ Artifact parentArtifact = currentProject.getParentArtifact();
+
+ if ( isSnapshot( parentArtifact.getVersion() ) )
+ {
+ throw new MojoExecutionException( "Can't release project due to non released parent." );
+ }
+
+ currentProject = project.getParent();
+ }
+
+ List snapshotDependencies = new ArrayList();
+
+ for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
+ {
+ Artifact artifact = (Artifact) i.next();
+ if ( isSnapshot( artifact.getVersion() ) )
+ {
+ snapshotDependencies.add( artifact );
+ }
+ }
+ for ( Iterator i = project.getPluginArtifacts().iterator(); i.hasNext(); )
+ {
+ Artifact artifact = (Artifact) i.next();
+ if ( isSnapshot( artifact.getVersion() ) )
+ {
+ snapshotDependencies.add( artifact );
+ }
+ }
+ if ( !snapshotDependencies.isEmpty() )
+ {
+ Collections.sort( snapshotDependencies );
+ StringBuffer message = new StringBuffer();
+ for ( Iterator i = snapshotDependencies.iterator(); i.hasNext(); )
+ {
+ Artifact artifact = (Artifact) i.next();
+ message.append( " " );
+ message.append( artifact.getGroupId() );
+ message.append( ":" );
+ message.append( artifact.getArtifactId() );
+ message.append( ":" );
+ message.append( artifact.getVersion() );
+ message.append( "\n" );
+ }
+ throw new MojoExecutionException( "Can't release project due to non released dependencies :\n"
+ + message.toString() );
+ }
+ }
+
+ private void transformPom()
+ throws MojoExecutionException
+ {
+ Model model = project.getModel();
+ if ( !isSnapshot( model.getVersion() ) )
+ {
+ throw new MojoExecutionException( "This project isn't a snapshot (" + model.getVersion() + ")." );
+ }
+
+ //Rewrite project version
+ model.setVersion( model.getVersion().substring( 0, model.getVersion().length() - SNAPSHOT.length() ) );
+
+ //Rewrite parent version
+ if ( project.hasParent() )
+ {
+ if ( isSnapshot( project.getParentArtifact().getBaseVersion() ) )
+ {
+ model.getParent().setVersion( project.getParentArtifact().getVersion() );
+ }
+ }
+
+ //Rewrite dependencies version
+ for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
+ {
+ Artifact artifact = (Artifact) i.next();
+ if ( isSnapshot( artifact.getBaseVersion() ) )
+ {
+ for ( Iterator j = model.getDependencies().iterator(); j.hasNext(); )
+ {
+ Dependency dependency = (Dependency) j.next();
+ if ( artifact.getGroupId().equals( dependency.getGroupId() )
+ && artifact.getArtifactId().equals( dependency.getArtifactId() )
+ && artifact.getBaseVersion().equals( dependency.getVersion() )
+ && artifact.getType().equals( dependency.getType() ) )
+ {
+ dependency.setVersion( artifact.getVersion() );
+ }
+ }
+ }
+ }
+
+ //Rewrite plugins version
+ for ( Iterator i = project.getPluginArtifacts().iterator(); i.hasNext(); )
+ {
+ Artifact artifact = (Artifact) i.next();
+ if ( isSnapshot( artifact.getBaseVersion() ) )
+ {
+ for ( Iterator j = model.getBuild().getPlugins().iterator(); j.hasNext(); )
+ {
+ Plugin plugin = (Plugin) j.next();
+ if ( artifact.getGroupId().equals( plugin.getGroupId() )
+ && artifact.getArtifactId().equals( plugin.getArtifactId() ) )
+ {
+ plugin.setGroupId( artifact.getGroupId() );
+ plugin.setVersion( artifact.getVersion() );
+ }
+ }
+ }
+ }
+
+ MavenXpp3Writer modelWriter = new MavenXpp3Writer();
+ try
+ {
+ //TODO: Write in pom file
+ //TODO: Write only necessary informations
+ StringWriter writer = new StringWriter();
+ modelWriter.write( writer, model );
+ getLog().info( writer.toString() );
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Can't update pom.", e );
+ }
+ }
+
+ private void tag()
+ throws MojoExecutionException
+ {
+ try
+ {
+ getScm().tag();
+ }
+ catch ( Exception e )
+ {
+ throw new MojoExecutionException( "An error is occurred in the tag process.", e );
+ }
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org