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;
+        }
+    }
+}

Reply via email to