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/02 06:54:45 UTC
[maven-studies] 02/02: save reference artifacts when no reference
buildinfo available
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
commit cebcd9ca3a1a9aa10be0173e71e27c99e3a201bf
Author: Hervé Boutemy <hb...@apache.org>
AuthorDate: Mon Mar 2 07:53:38 2020 +0100
save reference artifacts when no reference buildinfo available
---
.../maven/plugins/buildinfo/BuildInfoWriter.java | 9 +++
.../apache/maven/plugins/buildinfo/SaveMojo.java | 76 +++++++++++++++++-----
2 files changed, 67 insertions(+), 18 deletions(-)
diff --git a/src/main/java/org/apache/maven/plugins/buildinfo/BuildInfoWriter.java b/src/main/java/org/apache/maven/plugins/buildinfo/BuildInfoWriter.java
index c4768f5..33ec2e9 100644
--- a/src/main/java/org/apache/maven/plugins/buildinfo/BuildInfoWriter.java
+++ b/src/main/java/org/apache/maven/plugins/buildinfo/BuildInfoWriter.java
@@ -21,6 +21,8 @@ package org.apache.maven.plugins.buildinfo;
import java.io.File;
import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.MojoExecutionException;
@@ -35,6 +37,7 @@ public class BuildInfoWriter
private final Log log;
private final PrintWriter p;
private final boolean mono;
+ private final List<Artifact> artifacts = new ArrayList<>();
private int projectCount = -1;
BuildInfoWriter( Log log, PrintWriter p, boolean mono )
@@ -153,5 +156,11 @@ public class BuildInfoWriter
p.println( prefix + i + ".filename=" + file.getName() );
p.println( prefix + i + ".length=" + file.length() );
p.println( prefix + i + ".checksums.sha512=" + DigestHelper.calculateSha512( file ) );
+ artifacts.add( artifact );
+ }
+
+ public List<Artifact> getArtifacts()
+ {
+ return artifacts;
}
}
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 71056e1..33726b0 100644
--- a/src/main/java/org/apache/maven/plugins/buildinfo/SaveMojo.java
+++ b/src/main/java/org/apache/maven/plugins/buildinfo/SaveMojo.java
@@ -151,7 +151,7 @@ public class SaveMojo
}
}
- generateBuildinfo( mono );
+ List<Artifact> artifacts = generateBuildinfo( mono );
getLog().info( "Saved " + ( mono ? "" : "aggregate " ) + "info on build to " + buildinfoFile );
if ( attach )
@@ -165,14 +165,12 @@ public class SaveMojo
if ( referenceRepo != null )
{
- ArtifactRepository repo = createReferenceRepo();
-
getLog().info( "Checking against reference build from " + referenceRepo + "..." );
- checkAgainstReference( repo );
+ checkAgainstReference( mono, artifacts );
}
}
- private void generateBuildinfo( boolean mono )
+ private List<Artifact> generateBuildinfo( boolean mono )
throws MojoExecutionException
{
MavenProject root = mono ? project : getExecutionRoot();
@@ -198,6 +196,7 @@ public class SaveMojo
bi.printArtifacts( project );
}
}
+ return bi.getArtifacts();
}
catch ( IOException e )
{
@@ -217,44 +216,85 @@ public class SaveMojo
return null;
}
- private void checkAgainstReference( ArtifactRepository repo )
+ private void checkAgainstReference( boolean mono, List<Artifact> artifacts )
throws MojoExecutionException
{
+ ArtifactRepository repo = createReferenceRepo();
referenceDir.mkdirs();
File referenceBuildinfo = downloadReferenceBuildinfo( repo );
+
+ if ( !referenceBuildinfo.canRead() )
+ {
+ // download reference artifacts
+ for ( Artifact artifact : artifacts )
+ {
+ try
+ {
+ downloadReference( repo, artifact );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ getLog().warn( "Reference artifact not found " + artifact );
+ }
+ }
+
+ // generate buildinfo from reference artifacts
+ try ( PrintWriter p =
+ new PrintWriter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream( referenceBuildinfo ),
+ Charsets.ISO_8859_1 ) ) ) )
+ {
+ BuildInfoWriter bi = new BuildInfoWriter( getLog(), p, mono );
+
+ // TODO artifact(s) fingerprints
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Error creating file " + referenceBuildinfo, e );
+ }
+ }
+
+ // TODO compare reference buildinfo vs actual
}
private File downloadReferenceBuildinfo( ArtifactRepository repo )
throws MojoExecutionException
{
- File referenceBuildinfo = new File( referenceDir, buildinfoFile.getName() );
-
Artifact buildinfo =
artifactFactory.createArtifactWithClassifier( project.getGroupId(), project.getArtifactId(),
project.getVersion(), "buildinfo", "" );
try
{
- artifactResolver.resolve( buildinfo, Collections.singletonList( repo ), localRepository );
+ downloadReference( repo, buildinfo );
- FileUtils.copyFile( buildinfo.getFile(), referenceBuildinfo );
- getLog().info( "Reference buildinfo file found, copied to " + referenceBuildinfo );
- }
- catch ( ArtifactResolutionException are )
- {
- throw new MojoExecutionException( "Error resolving buildinfo artifact " + buildinfo, are );
+ getLog().info( "Reference buildinfo file found, copied to " + buildinfo.getFile() );
}
catch ( ArtifactNotFoundException e )
{
getLog().warn( "Reference buildinfo file not found: "
+ "it will be generated from downloaded reference artifacts" );
}
+
+ return buildinfo.getFile();
+ }
+
+ private void downloadReference( ArtifactRepository repo, Artifact artifact )
+ throws MojoExecutionException, ArtifactNotFoundException
+ {
+ try
+ {
+ artifactResolver.resolve( artifact, Collections.singletonList( repo ), localRepository );
+
+ FileUtils.copyFile( artifact.getFile(), new File( referenceDir, artifact.getFile().getName() ) );
+ }
+ catch ( ArtifactResolutionException are )
+ {
+ throw new MojoExecutionException( "Error resolving reference artifact " + artifact, are );
+ }
catch ( IOException ioe )
{
- throw new MojoExecutionException( "Error copying buildinfo artifact " + buildinfo, ioe );
+ throw new MojoExecutionException( "Error copying reference artifact " + artifact, ioe );
}
-
- return referenceBuildinfo;
}
private ArtifactRepository createReferenceRepo()