[jboss-svn-commits] JBL Code SVN: r14014 - labs/jbossbuild/maven-plugins/trunk/maven-jboss-retro-plugin/src/main/java/org/jboss/maven/plugins/retro.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Aug 3 18:04:29 EDT 2007
Author: pgier
Date: 2007-08-03 18:04:29 -0400 (Fri, 03 Aug 2007)
New Revision: 14014
Modified:
labs/jbossbuild/maven-plugins/trunk/maven-jboss-retro-plugin/src/main/java/org/jboss/maven/plugins/retro/WeaveDependenciesMojo.java
Log:
Added ability to install and deploy weaved dependencies.
Issue: JBBUILD-360
Modified: labs/jbossbuild/maven-plugins/trunk/maven-jboss-retro-plugin/src/main/java/org/jboss/maven/plugins/retro/WeaveDependenciesMojo.java
===================================================================
--- labs/jbossbuild/maven-plugins/trunk/maven-jboss-retro-plugin/src/main/java/org/jboss/maven/plugins/retro/WeaveDependenciesMojo.java 2007-08-03 20:20:48 UTC (rev 14013)
+++ labs/jbossbuild/maven-plugins/trunk/maven-jboss-retro-plugin/src/main/java/org/jboss/maven/plugins/retro/WeaveDependenciesMojo.java 2007-08-03 22:04:29 UTC (rev 14014)
@@ -2,20 +2,33 @@
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.deployer.ArtifactDeployer;
+import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
+import org.apache.maven.artifact.installer.ArtifactInstallationException;
+import org.apache.maven.artifact.installer.ArtifactInstaller;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.ProjectArtifactMetadata;
+import org.codehaus.plexus.util.FileUtils;
import org.jboss.weaver.WeaveRunner;
import org.jboss.weaver.Weaver;
@@ -23,7 +36,6 @@
* This Mojo can be used to weave project dependencies.
* WARNING: Implementation of this mojo is not complete!
*
- * @phase initialize
* @goal weave-dependencies
* @requiresDependencyResolution
*/
@@ -81,6 +93,29 @@
protected ArtifactRepository localRepository;
/**
+ * Map that contains the layouts
+ *
+ * @component role="org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout"
+ */
+ private Map repositoryLayouts;
+
+ /**
+ * A maven component to install artifacts to a local repository.
+ * @parameter expression="${component.org.apache.maven.artifact.installer.ArtifactInstaller}"
+ * @required
+ * @readonly
+ */
+ protected ArtifactInstaller installer;
+
+ /**
+ * Maven component to deploy artifacts to remote repository.
+ * @parameter expression="${component.org.apache.maven.artifact.deployer.ArtifactDeployer}"
+ * @required
+ * @readonly
+ */
+ private ArtifactDeployer deployer;
+
+ /**
* The plugin dependencies.
*
* @parameter expression="${plugin.artifacts}"
@@ -91,24 +126,44 @@
/**
* Include verbose output.
- * @parameter
+ * @parameter default-value="false"
*/
- protected boolean verbose = false;
+ protected boolean verbose;
/**
- * Suppress output information.
+ * URL where the artifact will be deployed. <br/>
+ * ie ( file://C:\m2-repo or scp://host.com/path/to/repo )
+ * Note: this parameter is required if deployDependencies is set
+ * to true.
+ *
* @parameter
+ *
*/
- protected boolean suppress = true;
+ private String deployUrl;
/**
+ * Suppress output information.
+ * @parameter default-value="true"
+ */
+ protected boolean suppress;
+
+ /**
+ * The type of remote repository layout to deploy to. Try <i>legacy</i> for
+ * a Maven 1.x-style repository layout.
+ *
+ * @parameter expression="${repositoryLayout}" default-value="default"
+ * @required
+ */
+ private String repositoryLayout;
+
+ /**
* The Weaver class to use for weaving the classes.
* Defaults to org.jboss.weaver.Weaver
* Any subclass of org.jboss.weaver.Weaver can be used
*
- * @parameter
+ * @parameter default-value="org.jboss.weaver.Weaver"
*/
- protected String weaverClass = "org.jboss.weaver.Weaver";
+ protected String weaverClass;
/**
* The jar file or directory where the weaved classes
@@ -116,12 +171,48 @@
*
* @parameter expression="${project.build.directory}/weaved-dependencies"
*/
- protected String outputDirectory;
+ protected String dependencyOutputDirectory;
/**
+ * Component used to create a repository
+ *
+ * @component
+ */
+ private ArtifactRepositoryFactory repositoryFactory;
+
+ /**
+ * Server Id to map on the <id> under <server> section of settings.xml
+ * In most cases, this parameter will be required for authentication.
+ *
+ * @parameter expression="${repositoryId}" default-value="remote-repository"
+ * @required
+ */
+ private String repositoryId;
+
+ /**
+ * Whether to deploy snapshots with a unique version or not.
+ *
+ * @parameter expression="${uniqueVersion}" default-value="true"
+ */
+ private boolean uniqueVersion;
+
+ /**
+ * Deploy weaved dependencies to a repository.
+ * @parameter default-value="false"
+ */
+ private boolean deployDependencies;
+
+ /**
+ * Install weaved dependencies to a local repository.
+ * @parameter default-value="false"
+ *
+ */
+ private boolean installDependencies;
+
+ /**
* Main plugin execution method
*/
- public void execute() throws MojoFailureException
+ public void execute() throws MojoFailureException, MojoExecutionException
{
this.getLog().info("Weaving dependencies");
@@ -133,17 +224,18 @@
this.getLog().info("Weaving complete: " + (end - start) + "ms");
}
- protected void weaveDependencies() throws MojoFailureException
+ protected void weaveDependencies() throws MojoFailureException, MojoExecutionException
{
Set dependencyArtifacts = project.getDependencyArtifacts();
-
+ Map weavedDependencies = new HashMap();
+
try
{
ArtifactResolutionResult result = artifactResolver.resolveTransitively(dependencyArtifacts,
project.getArtifact(), project.getRemoteArtifactRepositories(), localRepository, artifactMetadataSource);
Set artifacts = result.getArtifacts();
- File parentDir = new File(outputDirectory);
+ File parentDir = new File(dependencyOutputDirectory);
if ( ! parentDir.exists()) {
parentDir.mkdirs();
}
@@ -153,30 +245,44 @@
Artifact artifact = (Artifact)artifactObj;
WeaveRunner weaveRunner = this.createWeaveRunner(artifacts);
- weaveRunner.setOutputPath(outputDirectory + File.separator + artifact.getFile().getName());
+ File outputFile = new File(dependencyOutputDirectory + File.separator + artifact.getFile().getName());
+ weaveRunner.setOutputPath(outputFile.getAbsolutePath());
try
{
- getLog().info("Weaving: " + artifact);
+ getLog().info("Weaving " + artifact);
weaveRunner.addSourcePath(artifact.getFile().getAbsolutePath());
- System.out.println("Path: " + weaveRunner.getSourcePaths().get(0));
weaveRunner.weave();
}
catch (Exception e)
{
e.printStackTrace();
}
-
- weaveRunner.setSourcePaths(new ArrayList<String>());
-
+ weavedDependencies.put(artifact, outputFile);
}
+
+ if (this.installDependencies)
+ {
+ this.installDependencies(weavedDependencies);
+ }
+
+ if (this.deployDependencies)
+ {
+ deployDependencies(weavedDependencies);
+ }
}
- catch (ArtifactResolutionException are) {
- are.printStackTrace();
+ catch (ArtifactResolutionException e)
+ {
+ throw new MojoExecutionException(e.getMessage(), e);
}
- catch (ArtifactNotFoundException anfe) {
- anfe.printStackTrace();
+ catch (ArtifactNotFoundException e)
+ {
+ throw new MojoExecutionException(e.getMessage(), e);
}
+ catch (ArtifactInstallationException e)
+ {
+ throw new MojoExecutionException(e.getMessage(), e);
+ }
}
@@ -251,5 +357,127 @@
return weaver;
}
+
+ protected File getPomFile(Artifact artifact) throws MojoExecutionException
+ {
+ Artifact pomArtifact = null;
+ try
+ {
+ ResolutionGroup resGroup = artifactMetadataSource.retrieve(artifact, localRepository, project
+ .getRemoteArtifactRepositories());
+ pomArtifact = resGroup.getPomArtifact();
+ artifactResolver.resolve(pomArtifact, project.getRemoteArtifactRepositories(), localRepository);
+ }
+ catch (ArtifactMetadataRetrievalException e)
+ {
+ throw new MojoExecutionException( e.getMessage(), e);
+ }
+ catch (ArtifactResolutionException e)
+ {
+ throw new MojoExecutionException( e.getMessage(), e);
+ }
+ catch (ArtifactNotFoundException e)
+ {
+ throw new MojoExecutionException( e.getMessage(), e);
+ }
+
+ if (pomArtifact == null)
+ {
+ return null;
+ }
+ else
+ {
+ return pomArtifact.getFile();
+ }
+ }
+
+ private void installDependencies(Map artifacts) throws MojoExecutionException, ArtifactInstallationException
+ {
+ for (Object artifactObj : artifacts.keySet())
+ {
+ Artifact artifact = (Artifact)artifactObj;
+ File weavedArtifactFile = (File)artifacts.get(artifact);
+ attachPomMetadata(artifact);
+
+ installer.install(weavedArtifactFile, artifact, localRepository);
+ }
+ }
+
+ private void deployDependencies(Map artifacts) throws MojoExecutionException
+ {
+ getLog().info("Deploying dependencies");
+ ArtifactRepositoryLayout layout = ( ArtifactRepositoryLayout ) repositoryLayouts.get( repositoryLayout );
+ if (deployUrl == null)
+ {
+ throw new MojoExecutionException("Parameter deployUrl must be set to a valid URL when deploying artifacts");
+ }
+ ArtifactRepository deploymentRepository =
+ repositoryFactory.createDeploymentArtifactRepository( repositoryId, deployUrl, layout, uniqueVersion );
+
+ String protocol = deploymentRepository.getProtocol();
+
+ if ( protocol.equals( "" ) || protocol == null )
+ {
+ throw new MojoExecutionException( "No transfer protocol found." );
+ }
+
+ for (Object artifactObj : artifacts.keySet())
+ {
+ Artifact artifact = (Artifact)artifactObj;
+ File weavedArtifactFile = (File)artifacts.get(artifact);
+
+ attachPomMetadata(artifact);
+
+ try
+ {
+ //getLog().info("Deploying " + artifact);
+ getDeployer().deploy( weavedArtifactFile, artifact, deploymentRepository, getLocalRepository() );
+ }
+ catch ( ArtifactDeploymentException e )
+ {
+ throw new MojoExecutionException( e.getMessage(), e );
+ }
+ }
+ }
+
+ private void attachPomMetadata(Artifact artifact) throws MojoExecutionException
+ {
+
+ File pomFile = getPomFile(artifact);
+ File retroPomFile = new File(this.dependencyOutputDirectory + File.separator + artifact.getArtifactId() + "-" + artifact.getVersion() + ".pom");
+
+ try
+ {
+ FileUtils.copyFile(pomFile, retroPomFile);
+ }
+ catch (IOException ioe)
+ {
+ throw new MojoExecutionException( ioe.getMessage(), ioe );
+ }
+
+ ArtifactMetadata metadata = new ProjectArtifactMetadata( artifact, retroPomFile );
+ artifact.addMetadata( metadata );
+ }
+
+ public ArtifactDeployer getDeployer()
+ {
+ return deployer;
+ }
+
+ public void setDeployer(ArtifactDeployer deployer)
+ {
+ this.deployer = deployer;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return localRepository;
+ }
+
+ public void setLocalRepository(ArtifactRepository localRepository)
+ {
+ this.localRepository = localRepository;
+ }
+
}
More information about the jboss-svn-commits
mailing list