You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/11/11 02:12:48 UTC

svn commit: r712895 - in /maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/sonatype/ src/main/java/org/sonatype/maven/ src/main/java/org/sonatype/maven/plugins/ src/...

Author: ogusakov
Date: Mon Nov 10 17:12:48 2008
New Revision: 712895

URL: http://svn.apache.org/viewvc?rev=712895&view=rev
Log:
splitting maven 2.0.9 from 3.0-SN for compare tool

Added:
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/   (with props)
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/c
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/pom.xml
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/sonatype/
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/sonatype/maven/
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/sonatype/maven/plugins/
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/sonatype/maven/plugins/mercury/
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/sonatype/maven/plugins/mercury/compare/
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/sonatype/maven/plugins/mercury/compare/MercuryCompareMojo.java
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/resources/
    maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/resources/META-INF/

Propchange: maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Nov 10 17:12:48 2008
@@ -0,0 +1,4 @@
+.settings
+target
+.classpath
+.project

Added: maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/c
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/c?rev=712895&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/c (added)
+++ maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/c Mon Nov 10 17:12:48 2008
@@ -0,0 +1 @@
+mvnDebug -X org.sonatype.maven.plugins:mercury-compare-plugin:1.0-test:compare -DlocalFileDir=./target/repo

Added: maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/pom.xml?rev=712895&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/pom.xml (added)
+++ maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/pom.xml Mon Nov 10 17:12:48 2008
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.sonatype.maven.plugins</groupId>
+  <artifactId>mercury-compare-mercury-plugin</artifactId>
+  <packaging>maven-plugin</packaging>
+  <name>Mercury Maven resolusion comparisson</name>
+  <version>1.0-test</version>
+  <description>Mercury Maven resolusion comparisson</description>
+  <prerequisites />
+  <inceptionYear>2008</inceptionYear>
+	<build>
+		<plugins>
+			<plugin>
+			   <groupId>org.apache.maven.plugins</groupId>
+			   <artifactId>maven-compiler-plugin</artifactId>
+			     <configuration>
+			       <source>1.5</source>
+			       <target>1.5</target>
+			    </configuration>
+			</plugin>
+		</plugins>
+	</build>
+  <developers>
+    <developer>
+      <name>Oleg Gusakov</name>
+      <email>ogusakov@apache.org</email>
+      <roles>
+        <role>jack-of-all-trades</role>
+      </roles>
+      <timezone>-8</timezone>
+    </developer>
+  </developers>
+  
+  <properties>
+    <mercury.version>1.0.0-alpha-2-SNAPSHOT</mercury.version>
+  </properties>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>2.1-SNAPSHOT</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <version>2.0.9</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.4</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+    	<groupId>org.mortbay.jetty</groupId>
+    	<artifactId>jetty-maven-plugin</artifactId>
+    	<version>7.0.0.pre5</version>
+    </dependency>
+    <dependency>
+    	<groupId>org.apache.maven.mercury</groupId>
+    	<artifactId>mercury-md-sat</artifactId>
+    	<version>${mercury.version}</version>
+    </dependency>
+    <dependency>
+    	<groupId>org.apache.maven.mercury</groupId>
+    	<artifactId>mercury-repo-remote-m2</artifactId>
+    	<version>${mercury.version}</version>
+    </dependency>
+  </dependencies>
+</project>
+

