2013-09-25 4 views
52

Я следую за tutorial для создания плагина maven и не могу запустить mvn install без ошибок. Информация жалуется, что у меня нет требуемых дескрипторов mojo, когда аннотации должны генерировать их для меня. Я запускаю maven 3.0.5 и использую intellij как мой ide. вот мой Основной класс:Основной проект плагина maven не работает, дескрипторы плагина Mojo не генерируют

@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 

ответ

33

после прочтения Jira Issue that Gyro posted, я добавил следующие строки моему моменту, и все составлено красиво.

<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> 
+6

Эта запись фактически добавляется в ваш pom.xml вашего плагина автоматически, если вы создаете проект с использованием maven archetype: 'mvn archetype: generate -DgroupId = com.example -DartifactId = my-awesome-maven-plugin -DarchetypeGroupId = org.apache.maven.archetypes -DarchetypeArtifactId = maven-archetype-plugin' –

+2

С mvn 3.3.9 Мне нужны только groupId, artifactId и v3.5 - все настройки по умолчанию. – Adam

41

Может быть, это связано с нерешенностью вопроса в Maven: http://jira.codehaus.org/browse/MNG-5346

Для моих плагинов проектов, я мог бы обходной путь, добавив явное выполнение Maven-плагин-плагин:

<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 для более сложных решений!

+0

Я прочитал этот вопрос вы выложили и реализовали работувокруг на веб-сайте, и он сработал! Спасибо за указание на это :) – coderatchet

+7

Эта проблема исправлена ​​в 3.2.2: http://maven.apache.org/docs/3.2.2/release-notes.html –

+0

Спасибо, это решило мою build на машине, работающей на Maven 3.0.5 – qqilihq

20

Как уже упоминалось в previous answer, это была ошибка, и теперь исправлена.

Вам просто нужно сообщить maven, что он должен использовать более новую версию maven-plugin-plugin.

Вот как мой файл П выглядит следующим образом:

<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> 
+0

Спасибо. Помогли много. –

+0

версия 3.5 от 2016-08-26; работает с этим кодом –

9

Просто приращение 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] ------------------------------------------------------------------------ 

Другой вариант, если вы не хотите иметь сборки теги в вашем ПОМ, вы можете использовать Javadocs на вашем Mojo.Например:

/** 
* @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

+1

большое спасибо, добавив, что дескриптор сделал трюк! +1 – JamesC

+2

Добавление дескриптора должно происходить автоматически при создании плагина. Кроме того, вам не нужно объявлять зависимость maven-plugin-plugin, поскольку это также автоматически обнаруживается при создании проекта с объявлением 'maven-plugin'. Однако вы можете не получить последнюю версию - с mvn 3.3.9 Я получал плагин maven-plugin 3.2, поэтому мне пришлось объявить зависимость, чтобы указать v3.5 – Adam

-1

Первоначально я думал, что ответ гироскопа исправлена ​​ошибка. Но позже при выполнении цели он потерпел неудачу.

МВН sample.plugin: привет-Maven-плагин: 1,0-ПАНОРАМА: SayHi

производства

[ERROR] Не удалось найти цель 'SayHi' в плагин sample.plugin : привет-Maven-плагин: 1,0-ПАНОРАМА среди доступных целей -> [Помощь 1]

Оказывается, что

skipErrorNoDescriptorsFound

только подавлял ошибку. т. е. он не разрешил основную проблему. Я удалил это исправление.

После этого решение было простым (и причиной была чисто моя ошибка). Когда я создал GreetingMojo.java я поместил его в следующий каталог

.../Разработка/мой-Maven-плагин/SRC/образец/плагин/GreetingMojo.java

Она должна быть под

.../Разработка/мой-Maven-плагин/SRC/главная/Java/образец/плагин/GreetingMojo.java

Смежные вопросы