[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 &lt;id&gt; under &lt;server&gt; 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