This is an automated email from the ASF dual-hosted git repository.

hboutemy pushed a commit to branch MJAR-289
in repository https://gitbox.apache.org/repos/asf/maven-jar-plugin.git

commit ebab2ac3dc98b1e6546be76b84d29b9b3aab7069
Author: Hervé Boutemy <hbout...@apache.org>
AuthorDate: Wed Feb 28 00:30:52 2024 +0100

    [MJAR-289] add toolchains support
---
 .../apache/maven/plugins/jar/AbstractJarMojo.java  | 38 ++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/src/main/java/org/apache/maven/plugins/jar/AbstractJarMojo.java 
b/src/main/java/org/apache/maven/plugins/jar/AbstractJarMojo.java
index ab2a50f..c231b5f 100644
--- a/src/main/java/org/apache/maven/plugins/jar/AbstractJarMojo.java
+++ b/src/main/java/org/apache/maven/plugins/jar/AbstractJarMojo.java
@@ -19,8 +19,10 @@
 package org.apache.maven.plugins.jar;
 
 import java.io.File;
+import java.io.IOException;
 import java.nio.file.FileSystems;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Map;
 
 import org.apache.maven.archiver.MavenArchiveConfiguration;
@@ -34,8 +36,14 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectHelper;
 import org.apache.maven.shared.model.fileset.FileSet;
 import org.apache.maven.shared.model.fileset.util.FileSetManager;
+import org.apache.maven.toolchain.Toolchain;
+import org.apache.maven.toolchain.ToolchainManager;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.jar.JarArchiver;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.cli.StreamConsumer;
 
 /**
  * Base class for creating a jar from project classes.
@@ -53,6 +61,9 @@ public abstract class AbstractJarMojo extends AbstractMojo {
 
     private static final String SEPARATOR = 
FileSystems.getDefault().getSeparator();
 
+    @Component
+    ToolchainManager toolchainManager;
+
     /**
      * List of files to include. Specified as fileset patterns which are 
relative to the input directory whose contents
      * is being packaged into the JAR.
@@ -250,6 +261,33 @@ public abstract class AbstractJarMojo extends AbstractMojo 
{
         archiver.setArchiver((JarArchiver) archivers.get(archiverName));
         archiver.setOutputFile(jarFile);
 
+        Toolchain toolchain = 
toolchainManager.getToolchainFromBuildContext("jdk", session);
+        if (toolchain != null) {
+            String javac = toolchain.findTool("javac");
+            String version = "unknown";
+            try {
+                Commandline cl = new Commandline(javac);
+                cl.createArg().setValue("-version");
+                CommandLineUtils.StringStreamConsumer out = new 
CommandLineUtils.StringStreamConsumer();
+                CommandLineUtils.StringStreamConsumer err = new 
CommandLineUtils.StringStreamConsumer();
+                CommandLineUtils.executeCommandLine(cl, out, err);
+                version = out.getOutput();
+                if (version.startsWith("javac ")) {
+                    version = version.substring(6);
+                }
+                if (version.startsWith("1.")) {
+                    version = version.substring(0, 3);
+                } else {
+                    version = version.substring(0, 2);
+                }
+            } catch (CommandLineException e) {
+                throw new RuntimeException(e);
+            }
+            // TODO cache in MavenSession for reuse?
+            archive.addManifestEntry("Build-Jdk-Spec", version);
+            archive.addManifestEntry("Build-Tool-Jdk-Spec", 
System.getProperty("java.specification.version"));
+        }
+
         // configure for Reproducible Builds based on outputTimestamp value
         archiver.configureReproducibleBuild(outputTimestamp);
 

Reply via email to