如何将maven项目的编译分为两部分?

时间:2015-12-09 12:34:50

标签: java maven

在我的Maven 1 Java项目中,我使用一些外部数据来创建编译类,因此我必须将编译分为两个步骤:编译程序,分析数据和创建类,编译这些类。

我如何在pom.xml文件中描述这种情况?

1 个答案:

答案 0 :(得分:1)

Maven 1是一项硬性要求吗?在Maven 3中,您可以将以下配置应用于POM:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.1</version>
            <executions>
                <execution>
                    <id>retrieve-config</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!-- replace by your generation step -->
                <executable>echo</executable>
                <arguments>
                    <argument>public</argument>
                    <argument>class</argument>
                    <argument>Main{}</argument>
                    <argument>></argument>
                    <argument>Main.java</argument>
                </arguments>
                <workingDirectory>${basedir}/src/main2/</workingDirectory>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.9</version>
            <executions>
                <execution>
                    <id>second-compilation-add-sources</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/main2</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
                <execution>
                    <id>second-compilation-compile</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <configuration>
                        <excludes>
                            <exclude>src/main/java/**/*.java</exclude>
                        </excludes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

在上面的配置中,三个插件是:

  • 生成所需的代码(我使用了Exec Maven插件作为示例,但在这里您可以执行生成器应用程序或另一个生成所需代码的maven插件)
  • 将新生成的代码(其文件夹)添加到Maven编译路径
  • 在进一步的编译步骤中编译新生成的源(排除已经编译为正常编译的部分)

我刚试过它,它在我的机器上工作正常(Windows机器) 请注意,上面的配置只是一个例子,我通过echo命令在文本文件中动态写入一个简单的Java类,然后将其文件夹(我之前创建的src/main2)添加到编译路径,然后编译它。全部作为process-classes阶段的一部分,在compile阶段之后发生 使用这种方法,您还可以测试整个代码(生成与否)作为标准test阶段的一部分。