diff --git a/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/DescriptorGeneratorMojo.java b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/DescriptorGeneratorMojo.java index 8434aa556..30801578e 100644 --- a/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/DescriptorGeneratorMojo.java +++ b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/DescriptorGeneratorMojo.java @@ -42,7 +42,7 @@ import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.project.MavenProject; import org.apache.maven.tools.plugin.DefaultPluginToolsRequest; -import org.apache.maven.tools.plugin.ExtendedPluginDescriptor; +import org.apache.maven.tools.plugin.PluginDescriptorHelper; import org.apache.maven.tools.plugin.PluginToolsRequest; import org.apache.maven.tools.plugin.extractor.ExtractionException; import org.apache.maven.tools.plugin.generator.GeneratorException; @@ -376,10 +376,9 @@ public void generate() throws MojoExecutionException { } private PluginDescriptor extendPluginDescriptor(PluginToolsRequest request) { - ExtendedPluginDescriptor extendedPluginDescriptor = new ExtendedPluginDescriptor(request.getPluginDescriptor()); - extendedPluginDescriptor.setRequiredJavaVersion(getRequiredJavaVersion(request)); - extendedPluginDescriptor.setRequiredMavenVersion(getRequiredMavenVersion(request)); - return extendedPluginDescriptor; + PluginDescriptor pluginDescriptor = request.getPluginDescriptor(); + pluginDescriptor.setRequiredMavenVersion(getRequiredMavenVersion(request)); + return PluginDescriptorHelper.setRequiredJavaVersion(pluginDescriptor, getRequiredJavaVersion(request)); } private String getRequiredMavenVersion(PluginToolsRequest request) { diff --git a/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java b/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java index e97be9a1e..7fa60db5f 100644 --- a/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java +++ b/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java @@ -29,7 +29,7 @@ import org.apache.maven.model.Prerequisites; import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.project.MavenProject; -import org.apache.maven.tools.plugin.ExtendedPluginDescriptor; +import org.apache.maven.tools.plugin.PluginDescriptorHelper; import org.codehaus.plexus.util.xml.Xpp3Dom; /** @@ -114,11 +114,7 @@ public static String discoverMavenRequirement(MavenProject project, PluginDescri * @return the JDK version */ public static String discoverJdkRequirement(MavenProject project, PluginDescriptor pluginDescriptor) { - String jdk = null; - if (pluginDescriptor instanceof ExtendedPluginDescriptor) { - ExtendedPluginDescriptor extPluginDescriptor = (ExtendedPluginDescriptor) pluginDescriptor; - jdk = extPluginDescriptor.getRequiredJavaVersion(); - } + String jdk = PluginDescriptorHelper.getRequiredJavaVersion(pluginDescriptor); if (jdk != null) { return jdk; } diff --git a/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/PluginDescriptorHelper.java b/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/PluginDescriptorHelper.java new file mode 100644 index 000000000..a35baabad --- /dev/null +++ b/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/PluginDescriptorHelper.java @@ -0,0 +1,100 @@ +/* + * 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.tools.plugin; + +import java.lang.reflect.Method; + +import org.apache.maven.plugin.descriptor.PluginDescriptor; + +public class PluginDescriptorHelper { + + private static final Method GET_REQUIRED_JAVA_VERSION_METHOD; + private static final Method SET_REQUIRED_JAVA_VERSION_METHOD; + + static { + Method getMethod = null; + Method setMethod = null; + try { + getMethod = PluginDescriptor.class.getMethod("getRequiredJavaVersion"); + setMethod = PluginDescriptor.class.getMethod("setRequiredJavaVersion", String.class); + } catch (NoSuchMethodException e) { + // Methods don't exist in this version of Maven + } + GET_REQUIRED_JAVA_VERSION_METHOD = getMethod; + SET_REQUIRED_JAVA_VERSION_METHOD = setMethod; + } + + public static String getRequiredJavaVersion(PluginDescriptor descriptor) { + if (descriptor == null) { + return null; + } + + // First try to use the direct method if available in Maven 4 + if (GET_REQUIRED_JAVA_VERSION_METHOD != null) { + try { + return (String) GET_REQUIRED_JAVA_VERSION_METHOD.invoke(descriptor); + } catch (Exception e) { + // Fall back to the wrapper approach + } + } + + // Fall back to the wrapper approach for Maven 3 + if (descriptor instanceof ExtendedPluginDescriptor) { + return ((ExtendedPluginDescriptor) descriptor).getRequiredJavaVersion(); + } + + return null; + } + + /** + * Sets the required Java version on a plugin descriptor. + *
+ * This method works with both Maven 3 and Maven 4: + *