2013-01-18 3 views
22

Ho una propria classe Mojo.Perché Maven non può trovare il mio Mojo personalizzato?

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

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

Successivamente lo installo nel repository locale.

[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 

Ma quando provo a chiamare obiettivo 'Mojo' I got it errore

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

what is the problem? 

Ecco configurazione maven-plugin-plugin.

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

Vecchio meccanismo con annotazioni Javadoc funziona bene, ma voglio usare annotazione.

<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 

Perché il descrittore di default è abilitato al posto del descrittore di mojo?

+2

Puoi mostrare la configurazione di maven-plugin-plug che stai utilizzando nel pom? –

+0

Questo non aiuta. –

+0

Sono persino stato copiato da Maven-dependency-plugin TreeMojo al mio progetto, rimuovere tutti i componenti e Maven non ha trovato questo mojo. –

risposta

31

Aggiungi questa sezione per POM del vostro plugin:

<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. Vedi maven-compiler-plugin: 3.0 fonti per un esempio funzionante completo di creazione di MOJO con annotazioni

+3

Una nota per chiunque abbia avuto lo stesso problema di me: l'estrattore per le annotazioni di java 5 è 'java-annotations', non 'java', (l'ultimo dei quali mira solo alle vecchie annotazioni javadoc in stile doclet). – Ajax

+0

Ho dovuto usare v '3.5', ma suppongo che sia perché sto usando dipendenze più recenti. –

5

EDIT (affrontando l'uso delle annotazioni Mojo):

ho provato la costruzione di un plugin con le annotazioni e corse nello stesso problema. Ho risolto legando il plugin per una fase di default del ciclo di vita, come mostrato sotto nella @Mojo nota:

Mojo

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

Mojo 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 del Progetto Invoking 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

Sta usando il nuovo modo basato su annotazioni Java 5 per fornire le annotazioni mojo piuttosto che il vecchio modo basato su Javadoc il tuo esempio di codice dà –

+0

@Stephen - Grazie, non li ho mai usati prima e il vecchio modo ha sembrava sempre funzionare. Dovrò dare un'occhiata a loro. – gregwhitaker

+0

Perché stai usando una vecchia versione di maven-plugin-api? – khmarbaise