This is an automated email from the ASF dual-hosted git repository. khmarbaise pushed a commit to branch MENFORCER-306 in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git
commit e33f72f92e2d46d09472da7ecbaacdc9832317d6 Author: Karl Heinz Marbaise <[email protected]> AuthorDate: Thu Aug 16 22:31:13 2018 +0200 WIP - [MENFORCER-306] - [REGRESSION] RequirePluginVersions fails o Added some debugging output o Added first implementation which is not final yet. o Added simple IT's for this case. o Make it Maven 3.0.5 compatible. o Changed IT's according to parameter definition with List. --- .../plugins/enforcer/RequirePluginVersions.java | 210 ++++++++++++--------- .../enforcer/TestRequirePluginVersions.java | 8 - .../src/it/projects/MENFORCER-306/parent/pom.xml | 103 ++++++++++ .../src/it/projects/MENFORCER-306/pom.xml | 31 +++ 4 files changed, 256 insertions(+), 96 deletions(-) diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java index 9936462..8ad38bc 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java @@ -162,25 +162,25 @@ public class RequirePluginVersions private Collection<Lifecycle> lifecycles; /** The factory. */ - ArtifactFactory factory; + private ArtifactFactory factory; /** The resolver. */ - ArtifactResolver resolver; + private ArtifactResolver resolver; /** The local. */ - ArtifactRepository local; + private ArtifactRepository local; /** The remote repositories. */ - List<ArtifactRepository> remoteRepositories; + private List<ArtifactRepository> remoteRepositories; /** The log. */ - Log log; + private Log log; /** The session. */ - MavenSession session; + private MavenSession session; /** The utils. */ - EnforcerRuleUtils utils; + private EnforcerRuleUtils utils; @Override public void execute( EnforcerRuleHelper helper ) @@ -267,7 +267,7 @@ public class RequirePluginVersions + plugin.getVersion() ); if ( !hasValidVersionSpecified( helper, plugin, pluginWrappers ) ) { - log.debug( "hasValidVersionSpecified(1): " + plugin.getGroupId() + ":" + plugin.getArtifactId() + log.debug( "hasValidVersionSpecified(2): " + plugin.getGroupId() + ":" + plugin.getArtifactId() + ":" + plugin.getVersion() ); failures.add( plugin ); } @@ -624,12 +624,11 @@ public class RequirePluginVersions return allPlugins; } - /* - * Checks to see if the version is specified for the plugin. Can optionally ban "RELEASE" or "LATEST" even if - * specified. - */ /** * Checks for valid version specified. + * + * Checks to see if the version is specified for the plugin. Can optionally ban "RELEASE" or "LATEST" even if + * specified. * * @param helper the helper * @param source the source @@ -658,9 +657,9 @@ public class RequirePluginVersions return false; } - if ( isVersion( version ) ) + if ( isValidVersion( version ) ) { - log.debug( "checking for notEmpty and notIsWhiespace(): " + version ); + helper.getLog().debug( "checking for notEmpty and notIsWhiespace(): " + version ); if ( banRelease && version.equals( "RELEASE" ) ) { return false; @@ -691,12 +690,12 @@ public class RequirePluginVersions } if ( !found ) { - log.debug( "plugin " + source.getGroupId() + ":" + source.getArtifactId() + " not found" ); + helper.getLog().debug( "plugin " + source.getGroupId() + ":" + source.getArtifactId() + " not found" ); } return status; } - private boolean isVersion( String version ) + private boolean isValidVersion( String version ) { return StringUtils.isNotEmpty( version ) && !StringUtils.isWhitespace( version ); } @@ -1053,6 +1052,7 @@ public class RequirePluginVersions return pluginDescriptor; } + /** * Gets all plugin entries in build.plugins, build.pluginManagement.plugins, profile.build.plugins, reporting and * profile.reporting in this project and all parents @@ -1067,97 +1067,131 @@ public class RequirePluginVersions protected List<PluginWrapper> getAllPluginEntries( MavenProject project ) throws ArtifactResolutionException, ArtifactNotFoundException, IOException, XmlPullParserException { - // get all the pom models - List<Model> models = new ArrayList<Model>(); List<MavenProject> sortedProjects = session.getProjectDependencyGraph().getSortedProjects(); + + if ( sortedProjects.size() > 0 && sortedProjects.get( 0 ).getParent() != null ) + { + MavenProject mp = sortedProjects.get( 0 ).getParent(); + models.add( mp.getOriginalModel() ); + } + for ( MavenProject mavenProject : sortedProjects ) { models.add( mavenProject.getOriginalModel() ); } List<PluginWrapper> plugins = new ArrayList<PluginWrapper>(); - // now find all the plugin entries, either in // build.plugins or build.pluginManagement.plugins, profiles.plugins and reporting for ( Model model : models ) { - try - { - List<Plugin> modelPlugins = model.getBuild().getPlugins(); - plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), - model.getId() + ".build.plugins" ) ); - } - catch ( NullPointerException e ) - { - // guess there are no plugins here. - } + getPlugins( plugins, model ); + getReportingPlugins( plugins, model ); + getPluginManagementPlugins( plugins, model ); - try - { - List<ReportPlugin> modelReportPlugins = model.getReporting().getPlugins(); - // add the reporting plugins - plugins.addAll( PluginWrapper.addAll( utils.resolveReportPlugins( modelReportPlugins ), - model.getId() + ".reporting" ) ); - } - catch ( NullPointerException e ) - { - // guess there are no plugins here. - } + addPluginsInProfiles( plugins, model ); + } - try - { - List<Plugin> modelPlugins = model.getBuild().getPluginManagement().getPlugins(); - plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), - model.getId() + ".build.pluginManagement.plugins" ) ); - } - catch ( NullPointerException e ) - { - // guess there are no plugins here. - } + return plugins; + } - // Add plugins in profiles - List<Profile> profiles = model.getProfiles(); - for ( Profile profile : profiles ) - { - try - { - List<Plugin> modelPlugins = profile.getBuild().getPlugins(); - plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), model.getId() - + ".profiles.profile[" + profile.getId() + "].build.plugins" ) ); - } - catch ( NullPointerException e ) - { - // guess there are no plugins here. - } + private void addPluginsInProfiles( List<PluginWrapper> plugins, Model model ) + { + List<Profile> profiles = model.getProfiles(); + for ( Profile profile : profiles ) + { + getProfilePlugins( plugins, model, profile ); + getProfileReportingPlugins( plugins, model, profile ); + getProfilePluginManagementPlugins( plugins, model, profile ); + } + } - try - { - List<ReportPlugin> modelReportPlugins = profile.getReporting().getPlugins(); - // add the reporting plugins - plugins.addAll( PluginWrapper.addAll( utils.resolveReportPlugins( modelReportPlugins ), - model.getId() + "profile[" + profile.getId() - + "].reporting.plugins" ) ); - } - catch ( NullPointerException e ) - { - // guess there are no plugins here. - } - try - { - List<Plugin> modelPlugins = profile.getBuild().getPluginManagement().getPlugins(); - plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), model.getId() - + "profile[" + profile.getId() + "].build.pluginManagement.plugins" ) ); - } - catch ( NullPointerException e ) - { - // guess there are no plugins here. - } - } + private void getProfilePluginManagementPlugins( List<PluginWrapper> plugins, Model model, Profile profile ) + { + try + { + List<Plugin> modelPlugins = profile.getBuild().getPluginManagement().getPlugins(); + plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), model.getId() + "profile[" + + profile.getId() + "].build.pluginManagement.plugins" ) ); } + catch ( NullPointerException e ) + { + // guess there are no plugins here. + } + } - return plugins; + private void getProfileReportingPlugins( List<PluginWrapper> plugins, Model model, Profile profile ) + { + try + { + List<ReportPlugin> modelReportPlugins = profile.getReporting().getPlugins(); + // add the reporting plugins + plugins.addAll( PluginWrapper.addAll( utils.resolveReportPlugins( modelReportPlugins ), model.getId() + + "profile[" + profile.getId() + "].reporting.plugins" ) ); + } + catch ( NullPointerException e ) + { + // guess there are no plugins here. + } + } + + private void getProfilePlugins( List<PluginWrapper> plugins, Model model, Profile profile ) + { + try + { + List<Plugin> modelPlugins = profile.getBuild().getPlugins(); + plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), model.getId() + + ".profiles.profile[" + profile.getId() + "].build.plugins" ) ); + } + catch ( NullPointerException e ) + { + // guess there are no plugins here. + } + } + + private void getPlugins( List<PluginWrapper> plugins, Model model ) + { + try + { + List<Plugin> modelPlugins = model.getBuild().getPlugins(); + plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), + model.getId() + ".build.plugins" ) ); + } + catch ( NullPointerException e ) + { + // guess there are no plugins here. + } + } + + private void getPluginManagementPlugins( List<PluginWrapper> plugins, Model model ) + { + try + { + List<Plugin> modelPlugins = model.getBuild().getPluginManagement().getPlugins(); + plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), + model.getId() + ".build.pluginManagement.plugins" ) ); + } + catch ( NullPointerException e ) + { + // guess there are no plugins here. + } + } + + private void getReportingPlugins( List<PluginWrapper> plugins, Model model ) + { + try + { + List<ReportPlugin> modelReportPlugins = model.getReporting().getPlugins(); + // add the reporting plugins + plugins.addAll( PluginWrapper.addAll( utils.resolveReportPlugins( modelReportPlugins ), + model.getId() + ".reporting" ) ); + } + catch ( NullPointerException e ) + { + // guess there are no plugins here. + } } /** diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java index 5b9c157..64290af 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java @@ -1,8 +1,5 @@ package org.apache.maven.plugins.enforcer; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -31,7 +28,6 @@ import java.util.Set; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.model.Plugin; import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.logging.Log; import org.apache.maven.plugin.testing.AbstractMojoTestCase; import org.apache.maven.plugins.enforcer.utils.PluginWrapper; @@ -86,8 +82,6 @@ public class TestRequirePluginVersions EnforcerRuleHelper helper = EnforcerTestUtils.getHelper(); - Log log = mock( Log.class ); - when( helper.getLog() ).thenReturn( log ); assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) ); @@ -151,8 +145,6 @@ public class TestRequirePluginVersions rule.setBanSnapshots( false ); EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( true ); - Log log = mock( Log.class ); - when( helper.getLog() ).thenReturn( log ); source.setArtifactId( "a-artifact" ); assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) ); diff --git a/maven-enforcer-plugin/src/it/projects/MENFORCER-306/parent/pom.xml b/maven-enforcer-plugin/src/it/projects/MENFORCER-306/parent/pom.xml new file mode 100644 index 0000000..d66827e --- /dev/null +++ b/maven-enforcer-plugin/src/it/projects/MENFORCER-306/parent/pom.xml @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>mbenson.test</groupId> + <artifactId>test-require-plugin-versions</artifactId> + <version>0.0.1-SNAPSHOT</version> + <packaging>pom</packaging> + <properties> + <enforcer.version>3.0.0-SNAPSHOT</enforcer.version> + </properties> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-enforcer-plugin</artifactId> + <version>@project.version@</version> + <executions> + <execution> + <id>enforce-plugin-versions</id> + <goals> + <goal>enforce</goal> + </goals> + <configuration> + <rules> + <requirePluginVersions> + <banSnapshots>false</banSnapshots> + </requirePluginVersions> + </rules> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + <pluginManagement> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-clean-plugin</artifactId> + <version>3.1.0</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-install-plugin</artifactId> + <version>2.5.2</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-site-plugin</artifactId> + <version>3.7.1</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-deploy-plugin</artifactId> + <version>2.8.2</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.7.0</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-plugin-plugin</artifactId> + <version>3.5.2</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.21.0</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <version>3.1.0</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <version>3.1.0</version> + </plugin> + </plugins> + </pluginManagement> + </build> +</project> diff --git a/maven-enforcer-plugin/src/it/projects/MENFORCER-306/pom.xml b/maven-enforcer-plugin/src/it/projects/MENFORCER-306/pom.xml new file mode 100644 index 0000000..9ad1574 --- /dev/null +++ b/maven-enforcer-plugin/src/it/projects/MENFORCER-306/pom.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>mbenson.test</groupId> + <artifactId>test-require-plugin-versions</artifactId> + <version>0.0.1-SNAPSHOT</version> + <relativePath>parent/pom.xml</relativePath> + </parent> + <artifactId>pom</artifactId> + <packaging>pom</packaging> +</project>
