From 7a5d4a02f9d0ae720c61a34c89d4824d6d08b8aa Mon Sep 17 00:00:00 2001 From: Richard Atkins Date: Thu, 7 Mar 2019 23:52:04 +1100 Subject: [PATCH 1/3] [MENFORCER-332] Upgrade to maven 3.5.x, Java 7 * Also upgrade to maven-dependency-tree 3.0.1, maven-plugin-testing-harness 3.3.0, commons-lang3 3.8.1, junit 4.12 * Upgraded maven-dependency-tree is a breaking change for uses of AbstractBanDependencies.getDependenciesToCheck, requiring a signature change from Project to ProjectBuildingRequest * Also removed all the default scoped fields from EnforcerRuleUtils that are not in use, and cleaned up the corresponding constructor * Also removed maven-compat, and updated affected code to use RepositorySystem and RepositoryRequest instead of ArtifactResolver, ArtifactFactory and manually tracking the local and remote ArtifactRepository entries. --- enforcer-rules/pom.xml | 12 +-- .../enforcer/AbstractBanDependencies.java | 35 ++++--- .../enforcer/BanTransitiveDependencies.java | 8 +- .../maven/plugins/enforcer/BannedPlugins.java | 94 +++++++++---------- .../enforcer/DependencyConvergence.java | 34 +++---- .../enforcer/RequirePluginVersions.java | 71 ++++++-------- .../enforcer/RequireUpperBoundDeps.java | 35 +++---- .../enforcer/utils/DependencyVersionMap.java | 4 +- .../enforcer/utils/EnforcerRuleUtils.java | 68 -------------- .../enforcer/BannedDependenciesTestSetup.java | 4 +- .../plugins/enforcer/EnforcerTestUtils.java | 20 +++- .../plugins/enforcer/MockPlexusContainer.java | 3 +- .../enforcer/MockRuntimeInformation.java | 58 +++++++++--- .../enforcer/TestBannedRepositories.java | 27 +++--- .../enforcer/TestRequirePluginVersions.java | 5 +- .../enforcer/TestRequireReleaseDeps.java | 6 +- .../plugins/enforcer/TestEnforceMojo.java | 9 +- pom.xml | 19 ++-- 18 files changed, 238 insertions(+), 274 deletions(-) diff --git a/enforcer-rules/pom.xml b/enforcer-rules/pom.xml index abfd1466..0a2e54dc 100644 --- a/enforcer-rules/pom.xml +++ b/enforcer-rules/pom.xml @@ -49,6 +49,10 @@ org.apache.maven.shared maven-common-artifact-filters + + org.apache.maven.shared + maven-dependency-tree + org.codehaus.plexus plexus-utils @@ -85,14 +89,6 @@ mockito-core test - - org.apache.maven.shared - maven-dependency-tree - - - org.apache.maven - maven-compat - org.assertj assertj-core diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java index 5bdbaf02..c7fa0f97 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java @@ -22,8 +22,11 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; +import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.logging.Log; +import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; import org.apache.maven.shared.dependency.graph.DependencyNode; @@ -64,25 +67,27 @@ public void execute( EnforcerRuleHelper helper ) try { - graphBuilder = (DependencyGraphBuilder) helper.getComponent( DependencyGraphBuilder.class ); + graphBuilder = helper.getComponent( DependencyGraphBuilder.class ); } catch ( ComponentLookupException e ) { - // real cause is probably that one of the Maven3 graph builder could not be initiated and fails with a - // ClassNotFoundException - try - { - graphBuilder = - (DependencyGraphBuilder) helper.getComponent( DependencyGraphBuilder.class.getName(), "maven2" ); - } - catch ( ComponentLookupException e1 ) - { - throw new EnforcerRuleException( "Unable to lookup DependencyGraphBuilder: ", e ); - } + throw new EnforcerRuleException( "Unable to lookup DependencyGraphBuilder: ", e ); } + ProjectBuildingRequest sessionRequest; + try + { + MavenSession session = helper.getComponent( MavenSession.class ); + sessionRequest = session.getProjectBuildingRequest(); + } + catch ( ComponentLookupException e ) + { + throw new EnforcerRuleException( "Unable to lookup existing ProjectBuildingRequest: ", e ); + } + ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest( sessionRequest ); + buildingRequest.setProject( project ); // get the correct list of dependencies - Set dependencies = getDependenciesToCheck( project ); + Set dependencies = getDependenciesToCheck( buildingRequest ); // look for banned dependencies Set foundExcludes = checkDependencies( dependencies, helper.getLog() ); @@ -113,12 +118,12 @@ protected CharSequence getErrorMessage( Artifact artifact ) return "Found Banned Dependency: " + artifact.getId() + System.lineSeparator(); } - protected Set getDependenciesToCheck( MavenProject project ) + protected Set getDependenciesToCheck( ProjectBuildingRequest buildingRequest ) { Set dependencies = null; try { - DependencyNode node = graphBuilder.buildDependencyGraph( project, null ); + DependencyNode node = graphBuilder.buildDependencyGraph( buildingRequest, null ); if ( searchTransitive ) { dependencies = getAllDescendants( node ); diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java index 6e1dcd40..fd543112 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java @@ -27,7 +27,9 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugins.enforcer.utils.ArtifactMatcher; +import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; import org.apache.maven.shared.dependency.graph.DependencyNode; import org.apache.maven.shared.dependency.graph.internal.DefaultDependencyGraphBuilder; @@ -158,7 +160,11 @@ public void execute( EnforcerRuleHelper helper ) try { MavenProject project = (MavenProject) helper.evaluate( "${project}" ); - rootNode = createDependencyGraphBuilder().buildDependencyGraph( project, null ); + ProjectBuildingRequest sessionRequest = + (ProjectBuildingRequest) helper.evaluate( "${session.projectBuildingRequest}" ); + ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest( sessionRequest ); + buildingRequest.setProject( project ); + rootNode = createDependencyGraphBuilder().buildDependencyGraph( buildingRequest, null ); } catch ( Exception e ) { diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java index 03201fdc..e981f0ae 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java @@ -1,47 +1,47 @@ -package org.apache.maven.plugins.enforcer; - -/* - * 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. - */ - -import java.util.Set; - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.project.MavenProject; - -/** - * This rule checks that lists of plugins are not included. - * - * @author Marvin Froeder - */ -public class BannedPlugins - extends BannedDependencies -{ - @Override - protected Set getDependenciesToCheck( MavenProject project ) - { - return project.getPluginArtifacts(); - } - - @Override - protected CharSequence getErrorMessage( Artifact artifact ) - { - return "Found Banned Plugin: " + artifact.getId() + System.lineSeparator(); - } - -} +package org.apache.maven.plugins.enforcer; + +/* + * 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. + */ + +import java.util.Set; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.project.ProjectBuildingRequest; + +/** + * This rule checks that lists of plugins are not included. + * + * @author Marvin Froeder + */ +public class BannedPlugins + extends BannedDependencies +{ + @Override + protected Set getDependenciesToCheck( ProjectBuildingRequest buildingRequest ) + { + return buildingRequest.getProject().getPluginArtifacts(); + } + + @Override + protected CharSequence getErrorMessage( Artifact artifact ) + { + return "Found Banned Plugin: " + artifact.getId() + System.lineSeparator(); + } + +} diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java index 684f9842..2f41c0b4 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java @@ -24,20 +24,18 @@ import java.util.List; import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.metadata.ArtifactMetadataSource; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactCollector; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.enforcer.rule.api.EnforcerRule; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugin.logging.Log; import org.apache.maven.plugins.enforcer.utils.DependencyVersionMap; +import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.MavenProject; -import org.apache.maven.shared.dependency.tree.DependencyNode; -import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; -import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; +import org.apache.maven.project.ProjectBuildingRequest; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; +import org.apache.maven.shared.dependency.graph.DependencyNode; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; @@ -57,10 +55,9 @@ public void setUniqueVersions( boolean uniqueVersions ) this.uniqueVersions = uniqueVersions; } - // CHECKSTYLE_OFF: LineLength /** * Uses the {@link EnforcerRuleHelper} to populate the values of the - * {@link DependencyTreeBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)} + * {@link DependencyGraphBuilder#buildDependencyGraph(ProjectBuildingRequest, ArtifactFilter)} * factory method.
* This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do. * @@ -68,23 +65,20 @@ public void setUniqueVersions( boolean uniqueVersions ) * @return a Dependency Node which is the root of the project's dependency tree * @throws EnforcerRuleException */ - // CHECKSTYLE_ON: LineLength private DependencyNode getNode( EnforcerRuleHelper helper ) throws EnforcerRuleException { try { MavenProject project = (MavenProject) helper.evaluate( "${project}" ); - DependencyTreeBuilder dependencyTreeBuilder = - (DependencyTreeBuilder) helper.getComponent( DependencyTreeBuilder.class ); - ArtifactRepository repository = (ArtifactRepository) helper.evaluate( "${localRepository}" ); - ArtifactFactory factory = (ArtifactFactory) helper.getComponent( ArtifactFactory.class ); - ArtifactMetadataSource metadataSource = - (ArtifactMetadataSource) helper.getComponent( ArtifactMetadataSource.class ); - ArtifactCollector collector = (ArtifactCollector) helper.getComponent( ArtifactCollector.class ); + ProjectBuildingRequest sessionRequest = + (ProjectBuildingRequest) helper.evaluate( "${session.projectBuildingRequest}" ); + ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest( sessionRequest ); + buildingRequest.setProject( project ); + DependencyGraphBuilder dependencyGraphBuilder = + helper.getComponent( DependencyGraphBuilder.class ); ArtifactFilter filter = null; // we need to evaluate all scopes - DependencyNode node = dependencyTreeBuilder.buildDependencyTree( project, repository, factory, - metadataSource, filter, collector ); + DependencyNode node = dependencyGraphBuilder.buildDependencyGraph( buildingRequest, filter ); return node; } catch ( ExpressionEvaluationException e ) @@ -95,7 +89,7 @@ private DependencyNode getNode( EnforcerRuleHelper helper ) { throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e ); } - catch ( DependencyTreeBuilderException e ) + catch ( DependencyGraphBuilderException e ) { throw new EnforcerRuleException( "Could not build dependency tree " + e.getLocalizedMessage(), e ); } 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 34f0f20a..98957028 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 @@ -32,13 +32,14 @@ import org.apache.maven.BuildFailureException; import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.repository.DefaultRepositoryRequest; +import org.apache.maven.artifact.repository.RepositoryRequest; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.resolver.ArtifactResolver; +import org.apache.maven.artifact.resolver.ArtifactResolutionRequest; +import org.apache.maven.artifact.resolver.ArtifactResolutionResult; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; -import org.apache.maven.artifact.versioning.VersionRange; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.execution.MavenSession; @@ -63,6 +64,7 @@ import org.apache.maven.plugins.enforcer.utils.EnforcerRuleUtils; import org.apache.maven.plugins.enforcer.utils.PluginWrapper; import org.apache.maven.project.MavenProject; +import org.apache.maven.repository.RepositorySystem; import org.apache.maven.settings.Settings; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; @@ -160,17 +162,11 @@ public class RequirePluginVersions /** The lifecycles. */ private Collection lifecycles; - /** The factory. */ - private ArtifactFactory factory; + /** The repository system. */ + private RepositorySystem repositorySystem; - /** The resolver. */ - private ArtifactResolver resolver; - - /** The local. */ - private ArtifactRepository local; - - /** The remote repositories. */ - private List remoteRepositories; + /** The repository request, pre-configured with the local and remote repositories. */ + private RepositoryRequest repositoryRequest; /** The log. */ private Log log; @@ -195,18 +191,16 @@ public void execute( EnforcerRuleHelper helper ) project = (MavenProject) helper.evaluate( "${project}" ); LifecycleExecutor life; - life = (LifecycleExecutor) helper.getComponent( LifecycleExecutor.class ); + life = helper.getComponent( LifecycleExecutor.class ); Object defaultLifeCycles = ReflectionUtils.getValueIncludingSuperclasses( "defaultLifeCycles", life ); Map lifecyclesMap = (Map) ReflectionUtils.getValueIncludingSuperclasses( "lifecycles", defaultLifeCycles ); lifecycles = lifecyclesMap.values(); session = (MavenSession) helper.evaluate( "${session}" ); - pluginManager = (PluginManager) helper.getComponent( PluginManager.class ); - factory = (ArtifactFactory) helper.getComponent( ArtifactFactory.class ); - resolver = (ArtifactResolver) helper.getComponent( ArtifactResolver.class ); - local = (ArtifactRepository) helper.evaluate( "${localRepository}" ); - remoteRepositories = project.getRemoteArtifactRepositories(); + pluginManager = helper.getComponent( PluginManager.class ); + repositorySystem = helper.getComponent( RepositorySystem.class ); + repositoryRequest = DefaultRepositoryRequest.getRepositoryRequest( session, project ); utils = new EnforcerRuleUtils( helper ); @@ -440,7 +434,7 @@ public Set addAdditionalPlugins( Set existing, List addi existing = new HashSet(); existing.add( plugin ); } - else if ( !existing.contains( plugin ) ) + else { existing.add( plugin ); } @@ -549,24 +543,15 @@ protected Plugin findCurrentPlugin( Plugin plugin, MavenProject project ) */ protected Plugin resolvePlugin( Plugin plugin, MavenProject project ) { + Plugin pluginRequest = plugin.clone(); + pluginRequest.setVersion( "LATEST" ); + Artifact artifact = repositorySystem.createPluginArtifact( pluginRequest ); - List pluginRepositories = project.getPluginArtifactRepositories(); - Artifact artifact = factory.createPluginArtifact( plugin.getGroupId(), plugin.getArtifactId(), - VersionRange.createFromVersion( "LATEST" ) ); + ArtifactResolutionRequest resolutionRequest = new ArtifactResolutionRequest( repositoryRequest ); + resolutionRequest.setArtifact( artifact ); - try - { - this.resolver.resolve( artifact, pluginRepositories, this.local ); - plugin.setVersion( artifact.getVersion() ); - } - catch ( ArtifactResolutionException e ) - { - // What does this mean? - } - catch ( ArtifactNotFoundException e ) - { - // What does this mean? - } + ArtifactResolutionResult result = this.repositorySystem.resolve( resolutionRequest ); + plugin.setVersion( result.getArtifacts().iterator().next().getVersion() ); return plugin; } @@ -738,16 +723,16 @@ private Set getAllPlugins( MavenProject project, Lifecycle lifecycle ) for ( Map.Entry entry : mappings.entrySet() ) { log.debug( " lifecycleMapping = " + entry.getKey() ); - String pluginsForLifecycle = (String) entry.getValue(); + String pluginsForLifecycle = entry.getValue(); log.debug( " plugins = " + pluginsForLifecycle ); if ( StringUtils.isNotEmpty( pluginsForLifecycle ) ) { - String pluginList[] = pluginsForLifecycle.split( "," ); + String[] pluginList = pluginsForLifecycle.split( "," ); for ( String plugin : pluginList ) { plugin = StringUtils.strip( plugin ); log.debug( " plugin = " + plugin ); - String tokens[] = plugin.split( ":" ); + String[] tokens = plugin.split( ":" ); log.debug( " GAV = " + Arrays.asList( tokens ) ); Plugin p = new Plugin(); @@ -761,7 +746,7 @@ private Set getAllPlugins( MavenProject project, Lifecycle lifecycle ) List mojos = findOptionalMojosForLifecycle( project, lifecycle ); for ( String value : mojos ) { - String tokens[] = value.split( ":" ); + String[] tokens = value.split( ":" ); Plugin plugin = new Plugin(); plugin.setGroupId( tokens[0] ); @@ -799,7 +784,7 @@ public Map getPhaseToLifecycleMap() log.debug( "getPhaseToLifecycleMap(): phase: " + phase ); if ( phaseToLifecycleMap.containsKey( phase ) ) { - Lifecycle prevLifecycle = (Lifecycle) phaseToLifecycleMap.get( phase ); + Lifecycle prevLifecycle = phaseToLifecycleMap.get( phase ); throw new LifecycleExecutionException( "Phase '" + phase + "' is defined in more than one lifecycle: '" + lifecycle.getId() + "' and '" + prevLifecycle.getId() + "'" ); @@ -825,7 +810,7 @@ public Map getPhaseToLifecycleMap() private Lifecycle getLifecycleForPhase( String phase ) throws BuildFailureException, LifecycleExecutionException { - Lifecycle lifecycle = (Lifecycle) getPhaseToLifecycleMap().get( phase ); + Lifecycle lifecycle = getPhaseToLifecycleMap().get( phase ); if ( lifecycle == null ) { @@ -918,7 +903,7 @@ private List findOptionalMojosForLifecycle( MavenProject project, Lifecy { try { - m = (LifecycleMapping) helper.getComponent( LifecycleMapping.class, packaging ); + m = helper.getComponent( LifecycleMapping.class, packaging ); optionalMojos = m.getOptionalMojos( lifecycle.getId() ); } catch ( ComponentLookupException e ) diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java index 458554ac..ec468381 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java @@ -26,10 +26,6 @@ import java.util.Map; import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.metadata.ArtifactMetadataSource; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactCollector; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.artifact.versioning.ArtifactVersion; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; @@ -37,11 +33,13 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugin.logging.Log; +import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.MavenProject; -import org.apache.maven.shared.dependency.tree.DependencyNode; -import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; -import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; -import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor; +import org.apache.maven.project.ProjectBuildingRequest; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; +import org.apache.maven.shared.dependency.graph.DependencyNode; +import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; @@ -91,7 +89,7 @@ public void setExcludes( List excludes ) // CHECKSTYLE_OFF: LineLength /** * Uses the {@link EnforcerRuleHelper} to populate the values of the - * {@link DependencyTreeBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)} + * {@link DependencyGraphBuilder#buildDependencyGraph(ProjectBuildingRequest, ArtifactFilter)} * factory method.
* This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do. * @@ -105,18 +103,15 @@ private DependencyNode getNode( EnforcerRuleHelper helper ) { try { + + ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(); MavenProject project = (MavenProject) helper.evaluate( "${project}" ); - DependencyTreeBuilder dependencyTreeBuilder = - (DependencyTreeBuilder) helper.getComponent( DependencyTreeBuilder.class ); - ArtifactRepository repository = (ArtifactRepository) helper.evaluate( "${localRepository}" ); - ArtifactFactory factory = (ArtifactFactory) helper.getComponent( ArtifactFactory.class ); - ArtifactMetadataSource metadataSource = - (ArtifactMetadataSource) helper.getComponent( ArtifactMetadataSource.class ); - ArtifactCollector collector = (ArtifactCollector) helper.getComponent( ArtifactCollector.class ); + buildingRequest.setProject( project ); + DependencyGraphBuilder dependencyGraphBuilder = + helper.getComponent( DependencyGraphBuilder.class ); ArtifactFilter filter = null; // we need to evaluate all scopes DependencyNode node = - dependencyTreeBuilder.buildDependencyTree( project, repository, factory, metadataSource, filter, - collector ); + dependencyGraphBuilder.buildDependencyGraph( buildingRequest, filter ); return node; } catch ( ExpressionEvaluationException e ) @@ -127,9 +122,9 @@ private DependencyNode getNode( EnforcerRuleHelper helper ) { throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e ); } - catch ( DependencyTreeBuilderException e ) + catch ( DependencyGraphBuilderException e ) { - throw new EnforcerRuleException( "Could not build dependency tree " + e.getLocalizedMessage(), e ); + throw new EnforcerRuleException( "Could not build dependency graph " + e.getLocalizedMessage(), e ); } } diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java index b6213faa..ec78fc70 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java @@ -26,8 +26,8 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.logging.Log; -import org.apache.maven.shared.dependency.tree.DependencyNode; -import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor; +import org.apache.maven.shared.dependency.graph.DependencyNode; +import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor; /** * @author Brian Fox diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/EnforcerRuleUtils.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/EnforcerRuleUtils.java index c122e10b..e987ffee 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/EnforcerRuleUtils.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/EnforcerRuleUtils.java @@ -21,16 +21,10 @@ import java.util.List; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.model.Plugin; import org.apache.maven.model.ReportPlugin; -import org.apache.maven.plugin.logging.Log; -import org.apache.maven.project.MavenProject; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; /** * The Class EnforcerRuleUtils. @@ -39,49 +33,8 @@ */ public class EnforcerRuleUtils { - - /** The factory. */ - ArtifactFactory factory; - - /** The resolver. */ - ArtifactResolver resolver; - - /** The local. */ - ArtifactRepository local; - - /** The remote repositories. */ - List remoteRepositories; - - /** The log. */ - Log log; - - /** The project. */ - MavenProject project; - private EnforcerRuleHelper helper; - /** - * Instantiates a new enforcer rule utils. - * - * @param theFactory the the factory - * @param theResolver the the resolver - * @param theLocal the the local - * @param theRemoteRepositories the the remote repositories - * @param project the project - * @param theLog the the log - */ - public EnforcerRuleUtils( ArtifactFactory theFactory, ArtifactResolver theResolver, ArtifactRepository theLocal, - List theRemoteRepositories, MavenProject project, Log theLog ) - { - super(); - this.factory = theFactory; - this.resolver = theResolver; - this.local = theLocal; - this.remoteRepositories = theRemoteRepositories; - this.log = theLog; - this.project = project; - } - /** * Instantiates a new enforcer rule utils. * @@ -89,28 +42,7 @@ public EnforcerRuleUtils( ArtifactFactory theFactory, ArtifactResolver theResolv */ public EnforcerRuleUtils( EnforcerRuleHelper helper ) { - this.helper = helper; - // get the various expressions out of the - // helper. - try - { - factory = (ArtifactFactory) helper.getComponent( ArtifactFactory.class ); - resolver = (ArtifactResolver) helper.getComponent( ArtifactResolver.class ); - local = (ArtifactRepository) helper.evaluate( "${localRepository}" ); - project = (MavenProject) helper.evaluate( "${project}" ); - remoteRepositories = project.getRemoteArtifactRepositories(); - } - catch ( ComponentLookupException e ) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } - catch ( ExpressionEvaluationException e ) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } } private void resolve( Plugin plugin ) diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/BannedDependenciesTestSetup.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/BannedDependenciesTestSetup.java index 1d36ef76..08409a62 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/BannedDependenciesTestSetup.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/BannedDependenciesTestSetup.java @@ -29,6 +29,7 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugin.testing.ArtifactStubFactory; import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuildingRequest; public class BannedDependenciesTestSetup { @@ -94,10 +95,11 @@ private BannedDependencies newBannedDependenciesRule() { @SuppressWarnings( "unchecked" ) @Override - protected Set getDependenciesToCheck( MavenProject project ) + protected Set getDependenciesToCheck( ProjectBuildingRequest buildingRequest ) { // the integration with dependencyGraphTree is verified with the integration tests // for unit-testing + MavenProject project = buildingRequest.getProject(); return isSearchTransitive() ? project.getArtifacts() : project.getDependencyArtifacts(); } }; diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java index 29014a54..b7aa815d 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java @@ -19,6 +19,7 @@ * under the License. */ +import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -34,9 +35,11 @@ import org.apache.maven.plugin.logging.SystemStreamLog; import org.apache.maven.plugins.enforcer.utils.MockEnforcerExpressionEvaluator; import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuildingRequest; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator; -import org.sonatype.aether.RepositorySystemSession; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; +import org.eclipse.aether.RepositorySystemSession; /** * The Class EnforcerTestUtils. @@ -52,9 +55,12 @@ public final class EnforcerTestUtils */ public static MavenSession getMavenSession() { - PlexusContainer mock = mock( PlexusContainer.class ); + PlexusContainer container = mock( PlexusContainer.class ); MavenExecutionRequest mer = mock( MavenExecutionRequest.class ); + ProjectBuildingRequest pbr = mock( ProjectBuildingRequest.class ); + when( pbr.setRepositorySession( nullable( RepositorySystemSession.class ) ) ).thenReturn( pbr ); + when( mer.getProjectBuildingRequest() ).thenReturn( pbr ); Properties systemProperties = new Properties(); systemProperties.put( "maven.version", "3.0" ); @@ -62,7 +68,15 @@ public static MavenSession getMavenSession() when( mer.getSystemProperties() ).thenReturn( systemProperties ); MavenExecutionResult meresult = mock( MavenExecutionResult.class ); - return new MavenSession( mock, (RepositorySystemSession) null, mer, meresult ); + MavenSession session = new MavenSession( container, null, mer, meresult ); + try + { + when( container.lookup( MavenSession.class ) ).thenReturn( session ); + } + catch (ComponentLookupException ignored) + { + } + return session; } /** diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockPlexusContainer.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockPlexusContainer.java index a73cbbdc..b54af0b7 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockPlexusContainer.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockPlexusContainer.java @@ -25,8 +25,8 @@ import java.util.List; import java.util.Map; -import org.apache.maven.execution.RuntimeInformation; import org.apache.maven.project.MavenProject; +import org.apache.maven.rtinfo.RuntimeInformation; import org.codehaus.classworlds.ClassRealm; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.PlexusContainerException; @@ -36,7 +36,6 @@ import org.codehaus.plexus.component.repository.ComponentDescriptor; import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; -import org.codehaus.plexus.component.repository.exception.ComponentRepositoryException; import org.codehaus.plexus.configuration.PlexusConfigurationException; import org.codehaus.plexus.configuration.PlexusConfigurationResourceException; import org.codehaus.plexus.context.Context; diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockRuntimeInformation.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockRuntimeInformation.java index b62dec51..ca052581 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockRuntimeInformation.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockRuntimeInformation.java @@ -19,9 +19,14 @@ * under the License. */ -import org.apache.maven.artifact.versioning.ArtifactVersion; -import org.apache.maven.artifact.versioning.DefaultArtifactVersion; -import org.apache.maven.execution.RuntimeInformation; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.maven.rtinfo.RuntimeInformation; +import org.eclipse.aether.util.version.GenericVersionScheme; +import org.eclipse.aether.version.InvalidVersionSpecificationException; +import org.eclipse.aether.version.Version; +import org.eclipse.aether.version.VersionConstraint; +import org.eclipse.aether.version.VersionScheme; /** * Just a mock object hard coded to return version 2.0.5 @@ -31,15 +36,44 @@ public class MockRuntimeInformation implements RuntimeInformation { - - /* - * (non-Javadoc) - * - * @see org.apache.maven.execution.RuntimeInformation#getApplicationVersion() - */ - public ArtifactVersion getApplicationVersion() - { - return new DefaultArtifactVersion( "2.0.5" ); + @Override + public String getMavenVersion() { + return "2.0.5"; } + @Override + public boolean isMavenVersion(String versionRange) { + VersionScheme versionScheme = new GenericVersionScheme(); + + Validate.notBlank( versionRange, "versionRange can neither be null, empty nor blank" ); + + VersionConstraint constraint; + try + { + constraint = versionScheme.parseVersionConstraint( versionRange ); + } + catch ( InvalidVersionSpecificationException e ) + { + throw new IllegalArgumentException( e.getMessage(), e ); + } + + Version current; + try + { + String mavenVersion = getMavenVersion(); + Validate.validState( StringUtils.isNotEmpty( mavenVersion ), "Could not determine current Maven version" ); + + current = versionScheme.parseVersion( mavenVersion ); + } + catch ( InvalidVersionSpecificationException e ) + { + throw new IllegalStateException( "Could not parse current Maven version: " + e.getMessage(), e ); + } + + if ( constraint.getRange() == null ) + { + return constraint.getVersion().compareTo( current ) <= 0; + } + return constraint.containsVersion( current ); + } } diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestBannedRepositories.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestBannedRepositories.java index e27ee867..db615d5f 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestBannedRepositories.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestBannedRepositories.java @@ -23,7 +23,8 @@ import java.util.List; import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.DefaultArtifactRepository; +import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; +import org.apache.maven.bridge.MavenRepositorySystem; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.codehaus.plexus.PlexusTestCase; @@ -36,6 +37,7 @@ public class TestBannedRepositories extends PlexusTestCase { + private DefaultRepositoryLayout defaultRepositoryLayout = new DefaultRepositoryLayout(); private EnforcerRuleHelper helper; private BannedRepositories rule; @@ -58,9 +60,9 @@ public void setUp() } public void testNoCheckRules() - throws EnforcerRuleException + throws Exception { - DefaultArtifactRepository repo1 = new DefaultArtifactRepository( "repo1", "http://repo1/", null ); + ArtifactRepository repo1 = MavenRepositorySystem.createArtifactRepository( "repo1", "http://repo1/", defaultRepositoryLayout , null, null); List repos = new ArrayList(); repos.add( repo1 ); @@ -70,11 +72,10 @@ public void testNoCheckRules() rule.execute( helper ); } - public void testBannedRepositories() - { - DefaultArtifactRepository repo1 = new DefaultArtifactRepository( "repo1", "http://repo1/", null ); - DefaultArtifactRepository repo2 = new DefaultArtifactRepository( "repo1", "http://repo1/test", null ); - DefaultArtifactRepository repo3 = new DefaultArtifactRepository( "repo1", "http://repo2/test", null ); + public void testBannedRepositories() { + ArtifactRepository repo1 = MavenRepositorySystem.createArtifactRepository( "repo1", "http://repo1/", defaultRepositoryLayout, null, null ); + ArtifactRepository repo2 = MavenRepositorySystem.createArtifactRepository( "repo1", "http://repo1/test", defaultRepositoryLayout, null, null ); + ArtifactRepository repo3 = MavenRepositorySystem.createArtifactRepository( "repo2", "http://repo2/test", defaultRepositoryLayout, null, null ); List repos = new ArrayList(); repos.add( repo1 ); repos.add( repo2 ); @@ -104,8 +105,8 @@ public void testBannedRepositories() public void testAllowedRepositoriesAllOK() throws EnforcerRuleException { - DefaultArtifactRepository repo1 = new DefaultArtifactRepository( "repo1", "http://repo1/", null ); - DefaultArtifactRepository repo2 = new DefaultArtifactRepository( "repo1", "http://repo1/test", null ); + ArtifactRepository repo1 = MavenRepositorySystem.createArtifactRepository( "repo1", "http://repo1/", defaultRepositoryLayout, null, null ); + ArtifactRepository repo2 = MavenRepositorySystem.createArtifactRepository( "repo1", "http://repo1/test", defaultRepositoryLayout, null, null ); List repos = new ArrayList(); repos.add( repo1 ); @@ -127,9 +128,9 @@ public void testAllowedRepositoriesAllOK() public void testAllowedRepositoriesException() { - DefaultArtifactRepository repo1 = new DefaultArtifactRepository( "repo1", "http://repo1/", null ); - DefaultArtifactRepository repo2 = new DefaultArtifactRepository( "repo1", "http://repo1/test", null ); - DefaultArtifactRepository repo3 = new DefaultArtifactRepository( "repo1", "http://repo2/test", null ); + ArtifactRepository repo1 = MavenRepositorySystem.createArtifactRepository( "repo1", "http://repo1/", defaultRepositoryLayout, null, null ); + ArtifactRepository repo2 = MavenRepositorySystem.createArtifactRepository( "repo1", "http://repo1/test", defaultRepositoryLayout, null, null ); + ArtifactRepository repo3 = MavenRepositorySystem.createArtifactRepository( "repo2", "http://repo2/test", defaultRepositoryLayout, null, null ); List repos = new ArrayList(); repos.add( repo1 ); repos.add( repo2 ); 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 64290afc..90a438e8 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 @@ -25,10 +25,11 @@ import java.util.List; import java.util.Set; +import junit.framework.TestCase; + 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.testing.AbstractMojoTestCase; import org.apache.maven.plugins.enforcer.utils.PluginWrapper; /** @@ -37,7 +38,7 @@ * @author Brian Fox */ public class TestRequirePluginVersions - extends AbstractMojoTestCase + extends TestCase { /** diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java index 858e60f3..b62189c7 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java @@ -29,6 +29,7 @@ import org.apache.maven.plugin.testing.ArtifactStubFactory; import org.apache.maven.plugins.enforcer.utils.EnforcerRuleUtilsHelper; import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuildingRequest; /** * The Class TestNoSnapshots. @@ -96,10 +97,11 @@ private RequireReleaseDeps newRequireReleaseDeps() { RequireReleaseDeps rule = new RequireReleaseDeps() { - protected Set getDependenciesToCheck( MavenProject project ) + protected Set getDependenciesToCheck( ProjectBuildingRequest buildingRequest ) { // the integration with dependencyGraphTree is verified with the integration tests - // for unit-testing + // for unit-testing + MavenProject project = buildingRequest.getProject(); return isSearchTransitive() ? project.getArtifacts() : project.getDependencyArtifacts(); } }; diff --git a/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java b/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java index c7677d35..36d077e7 100644 --- a/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java +++ b/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java @@ -28,20 +28,23 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.logging.Log; +import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.mockito.quality.Strictness; /** * Exhaustively check the enforcer mojo. * * @author Brian Fox */ -@RunWith( MockitoJUnitRunner.class ) public class TestEnforceMojo { + @Rule + public MockitoRule mockitoRule = MockitoJUnit.rule().strictness( Strictness.LENIENT ); @InjectMocks EnforceMojo mojo; diff --git a/pom.xml b/pom.xml index 12a8068d..4dd8833c 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,8 @@ - 3.0 + 7 + 3.5.4 enforcer-archives/enforcer-LATEST 7 @@ -102,12 +103,6 @@ maven-core ${maven.version}
- - org.apache.maven - maven-compat - ${maven.version} - - org.apache.maven.shared maven-common-artifact-filters @@ -121,7 +116,7 @@ junit junit - 4.11 + 4.12 org.mockito @@ -132,7 +127,7 @@ org.apache.commons commons-lang3 - 3.5 + 3.8.1 commons-codec @@ -142,13 +137,13 @@ org.apache.maven.plugin-testing maven-plugin-testing-harness - 2.1 + 3.3.0 test org.apache.maven.shared maven-dependency-tree - 2.2 + 3.0.1 org.assertj @@ -192,7 +187,7 @@ org.codehaus.mojo extra-enforcer-rules - 1.0-beta-7 + 1.0-beta-9 From c13c0a2c1b4efccb0e3362e281dd813166f81e60 Mon Sep 17 00:00:00 2001 From: Richard Atkins Date: Thu, 28 Mar 2019 18:20:46 +1100 Subject: [PATCH 2/3] [MENFORCER-332] Add cache around DependencyGraphBuilder * Make all rules that use DependencyGraphBuilder use a common component * Use sisu-maven-plugin to allow the new common component to use annotations. Keeping the rules using explicit component lookups for now * Make the common DependencyGraphLookup component cache lookups for a dependency tree per MavenProject, so that even highly parallel builds can also avoid retrieving the dependency tree more than once per project --- enforcer-rules/pom.xml | 4 + .../enforcer/AbstractBanDependencies.java | 54 +++----- .../enforcer/BanTransitiveDependencies.java | 40 ++---- .../maven/plugins/enforcer/BannedPlugins.java | 17 ++- .../enforcer/DependencyConvergence.java | 58 ++------ .../enforcer/RequireUpperBoundDeps.java | 60 ++------- .../enforcer/utils/DependencyGraphLookup.java | 124 ++++++++++++++++++ .../enforcer/BannedDependenciesTestSetup.java | 16 ++- .../enforcer/TestBannedDependencies.java | 2 +- .../enforcer/TestRequireReleaseDeps.java | 16 ++- maven-enforcer-plugin/pom.xml | 16 +++ pom.xml | 18 ++- 12 files changed, 241 insertions(+), 184 deletions(-) create mode 100644 enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyGraphLookup.java diff --git a/enforcer-rules/pom.xml b/enforcer-rules/pom.xml index 0a2e54dc..c340cea6 100644 --- a/enforcer-rules/pom.xml +++ b/enforcer-rules/pom.xml @@ -110,6 +110,10 @@ + + org.eclipse.sisu + sisu-maven-plugin + diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java index c7fa0f97..a20b29b0 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java @@ -22,13 +22,9 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; -import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.logging.Log; -import org.apache.maven.project.DefaultProjectBuildingRequest; +import org.apache.maven.plugins.enforcer.utils.DependencyGraphLookup; import org.apache.maven.project.MavenProject; -import org.apache.maven.project.ProjectBuildingRequest; -import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; -import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; import org.apache.maven.shared.dependency.graph.DependencyNode; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; @@ -47,7 +43,7 @@ public abstract class AbstractBanDependencies /** Specify if transitive dependencies should be searched (default) or only look at direct dependencies. */ private boolean searchTransitive = true; - private transient DependencyGraphBuilder graphBuilder; + private transient DependencyGraphLookup graphLookup; @Override public void execute( EnforcerRuleHelper helper ) @@ -67,27 +63,15 @@ public void execute( EnforcerRuleHelper helper ) try { - graphBuilder = helper.getComponent( DependencyGraphBuilder.class ); + graphLookup = helper.getComponent( DependencyGraphLookup.class ); } catch ( ComponentLookupException e ) { - throw new EnforcerRuleException( "Unable to lookup DependencyGraphBuilder: ", e ); + throw new EnforcerRuleException( "Unable to lookup DependencyGraphLookup: ", e ); } - ProjectBuildingRequest sessionRequest; - try - { - MavenSession session = helper.getComponent( MavenSession.class ); - sessionRequest = session.getProjectBuildingRequest(); - } - catch ( ComponentLookupException e ) - { - throw new EnforcerRuleException( "Unable to lookup existing ProjectBuildingRequest: ", e ); - } - ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest( sessionRequest ); - buildingRequest.setProject( project ); // get the correct list of dependencies - Set dependencies = getDependenciesToCheck( buildingRequest ); + Set dependencies = getDependenciesToCheck( helper ); // look for banned dependencies Set foundExcludes = checkDependencies( dependencies, helper.getLog() ); @@ -118,29 +102,21 @@ protected CharSequence getErrorMessage( Artifact artifact ) return "Found Banned Dependency: " + artifact.getId() + System.lineSeparator(); } - protected Set getDependenciesToCheck( ProjectBuildingRequest buildingRequest ) + protected Set getDependenciesToCheck( EnforcerRuleHelper helper ) throws EnforcerRuleException { Set dependencies = null; - try + DependencyNode node = graphLookup.getDependencyGraph( helper ); + if ( searchTransitive ) { - DependencyNode node = graphBuilder.buildDependencyGraph( buildingRequest, null ); - if ( searchTransitive ) - { - dependencies = getAllDescendants( node ); - } - else if ( node.getChildren() != null ) - { - dependencies = new HashSet(); - for ( DependencyNode depNode : node.getChildren() ) - { - dependencies.add( depNode.getArtifact() ); - } - } + dependencies = getAllDescendants( node ); } - catch ( DependencyGraphBuilderException e ) + else if ( node.getChildren() != null ) { - // otherwise we need to change the signature of this protected method - throw new RuntimeException( e ); + dependencies = new HashSet<>(); + for ( DependencyNode depNode : node.getChildren() ) + { + dependencies.add( depNode.getArtifact() ); + } } return dependencies; } diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java index fd543112..ff2b792b 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java @@ -27,14 +27,9 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugins.enforcer.utils.ArtifactMatcher; -import org.apache.maven.project.DefaultProjectBuildingRequest; -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.ProjectBuildingRequest; -import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; +import org.apache.maven.plugins.enforcer.utils.DependencyGraphLookup; import org.apache.maven.shared.dependency.graph.DependencyNode; -import org.apache.maven.shared.dependency.graph.internal.DefaultDependencyGraphBuilder; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; -import org.codehaus.plexus.logging.console.ConsoleLogger; /** * This rule bans all transitive dependencies. There is a configuration option to exclude certain artifacts from being @@ -67,6 +62,8 @@ public class BanTransitiveDependencies */ private List includes; + private transient DependencyGraphLookup graphLookup; + /** * Searches dependency tree recursively for transitive dependencies that are not excluded, while generating nice * info message along the way. @@ -155,22 +152,17 @@ public void execute( EnforcerRuleHelper helper ) final ArtifactMatcher exclusions = new ArtifactMatcher( excludes, includes ); - DependencyNode rootNode = null; - try { - MavenProject project = (MavenProject) helper.evaluate( "${project}" ); - ProjectBuildingRequest sessionRequest = - (ProjectBuildingRequest) helper.evaluate( "${session.projectBuildingRequest}" ); - ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest( sessionRequest ); - buildingRequest.setProject( project ); - rootNode = createDependencyGraphBuilder().buildDependencyGraph( buildingRequest, null ); + graphLookup = helper.getComponent( DependencyGraphLookup.class ); } - catch ( Exception e ) + catch ( ComponentLookupException e ) { - throw new EnforcerRuleException( "Error: Could not construct dependency tree.", e ); + throw new EnforcerRuleException( "Unable to lookup DependencyGraphLookup: ", e ); } + DependencyNode rootNode = graphLookup.getDependencyGraph( helper ); + String message = getMessage(); StringBuilder generatedMessage = null; if ( message == null ) @@ -189,21 +181,5 @@ public void execute( EnforcerRuleHelper helper ) { throw new EnforcerRuleException( "Error: Invalid version range.", e ); } - - } - - private DependencyGraphBuilder createDependencyGraphBuilder() - throws ComponentLookupException - { - // CHECKSTYLE_OFF: LineLength - DefaultDependencyGraphBuilder builder = - (DefaultDependencyGraphBuilder) helper.getContainer().lookup( DependencyGraphBuilder.class.getCanonicalName(), - "default" ); - // CHECKSTYLE_ON: LineLength - - builder.enableLogging( new ConsoleLogger( ConsoleLogger.LEVEL_DISABLED, "DefaultDependencyGraphBuilder" ) ); - - return builder; } - } diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java index e981f0ae..d1af20ac 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java @@ -22,7 +22,10 @@ import java.util.Set; import org.apache.maven.artifact.Artifact; -import org.apache.maven.project.ProjectBuildingRequest; +import org.apache.maven.enforcer.rule.api.EnforcerRuleException; +import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; +import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; /** * This rule checks that lists of plugins are not included. @@ -33,9 +36,17 @@ public class BannedPlugins extends BannedDependencies { @Override - protected Set getDependenciesToCheck( ProjectBuildingRequest buildingRequest ) + protected Set getDependenciesToCheck( EnforcerRuleHelper helper ) throws EnforcerRuleException { - return buildingRequest.getProject().getPluginArtifacts(); + try + { + MavenProject project = helper.getComponent( MavenProject.class ); + return project.getPluginArtifacts(); + } + catch ( ComponentLookupException e ) + { + throw new EnforcerRuleException( "Could not load MavenProject: ", e ); + } } @Override diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java index 2f41c0b4..0ab7e8d0 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java @@ -24,19 +24,13 @@ import java.util.List; import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.enforcer.rule.api.EnforcerRule; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugin.logging.Log; +import org.apache.maven.plugins.enforcer.utils.DependencyGraphLookup; import org.apache.maven.plugins.enforcer.utils.DependencyVersionMap; -import org.apache.maven.project.DefaultProjectBuildingRequest; -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.ProjectBuildingRequest; -import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; -import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; import org.apache.maven.shared.dependency.graph.DependencyNode; -import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; /** @@ -50,62 +44,32 @@ public class DependencyConvergence private boolean uniqueVersions; + private transient DependencyGraphLookup graphLookup; + public void setUniqueVersions( boolean uniqueVersions ) { this.uniqueVersions = uniqueVersions; } - /** - * Uses the {@link EnforcerRuleHelper} to populate the values of the - * {@link DependencyGraphBuilder#buildDependencyGraph(ProjectBuildingRequest, ArtifactFilter)} - * factory method.
- * This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do. - * - * @param helper - * @return a Dependency Node which is the root of the project's dependency tree - * @throws EnforcerRuleException - */ - private DependencyNode getNode( EnforcerRuleHelper helper ) + @Override + public void execute( EnforcerRuleHelper helper ) throws EnforcerRuleException { - try + if ( log == null ) { - MavenProject project = (MavenProject) helper.evaluate( "${project}" ); - ProjectBuildingRequest sessionRequest = - (ProjectBuildingRequest) helper.evaluate( "${session.projectBuildingRequest}" ); - ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest( sessionRequest ); - buildingRequest.setProject( project ); - DependencyGraphBuilder dependencyGraphBuilder = - helper.getComponent( DependencyGraphBuilder.class ); - ArtifactFilter filter = null; // we need to evaluate all scopes - DependencyNode node = dependencyGraphBuilder.buildDependencyGraph( buildingRequest, filter ); - return node; + log = helper.getLog(); } - catch ( ExpressionEvaluationException e ) + try { - throw new EnforcerRuleException( "Unable to lookup an expression " + e.getLocalizedMessage(), e ); + graphLookup = helper.getComponent( DependencyGraphLookup.class ); } catch ( ComponentLookupException e ) { - throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e ); - } - catch ( DependencyGraphBuilderException e ) - { - throw new EnforcerRuleException( "Could not build dependency tree " + e.getLocalizedMessage(), e ); - } - } - - @Override - public void execute( EnforcerRuleHelper helper ) - throws EnforcerRuleException - { - if ( log == null ) - { - log = helper.getLog(); + throw new EnforcerRuleException( "Unable to lookup DependencyGraphLookup: ", e ); } try { - DependencyNode node = getNode( helper ); + DependencyNode node = graphLookup.getDependencyGraph( helper ); DependencyVersionMap visitor = new DependencyVersionMap( log ); visitor.setUniqueVersions( uniqueVersions ); node.accept( visitor ); diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java index ec468381..c4d923a1 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java @@ -26,21 +26,15 @@ import java.util.Map; import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.artifact.versioning.ArtifactVersion; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.apache.maven.artifact.versioning.OverConstrainedVersionException; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugin.logging.Log; -import org.apache.maven.project.DefaultProjectBuildingRequest; -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.ProjectBuildingRequest; -import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; -import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; +import org.apache.maven.plugins.enforcer.utils.DependencyGraphLookup; import org.apache.maven.shared.dependency.graph.DependencyNode; import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor; -import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; /** @@ -66,6 +60,8 @@ public class RequireUpperBoundDeps */ private List excludes = null; + private transient DependencyGraphLookup graphLookup; + /** * Set to {@code true} if timestamped snapshots should be used. * @@ -86,59 +82,25 @@ public void setExcludes( List excludes ) this.excludes = excludes; } - // CHECKSTYLE_OFF: LineLength - /** - * Uses the {@link EnforcerRuleHelper} to populate the values of the - * {@link DependencyGraphBuilder#buildDependencyGraph(ProjectBuildingRequest, ArtifactFilter)} - * factory method.
- * This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do. - * - * @param helper - * @return a Dependency Node which is the root of the project's dependency tree - * @throws EnforcerRuleException when the build should fail - */ - // CHECKSTYLE_ON: LineLength - private DependencyNode getNode( EnforcerRuleHelper helper ) + @Override + public void execute( EnforcerRuleHelper helper ) throws EnforcerRuleException { - try + if ( log == null ) { - - ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(); - MavenProject project = (MavenProject) helper.evaluate( "${project}" ); - buildingRequest.setProject( project ); - DependencyGraphBuilder dependencyGraphBuilder = - helper.getComponent( DependencyGraphBuilder.class ); - ArtifactFilter filter = null; // we need to evaluate all scopes - DependencyNode node = - dependencyGraphBuilder.buildDependencyGraph( buildingRequest, filter ); - return node; + log = helper.getLog(); } - catch ( ExpressionEvaluationException e ) + try { - throw new EnforcerRuleException( "Unable to lookup an expression " + e.getLocalizedMessage(), e ); + graphLookup = helper.getComponent( DependencyGraphLookup.class ); } catch ( ComponentLookupException e ) { - throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e ); - } - catch ( DependencyGraphBuilderException e ) - { - throw new EnforcerRuleException( "Could not build dependency graph " + e.getLocalizedMessage(), e ); - } - } - - @Override - public void execute( EnforcerRuleHelper helper ) - throws EnforcerRuleException - { - if ( log == null ) - { - log = helper.getLog(); + throw new EnforcerRuleException( "Unable to lookup DependencyGraphLookup: ", e ); } try { - DependencyNode node = getNode( helper ); + DependencyNode node = graphLookup.getDependencyGraph( helper ); RequireUpperBoundDepsVisitor visitor = new RequireUpperBoundDepsVisitor(); visitor.setUniqueVersions( uniqueVersions ); node.accept( visitor ); diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyGraphLookup.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyGraphLookup.java new file mode 100644 index 00000000..238af633 --- /dev/null +++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyGraphLookup.java @@ -0,0 +1,124 @@ +package org.apache.maven.plugins.enforcer.utils; + +/* + * 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. + */ + +import javax.inject.Named; +import javax.inject.Singleton; + +import java.util.concurrent.ExecutionException; + +import com.google.common.base.Throwables; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import org.apache.maven.enforcer.rule.api.EnforcerRuleException; +import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.project.DefaultProjectBuildingRequest; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuildingRequest; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; +import org.apache.maven.shared.dependency.graph.DependencyNode; + +import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; + +/** + * Collects a dependency graph, and caches it for reuse by any rules in the same project. + */ +@Named +@Singleton +public class DependencyGraphLookup +{ + private ProjectBuildingRequest sessionRequest; + private DependencyGraphBuilder dependencyGraphBuilder; + private LoadingCache projectDependencyGraphCache = CacheBuilder.newBuilder() + .maximumSize( 128 ) + .build( new CacheLoader() + { + @Override + public DependencyNode load( MavenProject project ) throws Exception + { + return getDependencyGraph( project ); + } + } ); + + private synchronized void init( EnforcerRuleHelper helper ) throws EnforcerRuleException + { + if ( dependencyGraphBuilder == null ) + { + try + { + MavenSession session = helper.getComponent( MavenSession.class ); + this.sessionRequest = session.getProjectBuildingRequest(); + } + catch ( ComponentLookupException e ) + { + throw new EnforcerRuleException( "Unable to load MavenSession: ", e ); + } + try + { + this.dependencyGraphBuilder = helper.getComponent( DependencyGraphBuilder.class ); + } + catch ( ComponentLookupException e ) + { + throw new EnforcerRuleException( "Unable to load DependencyGraphBuilder: ", e ); + } + } + } + + public synchronized DependencyNode getDependencyGraph( EnforcerRuleHelper helper ) throws EnforcerRuleException + { + init( helper ); + MavenProject project; + try + { + project = ( MavenProject ) helper.evaluate( "${project}" ); + } + catch ( ExpressionEvaluationException e ) + { + throw new EnforcerRuleException( "Unable to load MavenProject: ", e ); + } + try + { + return projectDependencyGraphCache.get( project ); + } + catch ( ExecutionException e ) + { + Throwables.propagateIfInstanceOf( e.getCause(), EnforcerRuleException.class ); + throw new EnforcerRuleException( "Unable to build DependencyNode graph: ", e.getCause() ); + } + } + + private DependencyNode getDependencyGraph( MavenProject project ) throws EnforcerRuleException + { + ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest( sessionRequest ); + buildingRequest.setProject( project ); + try + { + return dependencyGraphBuilder.buildDependencyGraph( buildingRequest, null ); + } + catch ( DependencyGraphBuilderException e ) + { + throw new EnforcerRuleException( "Unable to build DependencyNode graph: ", e ); + } + } +} diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/BannedDependenciesTestSetup.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/BannedDependenciesTestSetup.java index 08409a62..99bcb4d7 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/BannedDependenciesTestSetup.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/BannedDependenciesTestSetup.java @@ -29,7 +29,8 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugin.testing.ArtifactStubFactory; import org.apache.maven.project.MavenProject; -import org.apache.maven.project.ProjectBuildingRequest; +import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; + public class BannedDependenciesTestSetup { @@ -95,17 +96,18 @@ private BannedDependencies newBannedDependenciesRule() { @SuppressWarnings( "unchecked" ) @Override - protected Set getDependenciesToCheck( ProjectBuildingRequest buildingRequest ) + protected Set getDependenciesToCheck( EnforcerRuleHelper helper ) throws EnforcerRuleException { // the integration with dependencyGraphTree is verified with the integration tests // for unit-testing - MavenProject project = buildingRequest.getProject(); - return isSearchTransitive() ? project.getArtifacts() : project.getDependencyArtifacts(); + try { + MavenProject project = ( MavenProject ) helper.evaluate( "${project}" ); + return isSearchTransitive() ? project.getArtifacts() : project.getDependencyArtifacts(); + } catch ( ExpressionEvaluationException e ) { + throw new EnforcerRuleException( "Could not load MavenProject: ", e ); + } } }; return rule; } - - } - diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestBannedDependencies.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestBannedDependencies.java index 06f2b556..bf11fda7 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestBannedDependencies.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestBannedDependencies.java @@ -288,7 +288,7 @@ private void addIncludeExcludeAndRunRule( String incAdd, String excAdd ) } @Test - public void includeEverythingAndExcludeEverythign() + public void includeEverythingAndExcludeEverything() throws EnforcerRuleException { addIncludeExcludeAndRunRule( "*", "*" ); diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java index b62189c7..bb73243c 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java +++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseDeps.java @@ -25,11 +25,12 @@ import junit.framework.TestCase; import org.apache.maven.artifact.Artifact; +import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugin.testing.ArtifactStubFactory; import org.apache.maven.plugins.enforcer.utils.EnforcerRuleUtilsHelper; import org.apache.maven.project.MavenProject; -import org.apache.maven.project.ProjectBuildingRequest; +import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; /** * The Class TestNoSnapshots. @@ -97,12 +98,19 @@ private RequireReleaseDeps newRequireReleaseDeps() { RequireReleaseDeps rule = new RequireReleaseDeps() { - protected Set getDependenciesToCheck( ProjectBuildingRequest buildingRequest ) + protected Set getDependenciesToCheck( EnforcerRuleHelper helper ) throws EnforcerRuleException { // the integration with dependencyGraphTree is verified with the integration tests // for unit-testing - MavenProject project = buildingRequest.getProject(); - return isSearchTransitive() ? project.getArtifacts() : project.getDependencyArtifacts(); + try + { + MavenProject project = ( MavenProject ) helper.evaluate( "${project}" ); + return isSearchTransitive() ? project.getArtifacts() : project.getDependencyArtifacts(); + } + catch ( ExpressionEvaluationException e ) + { + throw new EnforcerRuleException( "Could not load MavenProject: ", e ); + } } }; return rule; diff --git a/maven-enforcer-plugin/pom.xml b/maven-enforcer-plugin/pom.xml index 0d2eda77..d5402a46 100644 --- a/maven-enforcer-plugin/pom.xml +++ b/maven-enforcer-plugin/pom.xml @@ -125,6 +125,22 @@ + + org.eclipse.sisu + sisu-maven-plugin + + + index-dependencies + package + + index + + + enforcer-rules + + + +