【发布时间】:2020-03-25 05:01:04
【问题描述】:
我知道这个问题并不新鲜。但似乎没有明确的答案。 2012 年的This answer 指出,如果生成的源代码放在target/generated-sources/<tool> 下,它们将被编译。 ANTLR 4 maven plugin 遵循这种范式。根据文档,outputDirectory 的默认值为:${project.build.directory}/generated-sources/antlr4。
现在就我而言,我有一个生成源的自定义工具。我已将其输出目录设置为${project.build.directory}/generated-sources/whatever,但它不起作用。关于whateverpart,我尝试使用生成源的目标的ID,甚至尝试劫持antlr4 名称。但是没有结果。
当我尝试 this solution 建议使用 mojo build-helper-maven-plugin 时,它会按预期编译。但是根据maven guide to generating sources,它应该可以在没有任何帮助插件的情况下工作,不是吗?我错过了什么吗?
这是我用来生成源代码的 POM(片段)配置。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<id>generate-code</id>
<phase>generate-sources</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<includeProjectDependencies>false</includeProjectDependencies>
<includePluginDependencies>true</includePluginDependencies>
<executableDependency>
<groupId>com.company.product</groupId>
<artifactId>CodeGenerator</artifactId>
</executableDependency>
<arguments>
<argument>${basedir}/</argument>
<argument>${project.build.directory}/generated-sources/generate-code/</argument>
</arguments>
<mainClass>com.company.codegeneration.CodeGenerator</mainClass>
</configuration>
<dependencies>
<dependency>
<groupId>com.company.product</groupId>
<artifactId>CodeGenerator</artifactId>
<version>1.0-SNAPSHOT</version>
<type>jar</type>
</dependency>
</dependencies>
</plugin>
【问题讨论】:
-
您的插件应该将源代码添加到项目中这意味着您的插件应该像github.com/mojohaus/templating-maven-plugin一样正确地执行此操作
-
顺便说一句。不要在 pom 文件中使用反斜杠 ...此外,您应该真正创建一个正确的插件,该插件可以像
generate-source这样绑定到生命周期并正确处理。 -
@khmarbaise 老实说,我不知道如何处理(反)斜线。感谢您指出。如果您的建议是创建插件,请务必将其发布为答案。我知道已经有一个,但正如我已经指出的那样,它并没有明确说明“制作一个插件,否则它将无法工作”。
标签: java maven code-generation