17

我使用Apache Thrifttarget/generated-sources.

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

据我了解,Maven 2 会自动添加生成的源代码,对吗?

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

4

2 回答 2

20

以我的理解,maven 2 自动添加生成的源,是这样吗?

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

一些实施得不太好的插件不会为您做到这一点,您必须自己添加目录,例如使用Build Helper Maven Plugin

而且由于您没有提供任何 POM 片段、任何链接,我不能再说什么了。

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

正如我所说,生成的源通常作为源目录添加并编译,因此可以在测试类路径中使用,而无需您做任何事情。

于 2010-11-08T03:54:01.470 回答
4

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

要使生成的源对 Maven 可见,请在您的节点上添加一个add-source-step :build/pluginspom.xml

<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>
于 2019-06-05T07:03:24.603 回答