You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2015/04/24 21:32:53 UTC

svn commit: r1675935 - in /maven/shared/trunk/maven-artifact-transfer: ./ src/main/java/org/apache/maven/shared/artifact/install/ src/main/java/org/apache/maven/shared/artifact/install/internal/

Author: rfscholte
Date: Fri Apr 24 19:32:53 2015
New Revision: 1675935

URL: http://svn.apache.org/r1675935
Log:
Fix implementation for M3.1.1+
Needed to shade SubArtifact of eclipse' Aether Util, it's not imported into the Classworld for M3.1.1-M3.3.3, causing a ClassNotFoundException
Add ArtifactInstaller.getLocalRepositoryBasedir(), which returns the localRepo baseDir as specified in the session.

Modified:
    maven/shared/trunk/maven-artifact-transfer/   (props changed)
    maven/shared/trunk/maven-artifact-transfer/pom.xml
    maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/ArtifactInstaller.java
    maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/DefaultArtifactInstaller.java
    maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Invoker.java
    maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Maven30ArtifactInstaller.java
    maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Maven31ArtifactInstaller.java

Propchange: maven/shared/trunk/maven-artifact-transfer/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Apr 24 19:32:53 2015
@@ -2,3 +2,4 @@
 .project
 .settings
 target
+dependency-reduced-pom.xml

Modified: maven/shared/trunk/maven-artifact-transfer/pom.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/pom.xml?rev=1675935&r1=1675934&r2=1675935&view=diff
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/pom.xml (original)
+++ maven/shared/trunk/maven-artifact-transfer/pom.xml Fri Apr 24 19:32:53 2015
@@ -48,6 +48,35 @@
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <version>2.3</version>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <artifactSet>
+                <includes>
+                  <include>org.eclipse.aether:aether-util</include>
+                </includes>
+              </artifactSet>
+              <!-- to prevent java.lang.ClassNotFoundException: org.eclipse.aether.util.artifact.SubArtifact (M3.1.1 - M3.3.3) -->
+              <filters>
+                <filter>
+                  <artifact>org.eclipse.aether:aether-util</artifact>
+                  <includes>
+                    <include>org/eclipse/aether/util/artifact/SubArtifact.class</include>
+                  </includes>
+                </filter>
+              </filters>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
   
@@ -102,6 +131,12 @@
       <version>0.9.0.M2</version>
       <scope>provided</scope>
     </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-util</artifactId>
+      <version>0.9.0.M2</version>
+      <!-- will be shaded -->
+    </dependency>
     
     <!-- TEST -->
     <dependency>

Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/ArtifactInstaller.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/ArtifactInstaller.java?rev=1675935&r1=1675934&r2=1675935&view=diff
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/ArtifactInstaller.java (original)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/ArtifactInstaller.java Fri Apr 24 19:32:53 2015
@@ -37,8 +37,18 @@ public interface ArtifactInstaller
      * @param request the project building request
      * @param basedir the base directory of the local repository
      * @return a new project building request
-     * @throws ArtifactInstallerException 
+     * @throws ArtifactInstallerException if an exception occurs
      */
     public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest request, File basedir )
         throws ArtifactInstallerException;
+    
+    /**
+     * Get the localRepositryBasedir as specified in the repository session of the request
+     * 
+     * @param request the build request
+     * @return the local repository base directory
+     * @throws ArtifactInstallerException if an exception occurs
+     */
+    public File getLocalRepositoryBasedir( ProjectBuildingRequest request )
+        throws ArtifactInstallerException;
 }

Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/DefaultArtifactInstaller.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/DefaultArtifactInstaller.java?rev=1675935&r1=1675934&r2=1675935&view=diff
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/DefaultArtifactInstaller.java (original)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/DefaultArtifactInstaller.java Fri Apr 24 19:32:53 2015
@@ -75,6 +75,23 @@ public class DefaultArtifactInstaller
         }
     }
 
+    public File getLocalRepositoryBasedir( ProjectBuildingRequest request )
+        throws ArtifactInstallerException
+    {
+        try
+        {
+            String hint = isMaven31() ? "maven31" : isMaven302() ? "maven302" : "maven3";
+
+            ArtifactInstaller effectiveArtifactInstaller = container.lookup( ArtifactInstaller.class, hint );
+
+            return effectiveArtifactInstaller.getLocalRepositoryBasedir( request );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new ArtifactInstallerException( e.getMessage(), e );
+        }
+    }
+    
     /**
      * @return true if the current Maven version is Maven 3.1.
      */

Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Invoker.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Invoker.java?rev=1675935&r1=1675934&r2=1675935&view=diff
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Invoker.java (original)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Invoker.java Fri Apr 24 19:32:53 2015
@@ -60,13 +60,34 @@ final class Invoker
         }
     }
 
