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

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

commit 32a3cf42532cbcfc9b01a395e7f5c623d9715387
Author: Hervé Boutemy <hbout...@apache.org>
AuthorDate: Sun Aug 24 22:16:48 2025 +0200

    [MSHARED-1466] add Java-Version to MANIFEST.MF
    
    fixes #259
---
 pom.xml                                            |   5 +
 .../org/apache/maven/archiver/BuildHelper.java     | 113 +++++++++++++++++++++
 .../org/apache/maven/archiver/MavenArchiver.java   |   9 +-
 3 files changed, 125 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index 90ad6aa..418de9f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,6 +83,11 @@
       <artifactId>plexus-interpolation</artifactId>
       <version>1.28</version>
     </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-xml</artifactId>
+      <version>3.0.2</version>
+    </dependency>
     <!--
       Test dependencies
     -->
diff --git a/src/main/java/org/apache/maven/archiver/BuildHelper.java 
b/src/main/java/org/apache/maven/archiver/BuildHelper.java
new file mode 100644
index 0000000..7cf56cc
--- /dev/null
+++ b/src/main/java/org/apache/maven/archiver/BuildHelper.java
@@ -0,0 +1,113 @@
+/*
+ * 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.
+ */
+package org.apache.maven.archiver;
+
+import java.util.Arrays;
+import java.util.Map;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginContainer;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * Helper to detect info about build info in a MavenProject, as configured in 
plugins.
+ * 
+ * @since 3.6.5
+ */
+public class BuildHelper {
+    /**
+     * Tries to determine the target Java release from the following sources 
(until one is found)
+     * <ol>
+     * <li>use {@code release} configuration of {@code 
org.apache.maven.plugins:maven-compiler-plugin}</li>
+     * <li>use {@code maven.compiler.release<} property</li>
+     * <li>use {@code target} configuration of {@code 
org.apache.maven.plugins:maven-compiler-plugin}</li>
+     * <li>use {@code maven.compiler.target} property</li>
+     * </ol>
+     *
+     * @param project not null
+     * @return the Java release version configured in the project, or null if 
not configured
+     */
+    public static String discoverJavaRelease(MavenProject project) {
+        Plugin compiler = getCompilerPlugin(project);
+
+        String jdk = getPluginParameter(project, compiler, "release", 
"maven.compiler.release");
+
+        if (jdk == null) {
+            jdk = getPluginParameter(project, compiler, "target", 
"maven.compiler.target");
+        }
+
+        if (jdk != null) {
+            jdk = normalizeJavaVersion(jdk);
+        }
+
+        return jdk;
+    }
+
+    public static String normalizeJavaVersion(String jdk) {
+        if (jdk.length() == 3 && Arrays.asList("1.5", "1.6", "1.7", 
"1.8").contains(jdk)) {
+            jdk = jdk.substring(2);
+        }
+        return jdk;
+    }
+
+    public static Plugin getCompilerPlugin(MavenProject project) {
+        return getPlugin(project, 
"org.apache.maven.plugins:maven-compiler-plugin");
+    }
+
+    public static Plugin getPlugin(MavenProject project, String pluginGa) {
+        Plugin plugin = getPlugin(project.getBuild(), pluginGa);
+        if (plugin == null) {
+            plugin = getPlugin(project.getPluginManagement(), pluginGa);
+        }
+        return plugin;
+    }
+
+    public static String getPluginParameter(
+            MavenProject project, Plugin plugin, String parameter, String 
defaultValueProperty) {
+        String value = getPluginParameter(plugin, parameter);
+        if (value == null) {
+            value = project.getProperties().getProperty(defaultValueProperty);
+        }
+        return value;
+    }
+
+    private static Plugin getPlugin(PluginContainer container, String 
pluginGa) {
+        if (container == null) {
+            return null;
+        }
+        Map<String, Plugin> pluginsAsMap = container.getPluginsAsMap();
+        return pluginsAsMap.get(pluginGa);
+    }
+
+    private static String getPluginParameter(Plugin plugin, String parameter) {
+        if (plugin != null) {
+            Xpp3Dom pluginConf = (Xpp3Dom) plugin.getConfiguration();
+
+            if (pluginConf != null) {
+                Xpp3Dom target = pluginConf.getChild(parameter);
+
+                if (target != null) {
+                    return target.getValue();
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/org/apache/maven/archiver/MavenArchiver.java 
b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
index be0b6a5..cbe0183 100644
--- a/src/main/java/org/apache/maven/archiver/MavenArchiver.java
+++ b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
@@ -252,7 +252,7 @@ public class MavenArchiver {
         Manifest m = new Manifest();
 
         if (config.isAddDefaultEntries()) {
-            handleDefaultEntries(m, entries);
+            handleDefaultEntries(project, m, entries);
         }
 
         if (config.isAddBuildEnvironmentEntries()) {
@@ -607,12 +607,17 @@ public class MavenArchiver {
         archiver.createArchive();
     }
 
-    private void handleDefaultEntries(Manifest m, Map<String, String> entries) 
throws ManifestException {
+    private void handleDefaultEntries(MavenProject project, Manifest m, 
Map<String, String> entries)
+            throws ManifestException {
         String createdBy = this.createdBy;
         if (createdBy == null) {
             createdBy = createdBy(CREATED_BY, "org.apache.maven", 
"maven-archiver");
         }
         addManifestAttribute(m, entries, "Created-By", createdBy);
+        String javaVersion = BuildHelper.discoverJavaRelease(project);
+        if (javaVersion != null) {
+            addManifestAttribute(m, entries, "Java-Version", javaVersion);
+        }
         if (buildJdkSpecDefaultEntry) {
             addManifestAttribute(m, entries, "Build-Jdk-Spec", 
System.getProperty("java.specification.version"));
         }

Reply via email to