Mojo добавить исходную папку затмения

Я написал плагин Maven, который генерирует исходный код. Это работает в принципе нормально.

Проблема в том, что Eclipse не распознает каталог, в котором я генерирую код, как дополнительную исходную папку. Поэтому я получаю массу ошибок, говоря XXX cannot be resolved to a type, Компиляция и установка maven из командной строки работает нормально, хотя.

Сначала я решил это с помощью org.codehaus.mojo.build-helper-maven-plugin, Это отлично работает. Однако мне не нравится, что пользователь моего плагина должен также добавить второй плагин. Поэтому я заглянул в исходный кодadd-source цель в build-helper-maven-plugin и решил добавить соответствующий код, чтобы сделать это прямо в мой плагин. Поэтому мой плагин выглядит так:

@Mojo(name = "generate-sources", defaultPhase = LifecyclePhase.GENERATE_SOURCES)
public class MyMojo extends AbstractMojo {
    @Parameter(defaultValue = "${project}", readonly = true, required = true)
    private MavenProject project;

    @Parameter(required = true)
    private File targetDirectory;

    // some more members

    @Override
    public void execute() throws MojoExecutionException {
        // generation of the sources into targetDirectory

        project.addCompileSourceRoot(targetDirectory.getAbsolutePath());
    }
}

Нет ошибок во время выполнения, как из командной строки, так и из затмения (с Alt+F5 или правой кнопкой мыши -> Maven -> Обновить проект). Тем не менее, дополнительный исходный каталог не распознается.

Я делаю что-то не так? Или мне нужен специальный разъем m2e? В настоящее время я работаю над этим разъемом m2e с помощью плагина отображения жизненного цикла, используя

<action>
    <execute>
        <runOnConfiguration>true</runOnConfiguration>
        <runOnIncremental>true</runOnIncremental>
    </execute>
</action>

1 ответ

Решение

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

Некоторые плагины, например build-helperМожно добавить дополнительный каталог с исходным кодом, но им нужно соответствующее расширение m2e. Нет общего m2e, который работает для всех плагинов.

У вас есть следующие варианты:

  1. использование build-helper-maven-plugin, Я согласен, что это глупо
  2. Написать собственное расширение m2e. Гораздо хуже, чем вариант 1.
  3. Используйте отдельный модуль maven для источника, сгенерированного вашим плагином. В таком модуле вы можете определить <sourceDirectory>${project.build.directory}/generate-sources</..>, Разделение имеет смысл: сгенерированный код обычно отличается от обычного кода.
  4. Ничего не предпринимайте и требуйте, чтобы разработчики добавили дополнительную исходную папку вручную. Это выглядит очень примитивно, но имеет одно преимущество - добавленная вручную исходная папка не удаляется в [правый клик -> Maven -> Обновить проект]
Другие вопросы по тегам