Плагин Maven JAXB2 XJC: исполнение плагина M2E не распространяется

Я использую плагин jaxb2 xjc для генерации java файлов с XSD. Поэтому я использовал свой pom.xml следующим образом:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.3</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <packageName>com.mypackage.model</packageName>
                <schemaDirectory>${basedir}/src/main/resources/XSD</schemaDirectory>
            </configuration>
        </plugin>
        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <configuration>
               <source>1.6</source>
               <target>1.6</target>
           </configuration>
       </plugin>
    </plugins>
</build>

Я изменил свою среду разработки на Eclipse Indigo, и это больше не работает. Ошибка говорит: "Выполнение плагина не покрывается конфигурацией жизненного цикла". Я понимаю, что мне нужно определить исполнение моего плагина по-другому, чтобы он работал в моей новой среде.

Я следил за инструкциями на этой странице Выполнение плагина M2E не распространяется, но исходные файлы не генерируются при выполнении фазы generate-sources.

Может ли кто-нибудь показать мне, как точно реорганизовать мой pom, чтобы мои файлы были правильно сгенерированы?

Спасибо за помощь!

Ответ 1

Получается, что я сделал, в конце концов, нашел ответ! Интеграция Eclipse с Maven имеет проблемы совместимости с многочисленными плагинами Maven.

Когда вы можете успешно запустить сборку Maven из командной строки за пределами Eclipse, но Eclipse показывает ошибки "выполнения не охвачены" в вашем POM, попробуйте добавить этот плагин:

<build>
    ...
    <pluginManagement>
        <plugins>
            <!--This plugin configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.codehaus.mojo</groupId>
                                    <artifactId>jaxb2-maven-plugin</artifactId>
                                    <versionRange>[1.3,)</versionRange>
                                    <goals>
                                        <goal>xjc</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <execute />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

Как указано в приведенном выше комментарии, этот плагин не делает ничего вне Eclipse. Он просто сообщает Eclipse, когда нужно выполнить плагин JAXB, поскольку Eclipse недостаточно умен, чтобы понять это самостоятельно.

Я нашел этот фрагмент на fooobar.com/questions/479712/... и применил его к плагину "jaxb2-maven-plugin", а не к плагину, выпущенному в другом вопросе.

Ответ 2

Вы также можете переключиться на maven-jaxb2-plugin, который имеет поддержку в M2E. Ответ Стив Перкинса выше, как правило, применим для тех плагинов, которые M2E не поддерживает.

Ответ 3

Я не уверен, относится ли это к вашей среде, но если приложение разделено на maven-модули, лучшим решением для моих потребностей, которое я нашел до сих пор, является удаление всех затронутых модулей из Eclipse IDE. Всякий раз, когда мне нужно регенерировать, я просто строю из командной строки с установкой mvn. Eclipse затем использует пакеты из репо и не пытается самостоятельно строить, нет необходимости в runOnIncremental скрипке (которая я использую в течение некоторого времени), никаких красных модулей/строк, тоже быстро растет.