java - 为什么 Maven 不从测试类生成源代码?

标签 java maven querydsl generate

我有一些使用 Querydsl 进行单元测试的测试类。 Querydsl 通常会生成一个查询类型类,但如果这些类位于测试目录中,则不会生成该类。 一旦我将文件放入 src/main 并使用 maven 进行编译,它就可以正常工作。 因为我只在测试中使用这些类,所以我不想将这些文件放在这个目录中。有人可以帮我吗?
我的目录结构
源代码/主目录/java
源代码/主要/资源
源代码/测试/java/
源代码/测试/资源

正如我所说,将文件放在“src/main/java”目录中,将生成查询类型类,但将文件放在“src/test/java/”目录中,将不会生成类型类。

生成 Querydsl 使用的查询类型的 Maven APT 插件

            <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>apt-maven-plugin</artifactId>
            <version>1.1.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>target/generated-test-sources/java</outputDirectory>
                        <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>com.querydsl</groupId>
                    <artifactId>querydsl-apt</artifactId>
                    <version>4.1.0</version>
                </dependency>
            </dependencies>
        </plugin>

最佳答案

可以解决同一个问题。 我发现此解决方案还可以为测试源生成“Q”实体。 技巧是使用插件的test-process 目标。将其添加到 generate-test-sources 阶段会在正确的时间生成它们(测试编译)。

        <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>apt-maven-plugin</artifactId>
            <version>${apt.maven.plugin.version}</version>
            <executions>
                <execution>
                    <id>generate-source-entities</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/generated</outputDirectory>
                        <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                    </configuration>
                </execution>
                <execution>
                    <id>generate-test-entities</id>
                    <phase>generate-test-sources</phase>
                    <goals>
                        <goal>test-process</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/generated</outputDirectory>
                        <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                    </configuration>
                </execution>
            </executions>
        </plugin>

请注意,这会为 maintest 源生成实体。

关于java - 为什么 Maven 不从测试类生成源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50043325/

相关文章:

java - QueryDSL 中的查询谓词

java - 在 JRE(1.8) 上运行 Java 项目时出现 "A fatal error has been detected by the Java Runtime Environment: "

Java 集合 pack() 方法

java - Maven编译导致ClassNotFoundException

java - 如何使用 QueryDSL 构建 GenericDao?

hibernate - QueryDSL 生成交叉连接

java - md5 algrithom 可以生成与原始字符串相同的字符串吗?

java - 如何在1个案例陈述中使用两个要求

angularjs - 如何配置重定向 Glassfish4 Maven Webapp

java - 为什么不可能在 Maven 中包含同一依赖项的多个版本?