m2e:使用exec-maven-plugin生成的代码

2022-09-02 10:22:15

我已经使用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插件安装了一个“连接器”,因此创建了源文件夹,但是我必须通过执行来手动触发代码生成。这真的很烦人,我希望maven构建能够像以前一样响应pom.xml更改,SVN Updates,Eclipse启动等。Run As > Maven > generate-sourcesProject > Clean ...

我能做些什么来使m2e像m2eclipse一样工作?


答案 1

你必须告诉M2E,作为Eclipse构建的一部分运行你的代码生成器是可以的:

<project>
  <build>
     [...]
     <pluginManagement>
      <plugins>
        <!--This plugin's 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>

笔记:

  1. 将此配置放在插件管理部分中非常重要,而不是直接放在插件下。
  2. 这将导致 M2E 执行 POM 中指定的所有 java 执行,作为每个 Eclipse 构建的一部分。这意味着它们会经常运行,如果它们很慢,就会很麻烦。我不确定如何让M2E运行其中一些并跳过其他。您可能必须将不需要的执行放在配置文件中。

答案 2

在 Eclipse 中,您可以定义在导入期间将运行哪个生命周期步骤,默认情况下该步骤为空。您可以简单地将其更改为流程资源,或者简单地执行 Maven ->更新项目配置。在配置(Windows ->首选项-> Maven)中,您可以更改默认行为以简化您的生活。


推荐