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:49 UTC
[maven-enforcer] branch MENFORCER-461 created (now f9af29b)
This is an automated email from the ASF dual-hosted git repository.
sjaranowski pushed a change to branch MENFORCER-461
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git
at f9af29b [MENFORCER-461] Fix NPE in RequirePluginVersions
This branch includes the following new commits:
new f9af29b [MENFORCER-461] Fix NPE in RequirePluginVersions
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[maven-enforcer] 01/01: [MENFORCER-461] Fix NPE in RequirePluginVersions
Posted by sj...@apache.org.
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>