You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2020/03/03 07:23:48 UTC
[maven-studies] branch maven-buildinfo-plugin updated:
maven-resolver to avoid workspace resolution to get reference artifacts
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 <hb...@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;
+ }
+ }
}