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;
+ }
}