This is an automated email from the ASF dual-hosted git repository.
hboutemy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-artifact-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new 11861a2 [MARTIFACT-7] record toolchain jdk as mvn.toolchain.jdk
11861a2 is described below
commit 11861a2f132404073292534437431f26e894e0bf
Author: Hervé Boutemy <[email protected]>
AuthorDate: Sun Feb 14 19:44:51 2021 +0100
[MARTIFACT-7] record toolchain jdk as mvn.toolchain.jdk
---
.../artifact/buildinfo/BuildInfoWriter.java | 11 +++
.../plugins/artifact/buildinfo/BuildinfoMojo.java | 27 ++++++++
.../artifact/buildinfo/JdkToolchainUtil.java | 80 ++++++++++++++++++++++
3 files changed, 118 insertions(+)
diff --git
a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java
index 34a27cb..837e7c6 100644
---
a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java
+++
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java
@@ -31,6 +31,7 @@ import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.utils.PropertyUtils;
+import org.apache.maven.toolchain.Toolchain;
/**
* Buildinfo content writer.
@@ -43,6 +44,7 @@ class BuildInfoWriter
private final Map<Artifact, String> artifacts = new LinkedHashMap<>();
private int projectCount = -1;
private boolean ignoreJavadoc = true;
+ private Toolchain toolchain;
BuildInfoWriter( Log log, PrintWriter p, boolean mono )
{
@@ -80,6 +82,10 @@ class BuildInfoWriter
// TODO wrong algorithm, should reuse algorithm written in
versions-maven-plugin
p.println( "mvn.minimum.version=" +
project.getPrerequisites().getMaven() );
}
+ if ( toolchain != null )
+ {
+ p.println( "mvn.toolchain.jdk=" + JdkToolchainUtil.getJavaVersion(
toolchain ) );
+ }
if ( !mono && ( aggregate != null ) )
{
@@ -244,4 +250,9 @@ class BuildInfoWriter
{
this.ignoreJavadoc = ignoreJavadoc;
}
+
+ public void setToolchain( Toolchain toolchain )
+ {
+ this.toolchain = toolchain;
+ }
}
diff --git
a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildinfoMojo.java
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildinfoMojo.java
index 08f50b7..d095947 100644
---
a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildinfoMojo.java
+++
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildinfoMojo.java
@@ -22,6 +22,7 @@ package org.apache.maven.plugins.artifact.buildinfo;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
@@ -33,6 +34,8 @@ import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
import org.apache.maven.shared.utils.io.FileUtils;
import org.apache.maven.shared.utils.logging.MessageUtils;
+import org.apache.maven.toolchain.Toolchain;
+import org.apache.maven.toolchain.ToolchainManager;
import org.apache.maven.shared.utils.StringUtils;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
@@ -156,6 +159,18 @@ public class BuildinfoMojo
@Component
private ArtifactRepositoryLayout artifactRepositoryLayout;
+ /**
+ * The current build session instance. This is used for toolchain manager
API calls.
+ */
+ @Parameter( defaultValue = "${session}", readonly = true, required = true )
+ private MavenSession session;
+
+ /**
+ * To obtain a toolchain if possible.
+ */
+ @Component
+ private ToolchainManager toolchainManager;
+
@Override
public void execute()
throws MojoExecutionException
@@ -249,6 +264,7 @@ public class BuildinfoMojo
{
BuildInfoWriter bi = new BuildInfoWriter( getLog(), p, mono );
bi.setIgnoreJavadoc( ignoreJavadoc );
+ bi.setToolchain( getToolchain() );
bi.printHeader( root, mono ? null : project );
@@ -503,4 +519,15 @@ public class BuildinfoMojo
{
return detectSkip && PluginUtil.isSkip( project );
}
+
+ private Toolchain getToolchain()
+ {
+ Toolchain tc = null;
+ if ( toolchainManager != null )
+ {
+ tc = toolchainManager.getToolchainFromBuildContext( "jdk", session
);
+ }
+
+ return tc;
+ }
}
diff --git
a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/JdkToolchainUtil.java
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/JdkToolchainUtil.java
new file mode 100644
index 0000000..41a0ee1
--- /dev/null
+++
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/JdkToolchainUtil.java
@@ -0,0 +1,80 @@
+package org.apache.maven.plugins.artifact.buildinfo;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.shared.utils.StringUtils;
+import org.apache.maven.shared.utils.cli.CommandLineException;
+import org.apache.maven.shared.utils.cli.CommandLineUtils;
+import org.apache.maven.shared.utils.cli.Commandline;
+import org.apache.maven.shared.utils.cli.StreamConsumer;
+import org.apache.maven.toolchain.Toolchain;
+
+/**
+ * A helper to get JDK version from a JDK toolchain.
+ */
+class JdkToolchainUtil
+{
+ static String getJavaVersion( Toolchain toolchain )
+ {
+ String version = "unknown";
+ String java = toolchain.findTool( "java" );
+ if ( java != null )
+ {
+ try
+ {
+ Commandline cl = new Commandline( java + " -version" );
+ LineConsumer out = new LineConsumer();
+ LineConsumer err = new LineConsumer();
+ CommandLineUtils.executeCommandLine( cl, out, err );
+ version = StringUtils.join( err.getLines().iterator(), ":" );
+ if ( version == null )
+ {
+ version = "unable to detect...";
+ }
+ }
+ catch ( CommandLineException cle )
+ {
+ version = cle.toString();
+ }
+ }
+ return version;
+ }
+
+ private static class LineConsumer implements StreamConsumer
+ {
+ private List<String> lines = new ArrayList<>();
+
+ @Override
+ public void consumeLine( String line )
+ throws IOException
+ {
+ lines.add( line );
+ }
+
+ List<String> getLines()
+ {
+ return lines;
+ }
+ }
+}