This is an automated email from the ASF dual-hosted git repository. hboutemy pushed a commit to branch maven-buildinfo-plugin in repository https://gitbox.apache.org/repos/asf/maven-studies.git
The following commit(s) were added to refs/heads/maven-buildinfo-plugin by this push: new 4e36a40 maven-resolver to avoid workspace resolution to get reference artifacts 4e36a40 is described below commit 4e36a400804e957c79d4ad21e1400e399dc293a5 Author: Hervé Boutemy <hbout...@apache.org> AuthorDate: Tue Mar 3 08:23:44 2020 +0100 maven-resolver to avoid workspace resolution to get reference artifacts --- pom.xml | 6 ++ .../apache/maven/plugins/buildinfo/SaveMojo.java | 86 +++++++++++++++++++--- 2 files changed, 80 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index d827f5e..efc1417 100644 --- a/pom.xml +++ b/pom.xml @@ -93,6 +93,12 @@ <scope>provided</scope> </dependency> <dependency> + <groupId>org.apache.maven.resolver</groupId> + <artifactId>maven-resolver-api</artifactId> + <version>1.4.1</version> + <scope>provided</scope> + </dependency> + <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-compat</artifactId> <version>${mavenVersion}</version> diff --git a/src/main/java/org/apache/maven/plugins/buildinfo/SaveMojo.java b/src/main/java/org/apache/maven/plugins/buildinfo/SaveMojo.java index 33726b0..aa224ad 100644 --- a/src/main/java/org/apache/maven/plugins/buildinfo/SaveMojo.java +++ b/src/main/java/org/apache/maven/plugins/buildinfo/SaveMojo.java @@ -27,7 +27,6 @@ import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy; import org.apache.maven.artifact.repository.MavenArtifactRepository; import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; 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.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -39,6 +38,14 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; import org.codehaus.plexus.util.FileUtils; +import org.eclipse.aether.AbstractForwardingRepositorySystemSession; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.repository.WorkspaceReader; +import org.eclipse.aether.resolution.ArtifactRequest; +import org.eclipse.aether.resolution.ArtifactResult; import java.io.BufferedWriter; import java.io.File; @@ -46,7 +53,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; -import java.util.Collections; import java.util.List; /** @@ -135,6 +141,24 @@ public class SaveMojo @Component private ArtifactFactory artifactFactory; + /** + * The entry point to Maven Artifact Resolver, i.e. the component doing all the work. + */ + @Component + private RepositorySystem repoSystem; + + /** + * The current repository/network configuration of Maven. + */ + @Parameter( defaultValue = "${repositorySystemSession}", readonly = true ) + private RepositorySystemSession repoSession; + + /** + * The project's remote repositories to use for the resolution. + */ + @Parameter( defaultValue = "${project.remoteProjectRepositories}", readonly = true ) + private List<RemoteRepository> remoteRepos; + public void execute() throws MojoExecutionException { @@ -219,12 +243,12 @@ public class SaveMojo private void checkAgainstReference( boolean mono, List<Artifact> artifacts ) throws MojoExecutionException { - ArtifactRepository repo = createReferenceRepo(); + ArtifactRepository repo = createReferenceRepo(); // TODO replace with org.eclipse.aether.repository.RemoteRepository referenceDir.mkdirs(); File referenceBuildinfo = downloadReferenceBuildinfo( repo ); - if ( !referenceBuildinfo.canRead() ) + if ( referenceBuildinfo == null ) { // download reference artifacts for ( Artifact artifact : artifacts ) @@ -240,6 +264,7 @@ public class SaveMojo } // generate buildinfo from reference artifacts + referenceBuildinfo = new File( referenceDir, buildinfoFile.getName() ); try ( PrintWriter p = new PrintWriter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream( referenceBuildinfo ), Charsets.ISO_8859_1 ) ) ) ) @@ -265,9 +290,11 @@ public class SaveMojo project.getVersion(), "buildinfo", "" ); try { - downloadReference( repo, buildinfo ); + File file = downloadReference( repo, buildinfo ); + + getLog().info( "Reference buildinfo file found, copied to " + file ); - getLog().info( "Reference buildinfo file found, copied to " + buildinfo.getFile() ); + return file; } catch ( ArtifactNotFoundException e ) { @@ -275,20 +302,35 @@ public class SaveMojo + "it will be generated from downloaded reference artifacts" ); } - return buildinfo.getFile(); + return null; } - private void downloadReference( ArtifactRepository repo, Artifact artifact ) + private File downloadReference( ArtifactRepository repo, Artifact artifact ) throws MojoExecutionException, ArtifactNotFoundException { try { - artifactResolver.resolve( artifact, Collections.singletonList( repo ), localRepository ); + ArtifactRequest request = new ArtifactRequest(); + request.setArtifact( new DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(), + artifact.getClassifier(), artifact.getType(), + artifact.getVersion() ) ); + request.setRepositories( remoteRepos ); // TODO replace with repo + + ArtifactResult result = + repoSystem.resolveArtifact( new NoWorkspaceRepositorySystemSession( repoSession ), request ); + File resultFile = result.getArtifact().getFile(); + File destFile = new File( referenceDir, resultFile.getName() ); + + FileUtils.copyFile( resultFile, destFile ); - FileUtils.copyFile( artifact.getFile(), new File( referenceDir, artifact.getFile().getName() ) ); + return destFile; } - catch ( ArtifactResolutionException are ) + catch ( org.eclipse.aether.resolution.ArtifactResolutionException are ) { + if ( are.getResult().isMissing() ) + { + throw new ArtifactNotFoundException( "Artifact not found " + artifact, artifact ); + } throw new MojoExecutionException( "Error resolving reference artifact " + artifact, are ); } catch ( IOException ioe ) @@ -330,5 +372,25 @@ public class SaveMojo return new MavenArtifactRepository( id, url, new DefaultRepositoryLayout(), new ArtifactRepositoryPolicy(), new ArtifactRepositoryPolicy() ); } - + + private static class NoWorkspaceRepositorySystemSession extends AbstractForwardingRepositorySystemSession + { + private final RepositorySystemSession rss; + NoWorkspaceRepositorySystemSession( RepositorySystemSession rss ) + { + this.rss = rss; + } + + @Override + protected RepositorySystemSession getSession() + { + return rss; + } + + @Override + public WorkspaceReader getWorkspaceReader() + { + return null; + } + } }