基本的maven插件项目不工作,Mojo插件描述符不生成

我正在按照教程创build一个Maven插件,不能运行mvn安装而不会出错。 信息抱怨说,当注释应该为我生成它们时,我没有所需的mojo描述符。 我正在运行maven 3.0.5并使用intellij作为我的ide。 这是我的主要类:

@Mojo(name = "modify-connector") public class ComplianceMojo extends AbstractMojo { @Parameter private String artifactId; @Parameter private String version; @Override public void execute() throws MojoExecutionException, MojoFailureException { File jar = new File(getPluginContext().get("project.build.directory") + "/" + getPluginContext().get("project.build.finalname") + "/" + artifactId + "-" + version); if(jar.exists()){ getLog().info("The file exists! " + jar.getAbsolutePath()); } else { getLog().info("The file does not exist: " + jar.getAbsolutePath()); } } } 

这是我的pom.xml

 <?xml version="1.0" encoding="UTF-8"?> <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>mysql-jdbc-compliance-maven-plugin</groupId> <artifactId>mysql-jdbc-compliance-maven-plugin</artifactId> <version>1.0-SNAPSHOT</version> <packaging>maven-plugin</packaging> <dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> <version>2.0</version> </dependency> <dependency> <groupId>org.apache.maven.plugin-tools</groupId> <artifactId>maven-plugin-annotations</artifactId> <version>3.2</version> <scope>provided</scope> </dependency> </dependencies> </project> 

注:我不得不单独添加注释依赖作为主要插件api不包含这些类。 当我运行mvn安装在我的项目上,输出如下:

 [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.867s [INFO] Finished at: Wed Sep 25 17:45:55 EST 2013 [INFO] Final Memory: 8M/244M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:2.9:descriptor (default-descriptor) on project mysql-jdbc-compliance-maven-plugin: Error extracting plugin descriptor: 'No mojo definitions were found for plugin: mysql-jdbc-compliance-maven-plugin:mysql-jdbc-compliance-maven-plugin.' -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 

也许这与Maven中的一个未解决的问题有关: http : //jira.codehaus.org/browse/MNG-5346

对于我的插件项目,我可以通过添加maven-plugin-plugin的显式执行来解决:

 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.2</version> <configuration> <!-- see http://jira.codehaus.org/browse/MNG-5346 --> <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> </configuration> <executions> <execution> <id>mojo-descriptor</id> <goals> <goal>descriptor</goal> </goals> </execution> </executions> </plugin> </plugins> </build> 

但请参阅JIRA问题中的评论以获取更详细的解决scheme!

在阅读Gyro发布的Jira Issue之后,我将以下几行添加到了我的pom中,并且编译得很好。

 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.2</version> <configuration> <goalPrefix>mysql-jdbc-compliance</goalPrefix> </configuration> <executions> <execution> <id>default-descriptor</id> <goals> <goal>descriptor</goal> </goals> <phase>process-classes</phase> </execution> <execution> <id>help-descriptor</id> <goals> <goal>helpmojo</goal> </goals> <phase>process-classes</phase> </execution> </executions> </plugin> </plugins> </build> 

正如在前面的回答中提到的,这是一个错误,现在已经修复了。

你只需要告诉maven它应该使用更新版本的maven-plugin-plugin

这是我的pom文件的样子:

 <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"> <!-- ...other maven config... --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.3</version> </plugin> </plugins> </build> </project> 

只需将Maven插件版本增加到3.3或3.4

  <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.3</version> </plugin> </plugins> </build> 

不会解决任何问题(正如一些人所说的)。

您必须添加最less的default-descriptor执行与正确的阶段。 所以构build信息的最小configuration如下:

 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.1</version> <executions> <execution> <id>default-descriptor</id> <phase>process-classes</phase> </execution> </executions> </plugin> </plugins> </build> 

maven-plugin-plugin版本maven-plugin-plugin 。 (可以是3.1,3.2,3.3.3.4(没有testing其他))。

会产生:

 ... [INFO] --- maven-plugin-plugin:3.2:descriptor (default-descriptor) @ example-maven-plugin --- [WARNING] Using platform encoding (UTF-8 actually) to read mojo metadata, ie build is platform dependent! [INFO] Applying mojo extractor for language: java-annotations [INFO] Mojo extractor for language: java-annotations found 1 mojo descriptors. [INFO] Applying mojo extractor for language: java [INFO] Mojo extractor for language: java found 0 mojo descriptors. [INFO] Applying mojo extractor for language: bsh [INFO] Mojo extractor for language: bsh found 0 mojo descriptors. ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ 

另一种select,如果你不想在你的POM中build立标签,你可以在你的Mojo上使用javadoc。 例如:

 /** * @goal run123 */ @Mojo(name = "run123") public class MyMojo extends AbstractMojo { } 

会产生:

 ... [INFO] --- maven-plugin-plugin:3.2:descriptor (default-descriptor) @ example-maven-plugin --- [WARNING] Using platform encoding (UTF-8 actually) to read mojo metadata, ie build is platform dependent! [INFO] Applying mojo extractor for language: java-annotations [INFO] Mojo extractor for language: java-annotations found 0 mojo descriptors. [INFO] Applying mojo extractor for language: java [INFO] Mojo extractor for language: java found 1 mojo descriptors. [INFO] Applying mojo extractor for language: bsh [INFO] Mojo extractor for language: bsh found 0 mojo descriptors. ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ 

请参阅本指南了解更多信息http://maven.apache.org/plugin-tools/maven-plugin-plugin/examples/using-annotations.html

起初我以为陀螺的答案解决了这个错误。 但后来执行目标失败了。

mvn sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi

生成

[错误]无法在插件sample.plugin中findgoal'sayhi':hello-maven-plugin:可用目标中的1.0-SNAPSHOT – > [Help 1]

结果是

skipErrorNoDescriptorsFound

只是压制了这个错误。 即它没有解决根本问题。 我删除了此修复程序。

之后,解决scheme很简单(原因纯粹是我的错)。 当我创buildGreetingMojo.java时,我将它放在以下目录中

… /开发/我 – Maven的插件/ SRC /样品/插件/ GreetingMojo.java

它需要在下面

… /开发/我 – Maven的插件/ src目录/主/ Java的/样品/插件/ GreetingMojo.java