Rob*_*anu 11 java maven-2 code-generation
我正在将一个较大的Ant构建转换为Maven.作为Ant构建的一部分,我们有几个步骤通过调用项目的一个类来创建Java类,简化为:
javac SomeGenerator.java
java SomeGenerator generated # generate classes in generated/
javac generated/*.java
Run Code Online (Sandbox Code Playgroud)
我已经将每个生成器拆分为自己的Maven模块,但是我遇到了无法运行生成器的问题,因为它尚未在generate-sources阶段中编译.
我尝试过类似的东西
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<id>generate-model</id>
<goals>
<goal>java</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<mainClass>DTOGenerator</mainClass>
<arguments>
<argument>${model.generated.dir}</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
由于上面提到的原因,遗憾的是不起作用.将代码生成器分成两个项目,一个用于编译生成器,另一个用于生成DTO,这似乎有点过分.
有什么替代品?
使用Maven 2.2.1.
您可以在generate-sources阶段执行maven-compile-plugin.只需在现有执行之前添加另一个执行,并对其进行配置,以便它只获取生成器的源.
或者将项目拆分为两个:使用单独的POM构建生成器,并将生成器库包含为生成源的POM的依赖项.
我个人会拆分该项目.使构建文件更清晰,更易于维护.
我不想有 2 个不同的项目,所以我尝试设置 Maven 以将生成的编译代码添加到最终的 jar 包中。
这是我使用过的工作解决方案:
process-classes阶段(在阶段之后执行compile):
exec-maven-plugin用于执行能够在target/generated-sources/java文件夹中生成源文件的主类(在我的特定情况下,我使用Roaster 库来生成源代码);build-helper-maven-plugin 用于在正确的位置添加生成的源prepare-package阶段:
maven-compiler-plugin,为了检测变化并重新编译模块maven-jar-plugin 用于生成 jar 包这是我的 pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.example.MyClassWriter</mainClass>
<arguments>
<argument>${project.basedir}</argument>
<argument>${project.build.directory}</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<phase>prepare-package</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5654 次 |
| 最近记录: |