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 2018/06/10 22:20:22 UTC
[maven-dependency-plugin] 01/01: [MDEP-617] Use plexus-java for
showing module info during dependency:resolve
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch MDEP-617
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git
commit 176b07d8b995f668dbce2ecb0588038ebbf3e1ea
Author: rfscholte <rf...@apache.org>
AuthorDate: Mon Jun 11 00:20:09 2018 +0200
[MDEP-617] Use plexus-java for showing module info during dependency:resolve
---
pom.xml | 5 +
.../resolvers/ResolveDependenciesMojo.java | 172 ++++++---------------
.../resolvers/ResolveDependenciesMojoTest.java | 13 +-
3 files changed, 59 insertions(+), 131 deletions(-)
diff --git a/pom.xml b/pom.xml
index 00f2cae..aada742 100644
--- a/pom.xml
+++ b/pom.xml
@@ -202,6 +202,11 @@ under the License.
<artifactId>plexus-io</artifactId>
<version>3.0.0</version>
</dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-java</artifactId>
+ <version>0.9.10</version>
+ </dependency>
<!-- shared -->
<dependency>
diff --git a/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolveDependenciesMojo.java b/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolveDependenciesMojo.java
index 86b595c..1a7d9d2 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolveDependenciesMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolveDependenciesMojo.java
@@ -26,6 +26,7 @@ import org.apache.maven.plugins.dependency.utils.DependencyStatusSets;
import org.apache.maven.plugins.dependency.utils.DependencyUtil;
import org.apache.maven.plugins.dependency.utils.filters.ResolveFileFilter;
import org.apache.maven.plugins.dependency.utils.markers.SourcesFileMarkerHandler;
+import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@@ -33,18 +34,21 @@ import org.apache.maven.plugins.annotations.ResolutionScope;
import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
import org.apache.maven.shared.utils.logging.MessageBuilder;
import org.apache.maven.shared.utils.logging.MessageUtils;
+import org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor;
+import org.codehaus.plexus.languages.java.jpms.LocationManager;
+import org.codehaus.plexus.languages.java.jpms.ResolvePathsRequest;
+import org.codehaus.plexus.languages.java.jpms.ResolvePathsResult;
+import org.codehaus.plexus.languages.java.jpms.ResolvePathsResult.ModuleNameSource;
import java.io.File;
import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
/**
* Goal that resolves the project dependencies from the repository. When using this goal while running on Java 9 the
@@ -88,6 +92,9 @@ public class ResolveDependenciesMojo
*/
@Parameter( property = "includeParents", defaultValue = "false" )
boolean includeParents;
+
+ @Component
+ private LocationManager locationManager;
/**
* Main entry into mojo. Gets the list of dependencies and iterates through displaying the resolved version.
@@ -183,6 +190,37 @@ public class ResolveDependenciesMojo
{
StringBuilder sb = new StringBuilder();
List<String> artifactStringList = new ArrayList<String>();
+
+ Collection<File> artifactFiles = new ArrayList<File>( artifacts.size() );
+ for ( Artifact artifact : artifacts )
+ {
+ if ( artifact.getFile() != null )
+ {
+ artifactFiles.add( artifact.getFile() );
+ }
+ }
+
+ ResolvePathsRequest<File> request = ResolvePathsRequest.ofFiles( artifactFiles );
+ ResolvePathsResult<File> result = null;
+ try
+ {
+ result = locationManager.resolvePaths( request );
+ }
+ catch ( IOException e1 )
+ {
+ // noop
+ }
+
+ for ( Map.Entry<File, Exception> entry : result.getPathExceptions().entrySet() )
+ {
+ Throwable cause = entry.getValue();
+ while ( cause.getCause() != null )
+ {
+ cause = cause.getCause();
+ }
+ getLog().info( "Can't extract module name from " + entry.getKey().getName() + ": " + cause.getMessage() );
+ }
+
for ( Artifact artifact : artifacts )
{
MessageBuilder messageBuilder = MessageUtils.buffer();
@@ -221,14 +259,15 @@ public class ResolveDependenciesMojo
// dependencies:collect won't download jars
if ( artifact.getFile() != null )
{
- ModuleDescriptor moduleDescriptor = getModuleDescriptor( artifact.getFile() );
+ JavaModuleDescriptor moduleDescriptor = result.getPathElements().get( artifact.getFile() );
if ( moduleDescriptor != null )
{
- messageBuilder.project( " -- module " + moduleDescriptor.name );
+ messageBuilder.project( " -- module " + moduleDescriptor.name() );
- if ( moduleDescriptor.automatic )
+ if ( moduleDescriptor.isAutomatic() )
{
- if ( "MANIFEST".equals( moduleDescriptor.moduleNameSource ) )
+ if ( ModuleNameSource.MANIFEST.
+ equals( result.getModulepathElements().get( artifact.getFile() ) ) )
{
messageBuilder.strong( " [auto]" );
}
@@ -251,121 +290,4 @@ public class ResolveDependenciesMojo
}
return sb;
}
-
- private ModuleDescriptor getModuleDescriptor( File artifactFile )
- {
- ModuleDescriptor moduleDescriptor = null;
- try
- {
- // Use Java9 code to get moduleName, don't try to do it better with own implementation
- Class<?> moduleFinderClass = Class.forName( "java.lang.module.ModuleFinder" );
-
- java.nio.file.Path path = artifactFile.toPath();
-
- Method ofMethod = moduleFinderClass.getMethod( "of", java.nio.file.Path[].class );
- Object moduleFinderInstance = ofMethod.invoke( null, new Object[] { new java.nio.file.Path[] { path } } );
-
- Method findAllMethod = moduleFinderClass.getMethod( "findAll" );
- @SuppressWarnings( "unchecked" )
- Set<Object> moduleReferences = (Set<Object>) findAllMethod.invoke( moduleFinderInstance );
-
- // moduleReferences can be empty when referring to target/classes without module-info.class
- if ( !moduleReferences.isEmpty() )
- {
- Object moduleReference = moduleReferences.iterator().next();
- Method descriptorMethod = moduleReference.getClass().getMethod( "descriptor" );
- Object moduleDescriptorInstance = descriptorMethod.invoke( moduleReference );
-
- Method nameMethod = moduleDescriptorInstance.getClass().getMethod( "name" );
- String name = (String) nameMethod.invoke( moduleDescriptorInstance );
-
- moduleDescriptor = new ModuleDescriptor();
- moduleDescriptor.name = name;
-
- Method isAutomaticMethod = moduleDescriptorInstance.getClass().getMethod( "isAutomatic" );
- moduleDescriptor.automatic = (Boolean) isAutomaticMethod.invoke( moduleDescriptorInstance );
-
- if ( moduleDescriptor.automatic )
- {
- if ( artifactFile.isFile() )
- {
- JarFile jarFile = null;
- try
- {
- jarFile = new JarFile( artifactFile );
-
- Manifest manifest = jarFile.getManifest();
-
- if ( manifest != null
- && manifest.getMainAttributes().getValue( "Automatic-Module-Name" ) != null )
- {
- moduleDescriptor.moduleNameSource = "MANIFEST";
- }
- else
- {
- moduleDescriptor.moduleNameSource = "FILENAME";
- }
- }
- catch ( IOException e )
- {
- // noop
- }
- finally
- {
- if ( jarFile != null )
- {
- try
- {
- jarFile.close();
- }
- catch ( IOException e )
- {
- // noop
- }
- }
- }
- }
- }
- }
- }
- catch ( ClassNotFoundException e )
- {
- // do nothing
- }
- catch ( NoSuchMethodException e )
- {
- e.printStackTrace();
- }
- catch ( SecurityException e )
- {
- // do nothing
- }
- catch ( IllegalAccessException e )
- {
- // do nothing
- }
- catch ( IllegalArgumentException e )
- {
- // do nothing
- }
- catch ( InvocationTargetException e )
- {
- Throwable cause = e.getCause();
- while ( cause.getCause() != null )
- {
- cause = cause.getCause();
- }
- getLog().info( "Can't extract module name from " + artifactFile.getName() + ": " + cause.getMessage() );
- }
- return moduleDescriptor;
- }
-
- private class ModuleDescriptor
- {
- String name;
-
- boolean automatic = true;
-
- String moduleNameSource;
- }
}
diff --git a/src/test/java/org/apache/maven/plugins/dependency/resolvers/ResolveDependenciesMojoTest.java b/src/test/java/org/apache/maven/plugins/dependency/resolvers/ResolveDependenciesMojoTest.java
index 74b45f6..7db544f 100644
--- a/src/test/java/org/apache/maven/plugins/dependency/resolvers/ResolveDependenciesMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/dependency/resolvers/ResolveDependenciesMojoTest.java
@@ -19,7 +19,6 @@ package org.apache.maven.plugins.dependency.resolvers;
* under the License.
*/
-import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@@ -38,14 +37,14 @@ public class ResolveDependenciesMojoTest
}
public void testDependencyStatusLog()
- throws IOException
+ throws Exception
{
Set<Artifact> artifacts = this.stubFactory.getMixedArtifacts();
doTestDependencyStatusLog( artifacts );
}
public void testDependencyStatusLogNullFiles()
- throws IOException
+ throws Exception
{
this.stubFactory.setCreateFiles( false );
Set<Artifact> artifacts = this.stubFactory.getMixedArtifacts();
@@ -53,11 +52,12 @@ public class ResolveDependenciesMojoTest
}
public void testDependencyStatusEmptySet()
+ throws Exception
{
doTestDependencyStatusLog( new HashSet<Artifact>() );
}
- public void doTestDependencyStatusLog( Set<Artifact> artifacts )
+ public void doTestDependencyStatusLog( Set<Artifact> artifacts ) throws Exception
{
// TODO: implement logger to check correct output
// this test is just looking for unexpected exceptions.
@@ -97,9 +97,10 @@ public class ResolveDependenciesMojoTest
mojo.getOutput( true, false, false );
}
- private ResolveDependenciesMojo newMojo( final DependencyStatusSets dss )
+ private ResolveDependenciesMojo newMojo( final DependencyStatusSets dss ) throws Exception
{
- ResolveDependenciesMojo mojo = new ResolveDependenciesMojo();
+ ResolveDependenciesMojo mojo =
+ (ResolveDependenciesMojo) lookupMojo( "resolve", getTestFile( "target/test-classes/unit/resolve-test/plugin-config.xml" ) );
mojo.results = dss;
return mojo;
}
--
To stop receiving notification emails like this one, please contact
rfscholte@apache.org.