Added: maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/sonatype/maven/plugins/mercury/compare/MercuryCompareMojo.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/sonatype/maven/plugins/mercury/compare/MercuryCompareMojo.java?rev=712895&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/sonatype/maven/plugins/mercury/compare/MercuryCompareMojo.java (added)
+++ maven/mercury/trunk/mercury-maven/mercury-compare-mercury-plugin/src/main/java/org/sonatype/maven/plugins/mercury/compare/MercuryCompareMojo.java Mon Nov 10 17:12:48 2008
@@ -0,0 +1,240 @@
+package org.sonatype.maven.plugins.mercury.compare;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
+import org.apache.maven.mercury.metadata.DependencyBuilder;
+import org.apache.maven.mercury.metadata.DependencyBuilderFactory;
+import org.apache.maven.mercury.metadata.MetadataTreeException;
+import org.apache.maven.mercury.metadata.MetadataTreeNode;
+import org.apache.maven.mercury.repository.api.Repository;
+import org.apache.maven.mercury.repository.local.m2.LocalRepositoryM2;
+import org.apache.maven.mercury.repository.remote.m2.RemoteRepositoryM2;
+import org.apache.maven.mercury.transport.api.Server;
+import org.apache.maven.mercury.util.Util;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.mortbay.jetty.plugin.RuntimeDependencyResolver;
+import org.mortbay.jetty.plugin.util.PluginLog;
+
+/**
+ * 
+ * @author Oleg Gusakov
+ *
+ *  @goal compare
+ *  @requiresProject false
+ */
+
+public class MercuryCompareMojo
+extends AbstractMojo
+implements Initializable
+{
+  private static Log _log;
+	//----------------------------------------------------------------
+  /**
+   * @parameter expression="${localRepoDir}"
+   */
+  String localRepoDir;
+  /**
+   * @parameter expression="${listFile}"
+   */
+  String listFile;
+	/**
+	  * @parameter expression="${session}"
+	  */
+	MavenSession _session;
+
+	 /**
+   * @component
+   */
+  private ArtifactResolver artifactResolver;
+  
+  /**
+   *
+   * @component
+   */
+  private ArtifactFactory artifactFactory;
+
+  /**
+  *
+  * @component
+  */
+  private ArtifactMetadataSource metadataSource;
+  
+  /**
+   *
+   * @parameter expression="${localRepository}"
+   */
+  private ArtifactRepository localRepository;
+
+  /**
+   *
+   * @parameter expression="${project.remoteArtifactRepositories}"
+   */
+  private List remoteRepositories;
+//
+//	/**
+//	  * @parameter expression="${project}"
+//	  */
+//	MavenProject _project;
+//
+//	/**
+//	  * @component
+//	  */
+//	Prompter _prompter;
+  
+  PlexusContainer plexus;
+  
+  RuntimeDependencyResolver resolver;
+  
+  MavenProjectBuilder projectBuilder;
+  
+  List<Repository> repos;
+  
+  DependencyBuilder depBuilder;
+  
+	//----------------------------------------------------------------
+	public void execute()
+	throws MojoExecutionException, MojoFailureException
+	{
+
+    if( _session == null )
+      throw new MojoExecutionException("session not injected");
+
+    if( localRepoDir == null )
+      throw new MojoExecutionException("local repo dir not injected");
+
+    try {
+		  
+		  if( projectBuilder == null )
+		    throw new Exception("project builder is null");
+		  
+      ArtifactBasicMetadata query = new ArtifactBasicMetadata("asm:asm-xml:3.0::jar");
+      
+      Collection<ArtifactBasicMetadata> res1 = getMaven( query );
+      
+      Collection<ArtifactBasicMetadata> res2 = getMaven( query );
+      
+      compare( res1, res2 );
+
+		} catch( Exception e ) {
+		  _log.error( e.getMessage() );
+			throw new MojoExecutionException( e.getMessage() );
+		}
+	}
+	
+	//------------------------------------------------------------------------
+  public void initialize()
+  throws InitializationException
+  {
+    _log = getLog();
+    
+    PluginLog.setLog( _log );
+    
+    plexus = _session.getContainer();
+    
+    resolver = new RuntimeDependencyResolver( artifactFactory
+                                            , artifactResolver
+                                            , metadataSource
+                                            , localRepository
+                                            , remoteRepositories
+                                           );
+    
+    try
+    {
+      projectBuilder = (MavenProjectBuilder)plexus.lookup( MavenProjectBuilder.ROLE );
+      
+      repos = new ArrayList<Repository>();
+      
+      LocalRepositoryM2 lRepo = new LocalRepositoryM2( "localMercury", new File(localRepoDir) );
+      repos.add( lRepo );
+      
+      for( ArtifactRepository ar : (List<ArtifactRepository>)remoteRepositories )
+      {
+        Server server = new Server( ar.getId(), new URL(ar.getUrl()) );
+        
+        RemoteRepositoryM2 rr = new RemoteRepositoryM2( server );
+        
+        repos.add( rr );
+      }
+      
+      depBuilder = DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null );
+      
+    }
+    catch( Exception e )
+    {
+      throw new InitializationException(e.getMessage());
+    }
+  }
+  
+  private Collection<ArtifactBasicMetadata> getMaven( ArtifactBasicMetadata bmd )
+  throws MalformedURLException, ArtifactResolutionException, ArtifactNotFoundException, ProjectBuildingException, InvalidDependencyVersionException
+  {
+    Set<org.apache.maven.artifact.Artifact> deps = resolver.transitivelyResolvePomDependencies( projectBuilder , "asm", "asm-xml", "3.0", false );
+    
+    if( deps == null || deps.isEmpty() )
+      return null;
+    
+    ArrayList<ArtifactBasicMetadata> res = new ArrayList<ArtifactBasicMetadata>( deps.size() );
+    
+    for( org.apache.maven.artifact.Artifact a : deps )
+    {
+      res.add( 
+        new ArtifactBasicMetadata( 
+            a.getGroupId()+":"+a.getArtifactId()+":"+a.getVersion()
+            + ":"+Util.nvlS( a.getClassifier(), "" )
+            + ":"+Util.nvlS( a.getType(), ArtifactBasicMetadata.DEFAULT_ARTIFACT_TYPE )
+                                  ) 
+             );
+    }
+
+    return res;
+  }
+
+  private Collection<? extends ArtifactBasicMetadata> getMercury( ArtifactBasicMetadata bmd )
+  throws MetadataTreeException
+  {
+    MetadataTreeNode root = depBuilder.buildTree( bmd, null );
+    
+    List<ArtifactMetadata> deps = depBuilder.resolveConflicts( root );
+    
+    return deps;
+  }
+	
+  private void compare( Collection<ArtifactBasicMetadata> r1, Collection<ArtifactBasicMetadata> r2 )
+  {
+
+    _log.info("\n-------------------------------> Maven Results:");
+    System.out.println( r1 );
+    _log.info("\n<-------------------------------");
+
+    _log.info("\n-------------------------------> Mercury Results:");
+    System.out.println( r2 );
+    _log.info("\n<-------------------------------");
+
+  }
+	//----------------------------------------------------------------
+	//----------------------------------------------------------------
+}