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

hboutemy pushed a commit to branch toolchains
in repository https://gitbox.apache.org/repos/asf/maven-archiver.git

commit 4e5bc2a3ddca1ecf118eac9cb45664b23a5b3567
Author: HervĂ© Boutemy <[email protected]>
AuthorDate: Tue Jan 6 02:58:34 2026 +0100

    add toolchain support
    
    fixes #327
---
 pom.xml                                            |  6 +++
 .../org/apache/maven/archiver/MavenArchiver.java   | 47 +++++++++++++++++++---
 src/site/xdoc/index.xml.vm                         | 10 +++--
 3 files changed, 54 insertions(+), 9 deletions(-)

diff --git a/pom.xml b/pom.xml
index 352aa60..1fe75c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,6 +84,12 @@
       <version>${mavenVersion}</version>
       <scope>provided</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-toolchain</artifactId>
+      <version>${mavenVersion}</version>
+      <scope>provided</scope>
+    </dependency>
     <!--
       Plexus dependencies
     -->
diff --git a/src/main/java/org/apache/maven/archiver/MavenArchiver.java 
b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
index d2f15fd..671f73f 100644
--- a/src/main/java/org/apache/maven/archiver/MavenArchiver.java
+++ b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
@@ -45,6 +45,7 @@ import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.toolchain.Toolchain;
 import org.codehaus.plexus.archiver.jar.JarArchiver;
 import org.codehaus.plexus.archiver.jar.Manifest;
 import org.codehaus.plexus.archiver.jar.ManifestException;
@@ -118,6 +119,8 @@ public class MavenArchiver {
 
     private boolean buildJdkSpecDefaultEntry = true;
 
+    private Toolchain toolchain;
+
     /**
      * <p>getManifest.</p>
      *
@@ -615,7 +618,17 @@ public class MavenArchiver {
             addManifestAttribute(m, entries, "Java-Version", javaVersion);
         }
         if (buildJdkSpecDefaultEntry) {
-            addManifestAttribute(m, entries, "Build-Jdk-Spec", 
System.getProperty("java.specification.version"));
+            String runtimeSpec = 
System.getProperty("java.specification.version");
+            String buildSpec;
+            if (toolchain == null) {
+                buildSpec = runtimeSpec;
+            } else {
+                // TODO extract JDK Spec from toolchain
+                buildSpec = "TODO";
+            }
+
+            addManifestAttribute(m, entries, "Build-Tool-Jre-Spec", 
runtimeSpec);
+            addManifestAttribute(m, entries, "Build-Jdk-Spec", buildSpec);
         }
     }
 
@@ -626,11 +639,19 @@ public class MavenArchiver {
                 entries,
                 "Build-Tool",
                 session != null ? 
session.getSystemProperties().getProperty("maven.build.version") : "Apache 
Maven");
-        addManifestAttribute(
-                m,
-                entries,
-                "Build-Jdk",
-                String.format("%s (%s)", System.getProperty("java.version"), 
System.getProperty("java.vendor")));
+
+        String runtimeJvm =
+                String.format("%s (%s)", System.getProperty("java.version"), 
System.getProperty("java.vendor"));
+        String buildJvm;
+        if (toolchain == null) {
+            buildJvm = runtimeJvm;
+        } else {
+            // TODO extract JDK from toolchain
+            buildJvm = "TODO";
+        }
+        addManifestAttribute(m, entries, "Build-Tool-Jre", runtimeJvm);
+        addManifestAttribute(m, entries, "Build-Jdk", buildJvm);
+
         addManifestAttribute(
                 m,
                 entries,
@@ -810,4 +831,18 @@ public class MavenArchiver {
         
parseBuildOutputTimestamp(outputTimestamp).map(FileTime::from).ifPresent(modifiedTime
 -> getArchiver()
                 .configureReproducibleBuild(modifiedTime));
     }
+
+    /**
+     * Configure Toolchain used for creating the archive.
+     *
+     * @param toolchain the toolchain (may be {@code null})
+     * @since 3.6.7
+     */
+    public void setToolchain(Toolchain toolchain) {
+        this.toolchain = toolchain;
+    }
+
+    public Toolchain getToolchain() {
+        return toolchain;
+    }
 }
diff --git a/src/site/xdoc/index.xml.vm b/src/site/xdoc/index.xml.vm
index 9aca084..7be099c 100644
--- a/src/site/xdoc/index.xml.vm
+++ b/src/site/xdoc/index.xml.vm
@@ -218,13 +218,16 @@ version=\${project.version}</source>
             <td>
               If the manifest will contain these entries:
               <source>Created-By: Maven Archiver ${project.version}
-Build-Jdk-Spec: ${java.specification.version}
+Build-Tool-Jre-Spec: ${java.specification.version}
+Build-Jdk-Spec: ${java.specification.version} of compiler
 Java-Version: &#36;{project maven.compiler.release/target}</source>
               Since 3.5.0, the default value of <code>Created-By</code> entry 
can be overridden (usually by plugin code) using
               <a 
href="./apidocs/org/apache/maven/archiver/MavenArchiver.html">MavenArchiver.setCreatedBy(...)</a>
 API.<br />
               Since 3.6.5, <code>Java-Version</code> entry is discovered by
               <a 
href="./apidocs/org/apache/maven/archiver/BuildHelper.html">BuildHelper.discoverJavaRelease(...)</a>
 API.<br />
-              The default value is <code>true</code>.
+              The default value is <code>true</code>.<br />
+              Since 3.6.7, <code>Build-Tool-Jre-Spec</code> entry is added 
with Maven runtime info, while
+              <code>Build-Jdk-Spec</code> follows eventual toolchain.
             </td>
           </tr>
           <tr>
@@ -258,7 +261,8 @@ Specification-Vendor: \${project.organization.name}</source>
             <td>
               If the manifest will contain these entries:
               <source>Build-Tool: ${maven.build.version}
-Build-Jdk: ${java.version} (${java.vendor})
+Build-Tool-Jre: ${java.version} (${java.vendor})
+Build-Jdk: ${java.version} (${java.vendor}) of compiler
 Build-Os:  ${os.name} (${os.version}; (${os.arch})</source>
               The default value is <code>false</code>.
             </td>

Reply via email to