2013-01-18 3 views
22

私は自分自身のモジョクラスを持っています。Mavenが私のカスタムMojoを見つけられないのはなぜですか?

@Mojo(name="mojo", threadSafe=true) 
public class MyMojo extends AbstractMojo 
{ 
    @Component 
    private MavenProject project; 

    public void execute() throws MojoExecutionException, MojoFailureException 
    { 
     getLog().info("Execute"); 
    } 
    } 

その後、ローカルリポジトリにインストールします。

[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 0 mojo descriptors. 
[INFO] Applying mojo extractor for language: bsh 
[INFO] Mojo extractor for language: bsh found 0 mojo descriptors. 
.... 
[INFO] BUILD SUCCESS 

でも試してみるが、私はここでエラー

[ERROR] Could not find goal 'mojo' in plugin my.plugins:my-plugin:1.0-SNAPSHOT among available goals -> [Help 1] 

what is the problem? 

途中だ "モジョゴールを呼び出すためのmaven-pluginの-プラグインの設定です。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-plugin-plugin</artifactId> 
    <version>3.2</version> 
    <configuration>             
     <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> 
    </configuration> 
</plugin> 

javadocアノテーションを使用した古いメカニズムは正常に機能しますが、私はjavaアノテーションを使用します。

<dependency> 
    <groupId>org.apache.maven.plugin-tools</groupId> 
    <artifactId>maven-plugin-annotations</artifactId> 
    <version>3.2</version> 
</dependency> 


[INFO] --- maven-plugin-plugin:3.2:descriptor (default-descriptor) @ bla-mvn-plugin 

mojo-descriptorの代わりにdefault-descriptorが有効になるのはなぜですか?

+2

pomで使用しているmaven-plugin-pluginの設定を表示できますか? –

+0

これは役に立ちません。 –

+0

私はmaven-dependency-plugin TreeMojoから私のプロジェクトにコピーして、すべてのコンポーネントを削除して、このmojoを見つけられませんでした。 –

答えて

31

は、プラグインのPOMには、このセクションを追加します。

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-plugin-plugin</artifactId> 
       <version>3.2</version> 
       <configuration> 
        <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> 
       </configuration> 
       <executions> 
        <execution> 
         <id>mojo-descriptor</id> 
         <phase>process-classes</phase> 
         <goals> 
          <goal>descriptor</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

PS。 maven-compiler-plugin:3.0のソースを参照してください。アノテーション付きMOJOを構築する例

+3

私と同じ問題を抱えている他の人への注釈:java 5アノテーションの抽出子は 'java'ではなく 'java-annotations'です(後者は旧ドックレットスタイルのjavadocアノテーションのみを対象としています)。 – Ajax

+0

私はv '3を使用しなければなりませんでした。5 'になりますが、最近の依存関係を使用しているためです。 –

5

EDIT(モジョ注釈の使用を扱う):

私は、注釈付きのプラグインを構築しようとしたと同じ問題に遭遇しました。

モジョ

@Mojo(name = "hello", defaultPhase = LifecyclePhase.INSTALL) 
public class MyMojo extends AbstractMojo 
{ 
    public void execute() throws MojoExecutionException, MojoFailureException 
    { 
     getLog().info("Hello"); 
    } 
} 

モジョ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"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>testware.mojotest</groupId> 
    <artifactId>mojotest</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>mojotest</name> 
    <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> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-plugin-plugin</artifactId> 
       <version>3.2</version> 
       <configuration> 
        <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

POMを:@Mojo注釈に下記のように私は、デフォルトのライフサイクルフェーズにプラグインを結合することによってそれを解決しましたモホ

<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>testware.mojotest</groupId> 
    <artifactId>mojotest-runner</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>mojotest-runner</name> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>testware.mojotest</groupId> 
       <artifactId>mojotest</artifactId> 
       <version>0.0.1-SNAPSHOT</version> 
       <executions> 
        <execution> 
         <phase>compile</phase> 
         <goals> 
          <goal>hello</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+0

彼は新しいJava 5アノテーションを使って、以前のJavadocベースの方法ではなくmojoアノテーションを提供しています。 –

+0

@Stephen - ありがとうございました。常に動作するように見えました。私はそれらを見なければならないでしょう。 – gregwhitaker

+0

なぜ古いmaven-plugin-apiバージョンを使用していますか? – khmarbaise

関連する問題