You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2023/01/27 19:57:50 UTC
[maven-enforcer] 01/01: [MENFORCER-461] Fix NPE in RequirePluginVersions
This is an automated email from the ASF dual-hosted git repository.
sjaranowski pushed a commit to branch MENFORCER-461
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git
commit f9af29bd12a4c663003b9c368636821a941c8da0
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Fri Jan 27 20:57:03 2023 +0100
[MENFORCER-461] Fix NPE in RequirePluginVersions
---
.../enforcer/rules/RequirePluginVersions.java | 81 ++++++++++++++--------
.../enforcer/rules/TestRequirePluginVersions.java | 13 ++--
.../checkPluginVersionProfile/pom.xml | 4 +-
.../it/projects/require-plugin-versions/pom.xml | 6 ++
4 files changed, 66 insertions(+), 38 deletions(-)
diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequirePluginVersions.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequirePluginVersions.java
index ad7baf5..91c3734 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequirePluginVersions.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequirePluginVersions.java
@@ -24,6 +24,7 @@ import javax.inject.Named;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -39,6 +40,7 @@ import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleError;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.apache.maven.enforcer.rules.utils.EnforcerRuleUtils;
import org.apache.maven.enforcer.rules.utils.ExpressionEvaluator;
@@ -50,11 +52,14 @@ import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.lifecycle.mapping.LifecycleMapping;
import org.apache.maven.model.BuildBase;
import org.apache.maven.model.Model;
+import org.apache.maven.model.ModelBase;
import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginConfiguration;
+import org.apache.maven.model.PluginContainer;
import org.apache.maven.model.Profile;
import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.Reporting;
import org.apache.maven.plugin.InvalidPluginException;
-import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.PluginManager;
import org.apache.maven.plugin.PluginManagerException;
import org.apache.maven.plugin.PluginNotFoundException;
@@ -72,6 +77,8 @@ import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResolutionException;
+import static java.util.Optional.ofNullable;
+
/**
* This rule will enforce that all plugins specified in the poms have a version declared.
*
@@ -127,6 +134,7 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
/**
* Same as unCheckedPlugins but as a comma list to better support properties. Sample form:
* <code>group:artifactId,group2:artifactId2</code>
+ *
* @since 1.0-beta-1
*/
private String unCheckedPluginList;
@@ -145,9 +153,6 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
private final RepositorySystem repositorySystem;
- /** The local. */
- private ArtifactRepository local;
-
/** The session. */
private final MavenSession session;
@@ -195,7 +200,6 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
// get the various expressions out of the helper.
lifecycles = defaultLifeCycles.getLifeCycles();
- local = session.getLocalRepository();
// get all the plugins that are bound to the specified lifecycles
Set<Plugin> allPlugins = getBoundPlugins(project, phases);
@@ -236,7 +240,7 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
if (!failures.isEmpty()) {
handleMessagesToTheUser(project, failures);
}
- } catch (Exception e) {
+ } catch (PluginNotFoundException | LifecycleExecutionException e) {
throw new EnforcerRuleException(e.getLocalizedMessage(), e);
}
}
@@ -312,10 +316,9 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
* @param uncheckedPlugins
* @param plugins
* @return The plugins which have been removed.
- * @throws MojoExecutionException
*/
Set<Plugin> removeUncheckedPlugins(Collection<String> uncheckedPlugins, Set<Plugin> plugins)
- throws MojoExecutionException {
+ throws EnforcerRuleError {
if (uncheckedPlugins != null && !uncheckedPlugins.isEmpty()) {
for (String pluginKey : uncheckedPlugins) {
Plugin plugin = parsePluginString(pluginKey, "UncheckedPlugins");
@@ -328,7 +331,7 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
/**
* Combines the old Collection with the new comma separated list.
*
- * @param uncheckedPlugins a new collections
+ * @param uncheckedPlugins a new collections
* @param uncheckedPluginsList a list to merge
* @return List of unchecked plugins.
*/
@@ -354,10 +357,9 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
* @param existing the existing
* @param additional the additional
* @return the sets the
- * @throws MojoExecutionException the mojo execution exception
+ * @throws EnforcerRuleError the enforcer error
*/
- public Set<Plugin> addAdditionalPlugins(Set<Plugin> existing, List<String> additional)
- throws MojoExecutionException {
+ public Set<Plugin> addAdditionalPlugins(Set<Plugin> existing, List<String> additional) throws EnforcerRuleError {
if (additional != null) {
for (String pluginString : additional) {
Plugin plugin = parsePluginString(pluginString, "AdditionalPlugins");
@@ -377,11 +379,10 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
* Helper method to parse and inject a Plugin.
*
* @param pluginString a plugin description to parse
- * @param field a source of pluginString
+ * @param field a source of pluginString
* @return the prepared plugin
- * @throws MojoExecutionException in case of problems
*/
- private Plugin parsePluginString(String pluginString, String field) throws MojoExecutionException {
+ private Plugin parsePluginString(String pluginString, String field) throws EnforcerRuleError {
if (pluginString != null) {
String[] pluginStrings = pluginString.split(":");
if (pluginStrings.length == 2) {
@@ -391,10 +392,10 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
return plugin;
} else {
- throw new MojoExecutionException("Invalid " + field + " string: " + pluginString);
+ throw new EnforcerRuleError("Invalid " + field + " string: " + pluginString);
}
} else {
- throw new MojoExecutionException("Invalid " + field + " string: " + pluginString);
+ throw new EnforcerRuleError("Invalid " + field + " string: " + pluginString);
}
}
@@ -813,42 +814,62 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
}
private void addPluginsInProfiles(List<PluginWrapper> plugins, Model model) {
- List<Profile> profiles = model.getProfiles();
+ List<Profile> profiles = ofNullable(model).map(Model::getProfiles).orElseGet(Collections::emptyList);
for (Profile profile : profiles) {
- getProfilePlugins(plugins, model, profile);
- getProfileReportingPlugins(plugins, model, profile);
- getProfilePluginManagementPlugins(plugins, model, profile);
+ getProfilePlugins(plugins, profile);
+ getProfileReportingPlugins(plugins, profile);
+ getProfilePluginManagementPlugins(plugins, profile);
}
}
- private void getProfilePluginManagementPlugins(List<PluginWrapper> plugins, Model model, Profile profile) {
- List<Plugin> modelPlugins = profile.getBuild().getPluginManagement().getPlugins();
+ private void getProfilePluginManagementPlugins(List<PluginWrapper> plugins, Profile profile) {
+ List<Plugin> modelPlugins = ofNullable(profile)
+ .map(Profile::getBuild)
+ .map(PluginConfiguration::getPluginManagement)
+ .map(PluginContainer::getPlugins)
+ .orElseGet(Collections::emptyList);
plugins.addAll(PluginWrapper.addAll(utils.resolvePlugins(modelPlugins), banMavenDefaults));
}
- private void getProfileReportingPlugins(List<PluginWrapper> plugins, Model model, Profile profile) {
- List<ReportPlugin> modelReportPlugins = profile.getReporting().getPlugins();
+ private void getProfileReportingPlugins(List<PluginWrapper> plugins, Profile profile) {
+ List<ReportPlugin> modelReportPlugins = ofNullable(profile)
+ .map(ModelBase::getReporting)
+ .map(Reporting::getPlugins)
+ .orElseGet(Collections::emptyList);
// add the reporting plugins
plugins.addAll(PluginWrapper.addAll(utils.resolveReportPlugins(modelReportPlugins), banMavenDefaults));
}
- private void getProfilePlugins(List<PluginWrapper> plugins, Model model, Profile profile) {
- List<Plugin> modelPlugins = profile.getBuild().getPlugins();
+ private void getProfilePlugins(List<PluginWrapper> plugins, Profile profile) {
+ List<Plugin> modelPlugins = ofNullable(profile)
+ .map(Profile::getBuild)
+ .map(PluginContainer::getPlugins)
+ .orElseGet(Collections::emptyList);
plugins.addAll(PluginWrapper.addAll(utils.resolvePlugins(modelPlugins), banMavenDefaults));
}
private void getPlugins(List<PluginWrapper> plugins, Model model) {
- List<Plugin> modelPlugins = model.getBuild().getPlugins();
+ List<Plugin> modelPlugins = ofNullable(model)
+ .map(Model::getBuild)
+ .map(PluginContainer::getPlugins)
+ .orElseGet(Collections::emptyList);
plugins.addAll(PluginWrapper.addAll(utils.resolvePlugins(modelPlugins), banMavenDefaults));
}
private void getPluginManagementPlugins(List<PluginWrapper> plugins, Model model) {
- List<Plugin> modelPlugins = model.getBuild().getPluginManagement().getPlugins();
+ List<Plugin> modelPlugins = ofNullable(model)
+ .map(Model::getBuild)
+ .map(PluginConfiguration::getPluginManagement)
+ .map(PluginContainer::getPlugins)
+ .orElseGet(Collections::emptyList);
plugins.addAll(PluginWrapper.addAll(utils.resolvePlugins(modelPlugins), banMavenDefaults));
}
private void getReportingPlugins(List<PluginWrapper> plugins, Model model) {
- List<ReportPlugin> modelReportPlugins = model.getReporting().getPlugins();
+ List<ReportPlugin> modelReportPlugins = ofNullable(model)
+ .map(ModelBase::getReporting)
+ .map(Reporting::getPlugins)
+ .orElseGet(Collections::emptyList);
// add the reporting plugins
plugins.addAll(PluginWrapper.addAll(utils.resolveReportPlugins(modelReportPlugins), banMavenDefaults));
}
diff --git a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestRequirePluginVersions.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestRequirePluginVersions.java
index 49f6320..155c65b 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestRequirePluginVersions.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestRequirePluginVersions.java
@@ -26,6 +26,7 @@ import java.util.Set;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.enforcer.rule.api.EnforcerLogger;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleError;
import org.apache.maven.enforcer.rules.utils.EnforcerRuleUtils;
import org.apache.maven.enforcer.rules.utils.ExpressionEvaluator;
import org.apache.maven.enforcer.rules.utils.PluginWrapper;
@@ -249,7 +250,7 @@ class TestRequirePluginVersions {
* @throws MojoExecutionException the mojo execution exception
*/
@Test
- void testGetAdditionalPluginsNull() throws MojoExecutionException {
+ void testGetAdditionalPluginsNull() throws Exception {
rule.addAdditionalPlugins(null, null);
}
@@ -268,7 +269,7 @@ class TestRequirePluginVersions {
try {
rule.addAdditionalPlugins(plugins, additional);
fail("Expected Exception because the format is invalid");
- } catch (MojoExecutionException e) {
+ } catch (EnforcerRuleError e) {
}
// invalid format (too many sections)
@@ -277,7 +278,7 @@ class TestRequirePluginVersions {
try {
rule.addAdditionalPlugins(plugins, additional);
fail("Expected Exception because the format is invalid");
- } catch (MojoExecutionException e) {
+ } catch (EnforcerRuleError e) {
}
}
@@ -287,7 +288,7 @@ class TestRequirePluginVersions {
* @throws MojoExecutionException the mojo execution exception
*/
@Test
- void testGetAdditionalPluginsEmptySet() throws MojoExecutionException {
+ void testGetAdditionalPluginsEmptySet() throws Exception {
Set<Plugin> plugins = new HashSet<>();
plugins.add(EnforcerTestUtils.newPlugin("group", "a-artifact", "1.0"));
@@ -312,7 +313,7 @@ class TestRequirePluginVersions {
* @throws MojoExecutionException the mojo execution exception
*/
@Test
- void testGetAdditionalPlugins() throws MojoExecutionException {
+ void testGetAdditionalPlugins() throws Exception {
Set<Plugin> plugins = new HashSet<>();
plugins.add(EnforcerTestUtils.newPlugin("group", "a-artifact", "1.0"));
@@ -338,7 +339,7 @@ class TestRequirePluginVersions {
* @throws MojoExecutionException the mojo execution exception
*/
@Test
- void testGetUncheckedPlugins() throws MojoExecutionException {
+ void testGetUncheckedPlugins() throws Exception {
Set<Plugin> plugins = new HashSet<>();
plugins.add(EnforcerTestUtils.newPlugin("group", "a-artifact", "1.0"));
diff --git a/enforcer-rules/src/test/resources/requirePluginVersions/checkPluginVersionProfile/pom.xml b/enforcer-rules/src/test/resources/requirePluginVersions/checkPluginVersionProfile/pom.xml
index 48a688a..7b310fa 100644
--- a/enforcer-rules/src/test/resources/requirePluginVersions/checkPluginVersionProfile/pom.xml
+++ b/enforcer-rules/src/test/resources/requirePluginVersions/checkPluginVersionProfile/pom.xml
@@ -64,12 +64,12 @@
<executions>
<execution>
<goals><goal>site</goal></goals>
+ <phase>validate</phase>
</execution>
- <phase>validate</phase>
</executions>
</plugin>
</plugins>
</build>
- </profile>
+ </profile>
</profiles>
</project>
\ No newline at end of file
diff --git a/maven-enforcer-plugin/src/it/projects/require-plugin-versions/pom.xml b/maven-enforcer-plugin/src/it/projects/require-plugin-versions/pom.xml
index beb7c2c..ed52b00 100644
--- a/maven-enforcer-plugin/src/it/projects/require-plugin-versions/pom.xml
+++ b/maven-enforcer-plugin/src/it/projects/require-plugin-versions/pom.xml
@@ -30,6 +30,12 @@ under the License.
<description>
</description>
+ <profiles>
+ <profile>
+ <id>test</id>
+ </profile>
+ </profiles>
+
<build>
<plugins>
<plugin>