-    public static Object invoke( Object object, String method, Class<?> clazz, Object arg )
+    public static Object invoke( Object object, String method, Class<?> argClazz, Object arg )
         throws ArtifactInstallerException
     {
         try
         {
             final Class<?> objectClazz = object.getClass();
-            return objectClazz.getMethod( method, clazz ).invoke( object, arg );
+            return objectClazz.getMethod( method, argClazz ).invoke( object, arg );
+        }
+        catch ( IllegalAccessException e )
+        {
+            throw new ArtifactInstallerException( e.getMessage(), e );
+        }
+        catch ( InvocationTargetException e )
+        {
+            throw new ArtifactInstallerException( e.getMessage(), e );
+        }
+        catch ( NoSuchMethodException e )
+        {
+            throw new ArtifactInstallerException( e.getMessage(), e );
+        }
+    }
+    
+    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
+                    throws ArtifactInstallerException
+    {
+        try
+        {
+            return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
         }
         catch ( IllegalAccessException e )
         {

Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Maven30ArtifactInstaller.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Maven30ArtifactInstaller.java?rev=1675935&r1=1675934&r2=1675935&view=diff
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Maven30ArtifactInstaller.java (original)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Maven30ArtifactInstaller.java Fri Apr 24 19:32:53 2015
@@ -59,7 +59,9 @@ public class Maven30ArtifactInstaller
         // transform artifacts
         for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
         {
-            Artifact mainArtifact = RepositoryUtils.toArtifact( mavenArtifact );   
+            Artifact mainArtifact =
+                (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
+                                           org.apache.maven.artifact.Artifact.class, mavenArtifact );
             request.addArtifact( mainArtifact );
 
             for ( ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
@@ -120,6 +122,15 @@ public class Maven30ArtifactInstaller
         return newRequest;
     }
 
+    public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest )
+        throws ArtifactInstallerException
+    {
+        RepositorySystemSession session =
+                        (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+        
+        return session.getLocalRepository().getBasedir();
+    }
+    
     protected String resolveRepositoryType( LocalRepository localRepository )
     {
         return localRepository.getContentType();

Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Maven31ArtifactInstaller.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Maven31ArtifactInstaller.java?rev=1675935&r1=1675934&r2=1675935&view=diff
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Maven31ArtifactInstaller.java (original)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/install/internal/Maven31ArtifactInstaller.java Fri Apr 24 19:32:53 2015
@@ -22,8 +22,12 @@ package org.apache.maven.shared.artifact
 import java.io.File;
 import java.util.Collection;
 
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.project.artifact.ProjectArtifactMetadata;
 import org.apache.maven.shared.artifact.install.ArtifactInstaller;
 import org.apache.maven.shared.artifact.install.ArtifactInstallerException;
 import org.codehaus.plexus.component.annotations.Component;
@@ -32,14 +36,11 @@ import org.eclipse.aether.DefaultReposit
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.DefaultArtifact;
 import org.eclipse.aether.installation.InstallRequest;
 import org.eclipse.aether.installation.InstallationException;
-import org.eclipse.aether.metadata.DefaultMetadata;
-import org.eclipse.aether.metadata.Metadata;
-import org.eclipse.aether.metadata.Metadata.Nature;
 import org.eclipse.aether.repository.LocalRepository;
 import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.util.artifact.SubArtifact;
 
 @Component( role = ArtifactInstaller.class , hint="maven31" )
 public class Maven31ArtifactInstaller implements ArtifactInstaller 
@@ -58,21 +59,27 @@ public class Maven31ArtifactInstaller im
         // transform artifacts
         for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
         {
-            Artifact aetherArtifact =
-                new DefaultArtifact( mavenArtifact.getGroupId(), mavenArtifact.getArtifactId(),
-                                     mavenArtifact.getClassifier(), mavenArtifact.getArtifactHandler().getExtension(),
-                                     mavenArtifact.getVersion(), null, mavenArtifact.getFile() );
-            request.addArtifact( aetherArtifact );
+            Artifact mainArtifact =
+                (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
+                                           org.apache.maven.artifact.Artifact.class, mavenArtifact );
+            request.addArtifact( mainArtifact );
 
-            if ( mavenArtifact.getMetadataList() != null )
+            for ( ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
             {
-                for ( org.apache.maven.artifact.metadata.ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
+                if ( metadata instanceof ProjectArtifactMetadata )
                 {
-                    Metadata aetherMetadata =
-                        new DefaultMetadata( metadata.getGroupId(), metadata.getArtifactId(), "maven-metadata.xml",
-                                             Nature.RELEASE_OR_SNAPSHOT );
-
-                    request.addMetadata( aetherMetadata );
+                    org.eclipse.aether.artifact.Artifact pomArtifact = new SubArtifact( mainArtifact, "", "pom" );
+                    pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
+                    request.addArtifact( pomArtifact );
+                }
+                else if ( // metadata instanceof SnapshotArtifactRepositoryMetadata ||
+                metadata instanceof ArtifactRepositoryMetadata )
+                {
+                    // eaten, handled by repo system
+                }
+                else
+                {
+                    // request.addMetadata( new MetadataBridge( metadata ) );
                 }
             }
         }
@@ -103,13 +110,39 @@ public class Maven31ArtifactInstaller im
         DefaultRepositorySystemSession newSession = new DefaultRepositorySystemSession( session );
 
         // keep same repositoryType
-        String repositoryType = session.getLocalRepository().getContentType();
+        String repositoryType = resolveRepositoryType( session.getLocalRepository() );
+        
         LocalRepositoryManager localRepositoryManager =
             repositorySystem.newLocalRepositoryManager( newSession, new LocalRepository( basedir, repositoryType ) );
+        
         newSession.setLocalRepositoryManager( localRepositoryManager );
 
         Invoker.invoke( newRequest, "setRepositorySession", RepositorySystemSession.class, newSession );
         
         return newRequest;
     }
+    
+    public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest )
+        throws ArtifactInstallerException
+    {
+        RepositorySystemSession session =
+                        (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+        
+        return session.getLocalRepository().getBasedir();
+    }
+    
+    protected String resolveRepositoryType( LocalRepository localRepository )
+    {
+        String repositoryType;
+        if ( "enhanced".equals( localRepository.getContentType() ) )
+        {
+            repositoryType = "default";
+        }
+        else 
+        {
+            // this should be "simple"
+            repositoryType = localRepository.getContentType();
+        }
+        return repositoryType;
+    }
 }