mirror of https://github.com/apache/maven.git
Start of release plugin
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@170406 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d5e88e8c9e
commit
8b6052bbc6
|
@ -67,6 +67,11 @@ public class DefaultArtifactResolver
|
||||||
public void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
|
public void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
|
||||||
throws ArtifactResolutionException
|
throws ArtifactResolutionException
|
||||||
{
|
{
|
||||||
|
if ( artifact == null )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Check for the existence of the artifact in the specified local
|
// Check for the existence of the artifact in the specified local
|
||||||
// ArtifactRepository. If it is present then simply return as the
|
// ArtifactRepository. If it is present then simply return as the
|
||||||
|
|
|
@ -832,6 +832,19 @@ public class DefaultPluginManager
|
||||||
// TODO: should I get the modified artifacts back into the project?
|
// TODO: should I get the modified artifacts back into the project?
|
||||||
artifactResolver.resolve( artifact, context.getRemoteRepositories(), context.getLocalRepository() );
|
artifactResolver.resolve( artifact, context.getRemoteRepositories(), context.getLocalRepository() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Set pluginArtifacts = new HashSet();
|
||||||
|
for ( Iterator it = context.getProject().getPluginArtifacts().iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
Artifact artifact = (Artifact) it.next();
|
||||||
|
|
||||||
|
artifactResolver.resolve( artifact, context.getRemoteRepositories(), context.getLocalRepository() );
|
||||||
|
getLogger().info( "=======>" + artifact.getArtifactId() + "/" + artifact.getVersion() + "/" + artifact.getBaseVersion() );
|
||||||
|
pluginArtifacts.add( artifact );
|
||||||
|
}
|
||||||
|
context.getProject().setPluginArtifacts( pluginArtifacts );
|
||||||
|
|
||||||
|
artifactResolver.resolve( context.getProject().getParentArtifact(), context.getRemoteRepositories(), context.getLocalRepository() );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
<project>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<artifactId>maven-plugin-parent</artifactId>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<version>2.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<artifactId>maven-release-plugin</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<packaging>maven-plugin</packaging>
|
||||||
|
<name>Maven Release plugin</name>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-project</artifactId>
|
||||||
|
<version>2.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.scm</groupId>
|
||||||
|
<artifactId>maven-scm-api</artifactId>
|
||||||
|
<version>1.0-alpha-1-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.scm</groupId>
|
||||||
|
<artifactId>maven-scm-provider-cvs</artifactId>
|
||||||
|
<version>1.0-alpha-1-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.scm</groupId>
|
||||||
|
<artifactId>maven-scm-provider-svn</artifactId>
|
||||||
|
<version>1.0-alpha-1-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.wagon</groupId>
|
||||||
|
<artifactId>wagon-provider-api</artifactId>
|
||||||
|
<version>1.0-alpha-3</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.wagon</groupId>
|
||||||
|
<artifactId>wagon-file</artifactId>
|
||||||
|
<version>1.0-alpha-3</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,411 @@
|
||||||
|
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.artifact.transform.ReleaseArtifactTransformation;
|
||||||
|
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 org.codehaus.plexus.util.StringUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @goal release
|
||||||
|
* @description Release plugin
|
||||||
|
* @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 ReleaseMojo
|
||||||
|
extends AbstractMojo
|
||||||
|
implements Contextualizable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @parameter expression="${basedir}"
|
||||||
|
* @required
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
private String basedir;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter expression="${project.artifacts}"
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
private Set dependencies;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter expression="${project.pluginArtifacts}"
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
private Set plugins;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter expression="${localRepository}"
|
||||||
|
* @required
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
private ArtifactRepository localRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}"
|
||||||
|
* @required
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
private ArtifactFactory artifactFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter expression="${project}"
|
||||||
|
* @required
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
private MavenProject project;
|
||||||
|
|
||||||
|
private PlexusContainer container;
|
||||||
|
|
||||||
|
private ScmManager scmManager;
|
||||||
|
|
||||||
|
private static final String SNAPSHOT = "-SNAPSHOT";
|
||||||
|
|
||||||
|
public void execute()
|
||||||
|
throws MojoExecutionException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
initScmManager();
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException( "Can't initialize ReleaseMojo.", e );
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
prepareRelease();
|
||||||
|
|
||||||
|
performRelease();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
releaseScmManager();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void prepareRelease()
|
||||||
|
throws MojoExecutionException
|
||||||
|
{
|
||||||
|
//checkStatus();
|
||||||
|
|
||||||
|
checkDependencies();
|
||||||
|
|
||||||
|
transformPom();
|
||||||
|
|
||||||
|
//commit();
|
||||||
|
|
||||||
|
//tag();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void performRelease()
|
||||||
|
throws MojoExecutionException
|
||||||
|
{
|
||||||
|
//checkout();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isSnapshot( String version )
|
||||||
|
{
|
||||||
|
return version.endsWith( SNAPSHOT );
|
||||||
|
}
|
||||||
|
|
||||||
|
private 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 = dependencies.iterator(); i.hasNext(); )
|
||||||
|
{
|
||||||
|
Artifact artifact = (Artifact) i.next();
|
||||||
|
if ( isSnapshot( artifact.getVersion() ) )
|
||||||
|
{
|
||||||
|
snapshotDependencies.add( artifact );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for ( Iterator i = plugins.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 checkStatus()
|
||||||
|
throws MojoExecutionException
|
||||||
|
{
|
||||||
|
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 );
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
releaseScmManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
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( "You have some uncommitted files : \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 = dependencies.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
|
||||||
|
//TODO Resolve version
|
||||||
|
for ( Iterator i = plugins.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
|
||||||
|
java.io.StringWriter writer = new java.io.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 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkout()
|
||||||
|
throws MojoExecutionException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
getScm().checkout();
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException( "An error is occurred in the checkout process.", e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,255 @@
|
||||||
|
package org.apache.maven.plugin.scm;
|
||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
* 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.scm.ScmException;
|
||||||
|
import org.apache.maven.scm.ScmFile;
|
||||||
|
import org.apache.maven.scm.ScmFileSet;
|
||||||
|
import org.apache.maven.scm.ScmResult;
|
||||||
|
import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
|
||||||
|
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
|
||||||
|
import org.apache.maven.scm.command.status.StatusScmResult;
|
||||||
|
import org.apache.maven.scm.command.tag.TagScmResult;
|
||||||
|
import org.apache.maven.scm.command.update.UpdateScmResult;
|
||||||
|
import org.apache.maven.scm.manager.ScmManager;
|
||||||
|
import org.apache.maven.scm.manager.NoSuchScmProviderException;
|
||||||
|
import org.apache.maven.scm.repository.ScmRepository;
|
||||||
|
import org.apache.maven.scm.repository.ScmRepositoryException;
|
||||||
|
import org.codehaus.plexus.embed.Embedder;
|
||||||
|
import org.codehaus.plexus.util.FileUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A bean for using the Maven SCM API.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
|
||||||
|
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
|
||||||
|
* @version $Id: DoxiaMojo.java 169372 2005-05-09 22:47:34Z evenisse $
|
||||||
|
*/
|
||||||
|
public class ScmBean
|
||||||
|
{
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
private String url;
|
||||||
|
|
||||||
|
private String tag;
|
||||||
|
|
||||||
|
private String workingDirectory;
|
||||||
|
|
||||||
|
// note - this should not have a setter
|
||||||
|
private File checkoutDirectory;
|
||||||
|
|
||||||
|
private String tagBase;
|
||||||
|
|
||||||
|
private ScmManager scmManager;
|
||||||
|
|
||||||
|
private ScmManager getScmManager()
|
||||||
|
throws ScmException
|
||||||
|
{
|
||||||
|
if ( scmManager == null )
|
||||||
|
{
|
||||||
|
throw new ScmException( "scmManager isn't define." );
|
||||||
|
}
|
||||||
|
|
||||||
|
return scmManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ScmRepository getScmRepository()
|
||||||
|
throws ScmException
|
||||||
|
{
|
||||||
|
ScmRepository repository;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
repository = getScmManager().makeScmRepository( url );
|
||||||
|
|
||||||
|
if ( repository.getProvider().equals( "svn" ) )
|
||||||
|
{
|
||||||
|
SvnScmProviderRepository svnRepo = (SvnScmProviderRepository) repository.getProviderRepository();
|
||||||
|
|
||||||
|
if ( username != null && username.length() > 0 )
|
||||||
|
{
|
||||||
|
svnRepo.setUser( username );
|
||||||
|
}
|
||||||
|
if ( password != null && password.length() > 0 )
|
||||||
|
{
|
||||||
|
svnRepo.setPassword( password );
|
||||||
|
}
|
||||||
|
if ( tagBase != null && tagBase.length() > 0 )
|
||||||
|
{
|
||||||
|
svnRepo.setTagBase( tagBase );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch( Exception e )
|
||||||
|
{
|
||||||
|
throw new ScmException( "Can't load the scm provider.", e );
|
||||||
|
}
|
||||||
|
|
||||||
|
return repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkResult( ScmResult result )
|
||||||
|
throws ScmException
|
||||||
|
{
|
||||||
|
if ( !result.isSuccess() )
|
||||||
|
{
|
||||||
|
// TODO: improve error handling
|
||||||
|
System.err.println( "Provider message:" );
|
||||||
|
System.err.println( result.getProviderMessage() );
|
||||||
|
System.err.println( "Command output:" );
|
||||||
|
System.err.println( result.getCommandOutput() );
|
||||||
|
throw new ScmException( "Error!" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkout()
|
||||||
|
throws ScmException, IOException
|
||||||
|
{
|
||||||
|
ScmRepository repository = getScmRepository();
|
||||||
|
|
||||||
|
checkoutDirectory = new File( workingDirectory );
|
||||||
|
if ( checkoutDirectory.exists() )
|
||||||
|
{
|
||||||
|
// TODO: sanity check that it is not . or .. or lower
|
||||||
|
FileUtils.deleteDirectory( checkoutDirectory );
|
||||||
|
}
|
||||||
|
checkoutDirectory.mkdirs();
|
||||||
|
|
||||||
|
CheckOutScmResult result = getScmManager().checkOut( repository, new ScmFileSet( checkoutDirectory ), tag );
|
||||||
|
|
||||||
|
checkResult( result );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update()
|
||||||
|
throws ScmException
|
||||||
|
{
|
||||||
|
ScmRepository repository = getScmRepository();
|
||||||
|
|
||||||
|
checkoutDirectory = new File( workingDirectory );
|
||||||
|
|
||||||
|
// TODO: want includes/excludes?
|
||||||
|
UpdateScmResult result = getScmManager().update( repository, new ScmFileSet( new File( workingDirectory ) ), tag );
|
||||||
|
|
||||||
|
checkResult( result );
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getStatus()
|
||||||
|
throws ScmException
|
||||||
|
{
|
||||||
|
List changedFiles;
|
||||||
|
|
||||||
|
ScmRepository repository = getScmRepository();
|
||||||
|
|
||||||
|
// TODO: want includes/excludes?
|
||||||
|
StatusScmResult result = getScmManager().status( repository, new ScmFileSet( new File( workingDirectory ) ) );
|
||||||
|
|
||||||
|
checkResult( result );
|
||||||
|
|
||||||
|
changedFiles = result.getChangedFiles();
|
||||||
|
|
||||||
|
return changedFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void tag()
|
||||||
|
throws ScmException
|
||||||
|
{
|
||||||
|
ScmRepository repository = getScmRepository();
|
||||||
|
|
||||||
|
// TODO: want includes/excludes?
|
||||||
|
TagScmResult result = getScmManager().tag( repository, new ScmFileSet( new File( workingDirectory ) ), tag );
|
||||||
|
|
||||||
|
checkResult( result );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScmManager( ScmManager scmManager )
|
||||||
|
{
|
||||||
|
this.scmManager = scmManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl( String url )
|
||||||
|
{
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl()
|
||||||
|
{
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTag( String tag )
|
||||||
|
{
|
||||||
|
this.tag = tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTag()
|
||||||
|
{
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkingDirectory( String workingDirectory )
|
||||||
|
{
|
||||||
|
this.workingDirectory = workingDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWorkingDirectory()
|
||||||
|
{
|
||||||
|
return workingDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public File getCheckoutDirectory()
|
||||||
|
{
|
||||||
|
return checkoutDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTagBase()
|
||||||
|
{
|
||||||
|
return tagBase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTagBase( String tagBase )
|
||||||
|
{
|
||||||
|
this.tagBase = tagBase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername()
|
||||||
|
{
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername( String username )
|
||||||
|
{
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword()
|
||||||
|
{
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword( String password )
|
||||||
|
{
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -25,11 +25,13 @@ import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
|
||||||
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
|
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
|
||||||
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
|
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
|
||||||
import org.apache.maven.artifact.resolver.ArtifactResolver;
|
import org.apache.maven.artifact.resolver.ArtifactResolver;
|
||||||
|
import org.apache.maven.artifact.transform.ReleaseArtifactTransformation;
|
||||||
import org.apache.maven.model.Build;
|
import org.apache.maven.model.Build;
|
||||||
import org.apache.maven.model.Dependency;
|
import org.apache.maven.model.Dependency;
|
||||||
import org.apache.maven.model.DistributionManagement;
|
import org.apache.maven.model.DistributionManagement;
|
||||||
import org.apache.maven.model.Model;
|
import org.apache.maven.model.Model;
|
||||||
import org.apache.maven.model.Parent;
|
import org.apache.maven.model.Parent;
|
||||||
|
import org.apache.maven.model.Plugin;
|
||||||
import org.apache.maven.model.Repository;
|
import org.apache.maven.model.Repository;
|
||||||
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
||||||
import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
|
import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
|
||||||
|
@ -279,8 +281,20 @@ public class DefaultMavenProjectBuilder
|
||||||
}
|
}
|
||||||
|
|
||||||
project.setParent( parentProject );
|
project.setParent( parentProject );
|
||||||
|
|
||||||
|
if ( parentProject != null )
|
||||||
|
{
|
||||||
|
Artifact parentArtifact = artifactFactory.createArtifact( parentProject.getGroupId(),
|
||||||
|
parentProject.getArtifactId(),
|
||||||
|
parentProject.getVersion(),
|
||||||
|
null,
|
||||||
|
"pom", null );
|
||||||
|
project.setParentArtifact( parentArtifact );
|
||||||
|
}
|
||||||
|
|
||||||
project.setRemoteArtifactRepositories( remoteRepositories );
|
project.setRemoteArtifactRepositories( remoteRepositories );
|
||||||
project.setArtifacts( createArtifacts( project.getDependencies() ) );
|
project.setArtifacts( createArtifacts( project.getDependencies() ) );
|
||||||
|
project.setPluginArtifacts( createPluginArtifacts( project.getBuildPlugins() ) );
|
||||||
|
|
||||||
ModelValidationResult validationResult = validator.validate( model );
|
ModelValidationResult validationResult = validator.validate( model );
|
||||||
|
|
||||||
|
@ -336,6 +350,8 @@ public class DefaultMavenProjectBuilder
|
||||||
MavenProject parent = assembleLineage( model, lineage, aggregatedRemoteWagonRepositories, localRepository );
|
MavenProject parent = assembleLineage( model, lineage, aggregatedRemoteWagonRepositories, localRepository );
|
||||||
|
|
||||||
project.setParent( parent );
|
project.setParent( parent );
|
||||||
|
|
||||||
|
project.setParentArtifact( artifact );
|
||||||
}
|
}
|
||||||
|
|
||||||
return project;
|
return project;
|
||||||
|
@ -479,6 +495,35 @@ public class DefaultMavenProjectBuilder
|
||||||
return projectArtifacts;
|
return projectArtifacts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Set createPluginArtifacts( List plugins )
|
||||||
|
{
|
||||||
|
Set pluginArtifacts = new HashSet();
|
||||||
|
|
||||||
|
for ( Iterator i = plugins.iterator(); i.hasNext(); )
|
||||||
|
{
|
||||||
|
Plugin p = (Plugin) i.next();
|
||||||
|
|
||||||
|
String version;
|
||||||
|
if ( StringUtils.isEmpty( p.getVersion() ) )
|
||||||
|
{
|
||||||
|
version = ReleaseArtifactTransformation.RELEASE_VERSION;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
version = p.getVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
Artifact artifact = artifactFactory.createArtifact( p.getGroupId(), p.getArtifactId(), version,
|
||||||
|
null, "maven-plugin", null );
|
||||||
|
if ( artifact != null )
|
||||||
|
{
|
||||||
|
pluginArtifacts.add( artifact );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pluginArtifacts;
|
||||||
|
}
|
||||||
|
|
||||||
public MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository )
|
public MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository )
|
||||||
throws ProjectBuildingException
|
throws ProjectBuildingException
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,6 +73,10 @@ public class MavenProject
|
||||||
|
|
||||||
private Set artifacts;
|
private Set artifacts;
|
||||||
|
|
||||||
|
private Artifact parentArtifact;
|
||||||
|
|
||||||
|
private Set pluginArtifacts;
|
||||||
|
|
||||||
private List remoteArtifactRepositories;
|
private List remoteArtifactRepositories;
|
||||||
|
|
||||||
private List collectedProjects = Collections.EMPTY_LIST;
|
private List collectedProjects = Collections.EMPTY_LIST;
|
||||||
|
@ -668,6 +672,26 @@ public class MavenProject
|
||||||
return artifacts;
|
return artifacts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPluginArtifacts( Set pluginArtifacts )
|
||||||
|
{
|
||||||
|
this.pluginArtifacts = pluginArtifacts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set getPluginArtifacts()
|
||||||
|
{
|
||||||
|
return pluginArtifacts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParentArtifact( Artifact parentArtifact )
|
||||||
|
{
|
||||||
|
this.parentArtifact = parentArtifact;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Artifact getParentArtifact()
|
||||||
|
{
|
||||||
|
return parentArtifact;
|
||||||
|
}
|
||||||
|
|
||||||
public List getRepositories()
|
public List getRepositories()
|
||||||
{
|
{
|
||||||
return model.getRepositories();
|
return model.getRepositories();
|
||||||
|
|
Loading…
Reference in New Issue