diff --git a/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojo.java b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojo.java index 57ae51bed..5de8cfcbc 100644 --- a/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojo.java +++ b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojo.java @@ -196,9 +196,10 @@ public void execute() return; } - if ( project.getArtifactId().toLowerCase().startsWith( "maven-" ) - && project.getArtifactId().toLowerCase().endsWith( "-plugin" ) && !"org.apache.maven.plugins".equals( - project.getGroupId() ) ) + if ( !"maven-plugin".equalsIgnoreCase( project.getArtifactId() ) + && project.getArtifactId().toLowerCase().startsWith( "maven-" ) + && project.getArtifactId().toLowerCase().endsWith( "-plugin" ) + && !"org.apache.maven.plugins".equals( project.getGroupId() ) ) { getLog().error( "\n\nArtifact Ids of the format maven-___-plugin are reserved for \n" + "plugins in the Group Id org.apache.maven.plugins\n" @@ -206,7 +207,8 @@ public void execute() + "In the future this error will break the build.\n\n" ); } - String defaultGoalPrefix = PluginDescriptor.getGoalPrefixFromArtifactId( project.getArtifactId() ); + String defaultGoalPrefix = getDefaultGoalPrefix( project ); + if ( goalPrefix == null ) { goalPrefix = defaultGoalPrefix; @@ -284,6 +286,20 @@ else if ( !goalPrefix.equals( defaultGoalPrefix ) ) } } + static String getDefaultGoalPrefix( MavenProject project ) + { + String defaultGoalPrefix; + if ( "maven-plugin".equalsIgnoreCase( project.getArtifactId() ) ) + { + defaultGoalPrefix = project.getGroupId().substring( project.getGroupId().lastIndexOf( '.' ) + 1 ); + } + else + { + defaultGoalPrefix = PluginDescriptor.getGoalPrefixFromArtifactId( project.getArtifactId() ); + } + return defaultGoalPrefix; + } + /** * Get dependencies filtered with mojoDependencies configuration. * diff --git a/maven-plugin-plugin/src/test/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojoTest.java b/maven-plugin-plugin/src/test/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojoTest.java new file mode 100644 index 000000000..d1e8c3bef --- /dev/null +++ b/maven-plugin-plugin/src/test/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojoTest.java @@ -0,0 +1,61 @@ +package org.apache.maven.plugin.plugin; + +/* + * 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 static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.CoreMatchers.is; + +import org.apache.maven.project.MavenProject; +import org.junit.Test; + +public class AbstractGeneratorMojoTest +{ + @Test + public void defaultGoalPrefix() + { + assertThat( AbstractGeneratorMojo.getDefaultGoalPrefix( newProject( null, "maven-plugin-plugin" ) ), + is( "plugin" ) ); + assertThat( AbstractGeneratorMojo.getDefaultGoalPrefix( newProject( null, "maven-default-plugin" ) ), + is( "default" ) ); + assertThat( AbstractGeneratorMojo.getDefaultGoalPrefix( newProject( null, "default-maven-plugin" ) ), + is( "default" ) ); + assertThat( AbstractGeneratorMojo.getDefaultGoalPrefix( newProject( "foo.bar", "maven-plugin" ) ), + is( "bar" ) ); + assertThat( AbstractGeneratorMojo.getDefaultGoalPrefix( newProject( "foo", "maven-plugin" ) ), is( "foo" ) ); + } + + private MavenProject newProject( final String groupId, final String artifactId ) + { + return new MavenProject() { + @Override + public String getGroupId() + { + return groupId; + } + + @Override + public String getArtifactId() + { + return artifactId; + } + }; + } + +}