私は tutorial に従ってMavenプラグインを作成していますが、エラーなしでmvn installを実行できません。情報は、アノテーションが私のためにそれらを生成する必要があるときに必要なモジョ記述子を持っていないことを不平を言います。私はmaven 3.0.5を実行しており、ideiとしてintellijを使用しています。ここに私のメインクラスがあります:
@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 installを実行すると、出力は次のようになります。
[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
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の未解決の問題に関連しています: https://issues.Apache.org/jira/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の問題のコメントを参照してください!
前の回答 で述べたように、これはバグであり、現在修正されています。
maven-plugin-plugin
の新しいバージョンを使用する必要があることをMavenに伝える必要があります。
私の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>
問題は修正されません(一部の人が述べているように)。
正しいフェーズで最低default-descriptor
実行を追加する必要があります。したがって、ビルド情報の最小構成は次のとおりです。
<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
バージョンに関係なく。 (3.1、3.2、3.3、3.4(その他はテストしなかった)にすることができます)。
生成されます:
...
[INFO] --- maven-plugin-plugin:3.2:descriptor (default-descriptor) @ example-maven-plugin ---
[WARNING] Using platform encoding (UTF-8 actually) to read mojo metadata, i.e. 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] ------------------------------------------------------------------------
POMにビルドタグを含めたくない場合は、Mojoでjavadocsを使用できます。例えば:
/**
* @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, i.e. 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
上記の素晴らしい回答-リソースを追加して最新バージョンを見つけることでそれらを強化したいと思います: https://mvnrepository.com/artifact/org.Apache.maven.plugins/maven-plugin-plugin
2019年4月2日-上記と同じエラーが発生し、3.6.0を使用して解決しました
最初は、ジャイロの答えがエラーを修正したと思いました。しかし、後で目標を実行するときに失敗しました。
mvn sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi
生産された
[エラー]プラグインsample.plugin:hello-maven-plugin:1.0-SNAPSHOTで利用可能な目標の中に目標 'sayhi'が見つかりませんでした-> [ヘルプ1]
それが判明
skipErrorNoDescriptorsFound
エラーを抑制しただけです。つまり、根本的な問題は解決しませんでした。この修正を削除しました。
その後、解決策は簡単でした(そして、純粋に私のせいです)。 GreetingMojo.Javaを作成したときに、次のディレクトリに配置しました。
.../Development/my-maven-plugin/src/sample/plugin/GreetingMojo.Java
下にある必要がありました
.../Development/my-maven-plugin/src/main/Java/sample/plugin/GreetingMojo.Java