m2e по-прежнему выдает ошибку, в которой говорится, что «выполнение плагина не предусмотрено конфигурацией жизненного цикла» даже с явными привязками в пользовательском плагине - PullRequest
3 голосов
/ 10 января 2012

Я создаю плагин для генерации кода.

Я выполнил следующие шаги для создания плагина: http://maven.apache.org/guides/plugin/guide-java-plugin-development.html

Источник плагина:

/**
 * @goal helloworld
 * @phase generate-sources
 */
public class SampleMojo extends AbstractMojo
{
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException
    {
        getLog().info("Hello, world.");
    }
}

Использование:

    <plugins>
        <plugin>
            <groupId>com.sample</groupId>
            <artifactId>sample-maven-plugin</artifactId>
            <version>0.0.1</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>                     
                    <goals>
                        <goal>helloworld</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

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

Я прочитал «Как решить« Выполнение плагина, не охватываемого конфигурацией жизненного цикла »для Spring Data Maven Builds» , и я предположил, что если я создаю свой собственный плагин и устанавливаю @phase ианнотации @goal это избавило бы от этой ошибки.Я действительно не хочу вставлять узел "lifecycleMappingMetadata" в pom.

У кого-нибудь есть какие-либо советы по этому поводу?Есть ли что-то особенное, что мне нужно написать для m2e, чтобы устранить эту ошибку?

Ответы [ 2 ]

5 голосов
/ 19 января 2012

K.Ответ Клэзена правильный, но я хотел бы заполнить некоторые дополнительные детали.

A.Почему m2e похож на это?

Смысл этого поведения состоит в том, чтобы предотвратить использование m2e слишком большого количества ресурсов с постепенными (и потенциально бесконечными) изменениями.

B.m2e версия 1.1 пока не является «релизом»

В настоящее время m2e 1.1 все еще является «вехой».Пользователи должны будут установить / обновить его с помощью этого сайта обновлений: http://download.eclipse.org/technology/m2e/milestones/1.1 (мне также пришлось удалить «разъем SCM m2e», чтобы обновить его)

Сейчас этопотенциально больше хлопот для ваших пользователей, чем вставка фрагмента 'Quick Fix' в их файлы pom.xml.Но в долгосрочной перспективе это хорошо использовать.

C.Обзор создания вашего подключаемого модуля maven m2e-1.1-совместимого

Как описано K. Claszen, большая часть информации находится здесь: M2E-совместимые подключаемые модули maven .

Некоторые ключиpoints:

  1. Информация об исполнении определяется в файле - src / main / resources / META-INF / m2e / lifecycle-mapping-metadata.xml - см. M2E-совместимые плагины maven для формата.
  2. Если вы включили «инкрементное выполнение», вашему Mojo нужно будет правильно обмениваться данными с API Maven:
    1. Укажите зависимость от org.codehaus.plexus / plexus-build-api / 0.0.1 (текущий на момент написания)
    2. Используйте org.codehaus.plexus.build.incremental.BuildContext, чтобы:
    3. Проверить, изменились ли соответствующие ресурсы
    4. Уведомлять Maven о соответствующих операциях записи, выполняемых плагином, чтобы он знал, что нужно компилировать источники и т. Д.

D.Альтернативы

Если 1.1 не является реалистичным вариантом для ваших пользователей, вы можете:

  1. Создать ' Расширение M2E Eclipse plugin' (!!),aka '1048 * M2E Connector ', и выведите его на рынок.Удачи вам в этом.
  2. Сообщите пользователям вашего плагина о выборе M2E 'Quick Fix', а затем вручную измените строку <ignore /> на <execute />.Есть другие SO вопросы / ответы, которые охватывают это.
2 голосов
/ 10 января 2012

Я думаю, что M2E-совместимые плагины maven предоставят вам необходимую информацию.Обратите внимание, что это работает в первую очередь, начиная с версии 1.1e m2e.

...