M2e: Сгенерированный код с помощью exec-maven-plugin
Я использовал m2eclipse в течение 2 лет или около того и теперь переключился на m2e.
К сожалению, это нарушило некоторые функции для меня.
Во многих проектах я создал код Java, который обычно генерируется через основной класс в проекте библиотеки. Здесь типичная настройка:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>generateDTOs</id>
<phase>generate-sources</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<classpathScope>test</classpathScope>
<mainClass>com.somecompany.SomeCodeGenerator</mainClass>
<arguments>
<argument>${project.build.directory}/generated-sources/foo</argument>
<argument>${project.basedir}/path/to/a/config/file</argument>
<argument>more arguments</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>addDtoSourceFolder</id>
<goals>
<goal>add-source</goal>
</goals>
<phase>process-sources</phase>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/foo</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
Раньше мне просто нужно было импортировать этот проект с eclipse в качестве проекта maven, код будет автоматически выполнен, а исходная папка добавлена в проект eclipse.
Теперь m2e установил "соединитель" для плагина buildhelper, поэтому исходная папка создана, но мне нужно вручную инициировать генерацию кода, выполнив Run As > Maven > generate-sources
. Это действительно раздражает, я хотел бы, чтобы maven build отвечала на изменения pom.xml, Project > Clean ...
, обновления SVN, запуск Eclipse и т.д., Как это было ранее.
Что делать, чтобы заставить m2e работать как m2eclipse?
Ответы
Ответ 1
Вы должны сказать M2E, что нормально запускать генератор кода как часть сборки Eclipse:
<project>
<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>exec-maven-plugin</artifactId>
<versionRange>[,)</versionRange>
<goals>
<goal>java</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute/>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Примечания:
- Важно разместить эту конфигурацию в разделе pluginManagement, а не непосредственно под плагинами.
- Это приведет к тому, что M2E выполнит все java-исполнения, указанные в вашем POM, как часть каждой сборки Eclipse. Это означает, что они будут бегать часто и быть большой неприятностью, если они будут медленными. Я не уверен, как вы получите M2E для запуска некоторых из них и пропустите других. Вероятно, вам придется размещать нежелательные исполнения в профилях.
Ответ 2
В Eclipse вы можете определить, какой этап жизненного цикла будет выполняться во время импорта, который по умолчанию пуст. Вы можете просто изменить это на технологические ресурсы или просто настроить Maven → Update Project Configuration. В конфигурации (Windows → Настройки → Maven) вы можете изменить поведение по умолчанию, чтобы упростить вашу жизнь.