You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/06/19 15:29:01 UTC
[maven] 02/02: [MNG-6562] WARN if plugins injected by default
lifecycle bindings don't have their version locked in pom.xml or parent
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch MNG-6562
in repository https://gitbox.apache.org/repos/asf/maven.git
commit a7771a1234d7b5dc7be5d1c16a2f29d9d5d416a8
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Jun 19 17:28:46 2020 +0200
[MNG-6562] WARN if plugins injected by default lifecycle bindings don't have their version locked in pom.xml or parent
---
.../internal/DefaultLifecyclePluginAnalyzer.java | 6 +--
.../lifecycle/internal/builder/BuilderCommon.java | 21 +++++++++++
.../lifecycle/internal/BuilderCommonTest.java | 44 ++++++++++++++++++----
.../stub/LifecycleExecutionPlanCalculatorStub.java | 11 +++++-
.../test/projects/project-builder/MNG-6723/pom.xml | 38 -------------------
5 files changed, 69 insertions(+), 51 deletions(-)
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
index 1201742..ed8ee7f 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
@@ -56,6 +56,8 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
public class DefaultLifecyclePluginAnalyzer
implements LifeCyclePluginAnalyzer
{
+ public static final String DEFAULTLIFECYCLEBINDINGS_MODELID = "org.apache.maven:maven-core:"
+ + DefaultLifecyclePluginAnalyzer.class.getPackage().getImplementationVersion() + ":default-lifecycle-bindings";
@Requirement( role = LifecycleMapping.class )
private Map<String, LifecycleMapping> lifecycleMappings;
@@ -143,10 +145,8 @@ public class DefaultLifecyclePluginAnalyzer
private void parseLifecyclePhaseDefinitions( Map<Plugin, Plugin> plugins, String phase, LifecyclePhase goals )
{
- String modelId = "org.apache.maven:maven-core:" + this.getClass().getPackage().getImplementationVersion()
- + ":default-lifecycle-bindings";
InputSource inputSource = new InputSource();
- inputSource.setModelId( modelId );
+ inputSource.setModelId( DEFAULTLIFECYCLEBINDINGS_MODELID );
InputLocation location = new InputLocation( -1, -1, inputSource );
location.setLocation( 0, location );
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
index 6941c37..8ad2650 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
@@ -19,7 +19,9 @@ package org.apache.maven.lifecycle.internal.builder;
* under the License.
*/
+import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Named;
@@ -34,6 +36,7 @@ import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.lifecycle.LifecycleNotFoundException;
import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.lifecycle.internal.DefaultLifecyclePluginAnalyzer;
import org.apache.maven.lifecycle.internal.ExecutionEventCatapult;
import org.apache.maven.lifecycle.internal.LifecycleDebugLogger;
import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator;
@@ -41,6 +44,7 @@ import org.apache.maven.lifecycle.internal.ReactorContext;
import org.apache.maven.lifecycle.internal.TaskSegment;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.MojoNotFoundException;
import org.apache.maven.plugin.PluginDescriptorParsingException;
import org.apache.maven.plugin.PluginNotFoundException;
@@ -136,6 +140,23 @@ public class BuilderCommon
logger.warn( "*****************************************************************" );
}
}
+
+ final String defaulModelId = DefaultLifecyclePluginAnalyzer.DEFAULTLIFECYCLEBINDINGS_MODELID;
+
+ List<String> unversionedPlugins = executionPlan.getMojoExecutions().stream()
+ .map( MojoExecution::getPlugin )
+ .filter( p -> p.getLocation( "version" ) != null ) // versionless cli goal (?)
+ .filter( p -> p.getLocation( "version" ).getSource() != null ) // versionless in pom (?)
+ .filter( p -> defaulModelId.equals( p.getLocation( "version" ).getSource().getModelId() ) )
+ .distinct()
+ .map( Plugin::getArtifactId ) // managed by us, groupId is always o.a.m.plugins
+ .collect( Collectors.toList() );
+
+ if ( !unversionedPlugins.isEmpty() )
+ {
+ logger.warn( "Version not locked for default bindings plugins " + unversionedPlugins
+ + ", you should define versions in pluginManagement section of your " + "pom.xml or parent" );
+ }
return executionPlan;
}
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java
index f924f52..a0a4430 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java
@@ -15,14 +15,18 @@ package org.apache.maven.lifecycle.internal;
* the License.
*/
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.lifecycle.MavenExecutionPlan;
import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
import org.apache.maven.lifecycle.internal.stub.LifecycleExecutionPlanCalculatorStub;
-import org.apache.maven.lifecycle.internal.stub.LoggerStub;
import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
+import org.codehaus.plexus.logging.Logger;
+import org.junit.Test;
+
import java.util.HashSet;
@@ -30,8 +34,10 @@ import java.util.HashSet;
* @author Kristian Rosenvold
*/
public class BuilderCommonTest
- extends TestCase
{
+ private Logger logger = mock( Logger.class );
+
+ @Test
public void testResolveBuildPlan()
throws Exception
{
@@ -46,10 +52,32 @@ public class BuilderCommonTest
builderCommon.resolveBuildPlan( session1, ProjectDependencyGraphStub.A, taskSegment1,
new HashSet<>() );
assertEquals( LifecycleExecutionPlanCalculatorStub.getProjectAExceutionPlan().size(), plan.size() );
-
}
+
+ @Test
+ public void testDefaultBindingPluginsWarning()
+ throws Exception
+ {
+ MavenSession original = ProjectDependencyGraphStub.getMavenSession();
+ final TaskSegment taskSegment1 = new TaskSegment( false );
+ final MavenSession session1 = original.clone();
+ session1.setCurrentProject( ProjectDependencyGraphStub.A );
+ getBuilderCommon().resolveBuildPlan( session1, ProjectDependencyGraphStub.A, taskSegment1, new HashSet<>() );
+
+ verify( logger ).warn("Version not locked for default bindings plugins ["
+ + "stub-plugin-initialize, "
+ + "stub-plugin-process-resources, "
+ + "stub-plugin-compile, "
+ + "stub-plugin-process-test-resources, "
+ + "stub-plugin-test-compile, "
+ + "stub-plugin-test, "
+ + "stub-plugin-package, "
+ + "stub-plugin-install], "
+ + "you should define versions in pluginManagement section of your pom.xml or parent");
+ }
+
public void testHandleBuildError()
throws Exception
{
@@ -65,11 +93,11 @@ public class BuilderCommonTest
{
}
- public static BuilderCommon getBuilderCommon()
+ public BuilderCommon getBuilderCommon()
{
- final LifecycleDebugLogger logger = new LifecycleDebugLogger( new LoggerStub() );
- return new BuilderCommon( logger, new LifecycleExecutionPlanCalculatorStub(),
- new LoggerStub() );
+ final LifecycleDebugLogger debugLogger = new LifecycleDebugLogger( logger );
+ return new BuilderCommon( debugLogger, new LifecycleExecutionPlanCalculatorStub(),
+ logger );
}
}
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java
index 90de4d8..13873be 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java
@@ -19,10 +19,13 @@ import org.apache.maven.execution.MavenSession;
import org.apache.maven.lifecycle.LifecycleNotFoundException;
import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.lifecycle.internal.DefaultLifecyclePluginAnalyzer;
import org.apache.maven.lifecycle.internal.ExecutionPlanItem;
import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator;
import org.apache.maven.lifecycle.internal.ProjectBuildList;
import org.apache.maven.lifecycle.internal.ProjectSegment;
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.InputSource;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.InvalidPluginDescriptorException;
import org.apache.maven.plugin.MojoExecution;
@@ -203,7 +206,11 @@ public class LifecycleExecutionPlanCalculatorStub
private static MojoExecution createMojoExecution( String goal, String executionId, MojoDescriptor mojoDescriptor )
{
+ InputSource defaultBindings = new InputSource();
+ defaultBindings.setModelId( DefaultLifecyclePluginAnalyzer.DEFAULTLIFECYCLEBINDINGS_MODELID );
+
final Plugin plugin = mojoDescriptor.getPluginDescriptor().getPlugin();
+ plugin.setLocation( "version", new InputLocation( 12, 34, defaultBindings ) );
MojoExecution result = new MojoExecution( plugin, goal, executionId );
result.setConfiguration( new Xpp3Dom( executionId + "-" + goal ) );
result.setMojoDescriptor( mojoDescriptor );
@@ -224,8 +231,8 @@ public class LifecycleExecutionPlanCalculatorStub
mojoDescriptor.setPhase( phaseName );
final PluginDescriptor descriptor = new PluginDescriptor();
Plugin plugin = new Plugin();
- plugin.setArtifactId( "org.apache.maven.test.MavenExecutionPlan" );
- plugin.setGroupId( "stub-plugin-" + phaseName );
+ plugin.setGroupId( "org.apache.maven.test.MavenExecutionPlan" );
+ plugin.setArtifactId( "stub-plugin-" + phaseName );
descriptor.setPlugin( plugin );
descriptor.setArtifactId( "artifact." + phaseName );
mojoDescriptor.setPluginDescriptor( descriptor );
diff --git a/maven-core/src/test/projects/project-builder/MNG-6723/pom.xml b/maven-core/src/test/projects/project-builder/MNG-6723/pom.xml
index 3aae158..e21f824 100644
--- a/maven-core/src/test/projects/project-builder/MNG-6723/pom.xml
+++ b/maven-core/src/test/projects/project-builder/MNG-6723/pom.xml
@@ -8,42 +8,4 @@
<modules>
<module>child</module>
</modules>
- <build>
- <pluginManagement>
- <plugins>
- <plugin>
- <artifactId>maven-clean-plugin</artifactId>
- <version>1.0</version>
- </plugin>
- <plugin>
- <artifactId>maven-install-plugin</artifactId>
- <version>1.0</version>
- </plugin>
- <plugin>
- <artifactId>maven-deploy-plugin</artifactId>
- <version>1.0</version>
- </plugin>
- <plugin>
- <artifactId>maven-site-plugin</artifactId>
- <version>1.0</version>
- </plugin>
- <plugin>
- <artifactId>maven-resources-plugin</artifactId>
- <version>1.0</version>
- </plugin>
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <version>1.0</version>
- </plugin>
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>1.0</version>
- </plugin>
- <plugin>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>1.0</version>
- </plugin>
- </plugins>
- </pluginManagement>
- </build>
</project>