2013-07-02 3 views
2

Я пытался написать плагин maven с помощью аннотаций. Моя декларация плагин выглядит следующим образом:Устранение неполадок Плагин Maven для компиляции фазы

@Mojo(name = "compile", defaultPhase = LifecyclePhase.COMPILE, requiresProject = true,  threadSafe = false) 
public class CompileMojo extends AbstractMojo 

И у меня есть это в файле пом, который компилирует плагин:

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

Maven появляется, чтобы подтвердить, что плагин привязан к компиляции фазы:

mvn help:describe -DartifactId=jvmbasic-maven-plugin -DgroupId=com.khubla.jvmbasic -Dgoal=compile -Ddetail 

[INFO] Mojo: 'jvmbasic:compile' 
jvmbasic:compile 
    Description: jvmBASIC compiler 
    Implementation: com.khubla.jvmbasic.jvmbasicmojo.CompileMojo 
    Language: java 
    Bound to phase: compile 

    Available parameters: 

    sourceDir 
     where to find the sources 
    targetDir 
     target dir 
    verbose 
     verbose 

Когда я призываю харизмы явно это работает:

mvn jvmbasic:compile 

, и если я использую раздел исполнения в файле pom, он также работает. Тем не менее, я ожидал, что харизмы будет автоматически привязан к фазе компиляции, так, что если я напечатал

mvn clean compile 

он будет автоматически работать. Мне что-то не хватает?

Фактический исходный код здесь:

https://github.com/teverett/jvmBASIC/tree/master/jvmbasicmojo

+0

Кроме моего ответа я вижу несколько проблем с вашей Maven сборки (не определен кодирования). Примеры, которые используют плагин в том же реакторе без правильного определения зависимостей с плагином. Без ручного редактирования, не пригодного для сборки из коробки. Сгенерированные классы являются частью src/main/java (классы, сгенерированные ANTLR). Проблема в том, что вы не используете настоящую многомодульную сборку. – khmarbaise

+0

Я взглянул на ваши изменения и проверил их. Спасибо, большое спасибо. Однако, если мой тест вашего кода не был дефектным, исходная проблема все еще существует. Строка по-прежнему не вызывает jvmbasic: компилируется автоматически. –

ответ

0

Где pom.xml проекта вы бы хотели автомагически связать с фазой компиляции? У вашего проекта pom должно быть что-то подобное в разделе сборки.

<build> 
    <plugins> 
     <plugin> 
     <artifactId>jvmbasic-maven-plugin</artifactId> 
     <version>${jvmbasic.version}</version> 
     <configuration> 
      <sourceDir>${maven.compiler.source}</sourceDir> 
      <targetDir>${maven.compiler.target}</targetDir> 
     </configuration> 

    </plugin> 
+0

https://github.com/teverett/jvmBASIC/blob/master/examples/bottlesofbeer/pom.xml –

+0

Вы пробовали настроить плагин, как указано выше, с указанием sourceDir и targetDir? У вас есть записи в вашем mojo? Какова ценность этих параметров? – Sumit

+0

Эти параметры имеют значения по умолчанию.Имейте в виду, что если я назову mojo явно с помощью «mvn jvmbasic: compile», он работает; он просто не работает с «mvn compile». –

1

У вас возникли проблемы с dependency in your pom for your mojo. Вы должны использовать следующее:

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

вместо

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

Кроме того, было бы чище использовать Maven-плагин-плагин следующим образом:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-plugin-plugin</artifactId> 
    <configuration> 
     <goalPrefix>jvmbasic</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> 

Другим моментом является определите версию maven-compiler-plugin в области mojo, потому что вы не используете глобальный родительский pom для своего проекта.

+1

ОК, я считаю, что внес изменения, которые вы предлагаете, и симптомы одинаковы. Обновленный pom находится по адресу: https://github.com/teverett/jvmBASIC/blob/master/jvmbasicmojo/pom.xml. Симптомы не изменились. –

1

Я думаю, что вам не хватает @Execute аннотацию, как описано в Maven Plugin Tool for Annotations:

@Mojo(name="compile", defaultPhase = LifecyclePhase.COMPILE, 
     requiresProject = true, threadSafe = false) 
@Execute(goal = "compile", phase = LifecyclePhase.COMPILE) 
public class CompileMojo extends AbstractMojo 
Смежные вопросы