【问题标题】:maven can't add files in generated-sources for compilation phasemaven 无法在生成源中添加文件以进行编译阶段
【发布时间】:2011-05-06 11:32:39
【问题描述】:

我使用Apache Thrifttarget/generated-sources 中生成代码。

Thrift 编译器生成一个名为 gen-java 的目录,其中包含所有 Java 代码。当我执行mvn compile时,代码在target/generated-source/gen-java中正确生成,但在编译阶段,它抱怨找不到gen-java中定义的类。

在我的理解中,Maven 2 会自动添加生成的源,对吗?

如果我的测试代码也依赖于generated-sources,我是否必须手动指定编译器包含的内容?

【问题讨论】:

标签: maven code-generation thrift


【解决方案1】:

据我了解,maven 2会自动添加生成的源,是吗?

没有什么是自动的,生成源代码的插件通常通过将它们的输出目录(按照约定类似于target/generated-sources/<tool>)作为源目录添加到 POM 中,以便稍后在编译期间包含它阶段。

一些不太完善的插件不会为您执行此操作,您必须自己添加目录,例如使用Build Helper Maven Plugin

而且由于你没有提供任何 POM sn-p,任何链接,我不能再说什么了。

如果我的测试代码也依赖于生成的源,我是否必须手动指定编译器包含的内容?

正如我所说,生成的源代码通常作为源目录添加并编译,因此无需您执行任何操作即可在测试类路径中使用。

【讨论】:

  • 生成源代码的插件通常通过将它们的输出目录作为源目录添加到 POM 来处理这个问题 你有这样的配置示例吗?我正在尝试创建一个不太“实施得不太好的插件”来生成代码,但我找不到包含输出目录的最佳方法,而无需将其配置到“客户端”端。
  • @Pascal /target/generated-sources/ 本身呢,是否也需要将其添加到构建路径中?
【解决方案2】:

生成的源代码不会自动编译或打包。但是,某些 IDE(即 IntelliJ)会将它们显示为源文件夹。

要使生成的源对 maven 可见,请将 add-source-step 添加到您的 pom.xmlbuild/plugins 节点:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/gen-java</source><!-- adjust folder name to your needs -->
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 2011-06-03
    • 2018-03-14
    • 2016-04-12
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多