【发布时间】:2018-05-30 15:22:32
【问题描述】:
我们正在使用带有 Java 1.8 的 Spring Boot、Hibernate、Query DSL 和 Maven 的设置
最近,我已将 Query DSL 添加到项目中,配置如下所示。为了使其工作,我必须在 eclipse 项目设置中配置 Java 编译器以允许注释处理,并将 Query DSL .jar 文件添加到 eclipse 注释工厂路径。
此设置按预期工作。它生成了自定义的Q 类,我可以在我的代码中使用它们。现在在命令行上运行mvn clean install 时,我的代码中的每个类都会抛出错误cannot find symbol,因为缺少该类。还有什么我需要配置的 - 类似于 eclipse 设置中的.jar 文件 - 以使构建过程正常工作?
编辑: 这个问题不是 this question 的重复,因为我没有问为什么会出现这个错误(找不到符号),而是问如何配置 QueryDSL 也可以在命令行上工作.
EDIT2:我现在尝试集成 build-helper-maven-plugin 以使用多个源路径作为输入。这也没有帮助。我还尝试将文件生成到src 文件夹中。它也没有帮助。
当我第一次在eclipse中编译库时,mvn compile在命令行中通过,但mvn clean compile仍然失败,因为它只是再次使用了eclipse的编译文件。执行了 apt-maven-plugin,可以在构建过程失败之前看到:
[INFO] --- apt-maven-plugin:1.1.3:process (default) @ project1 ---
[INFO]
[INFO] --- build-helper-maven-plugin:1.9.1:add-source (add-source) @ project1 ---
[INFO] Source directory: C:\Users\user1\git\project1\src\main\generated added.
[INFO]
[INFO] --- maven-processor-plugin:2.2.4:process (process) @ project1 ---
[ERROR] diagnostic: [...]
EDIT3:当我删除每个引用 Q 类的导入语句时,构建过程会(显然)完成。然而,值得注意的是,Q 类在这种情况下被正确编译。它们应在 target 文件夹中以 .class 文件的形式出现。会不会是Q 类编译得太晚了?
这是pom.xml的摘录
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
[...]
<prerequisites>
<maven>3.0.0</maven>
</prerequisites>
<dependencies>
[...]
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.1.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.1.3</version>
</dependency>
</dependencies>
<build>
<defaultGoal>spring-boot:run</defaultGoal>
<plugins>
[...]
<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-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
[...]
</build>
</project>
这是eclipse项目设置的配置:
这是控制台中显示的错误消息:
[INFO] --- maven-processor-plugin:2.2.4:process (process) @ project1 ---
[ERROR] diagnostic: C:\Users\user1\git\project1\src\main\java\com\project1\repository\UserRepositoryImpl.java:3: error: cannot find symbol
import static com.project1.domain.QUser.user;
^
symbol: class QUser
location: package com.project1.domain
[ERROR] diagnostic: C:\Users\user1\git\project1\src\main\java\com\project1\repository\UserRepositoryImpl.java:3: error: static import only from classes and interfaces
import static com.project.domain.QUser.user;
^
【问题讨论】:
-
正如我在上面所写的,很清楚为什么会发生此错误。生成的类不存在,因为在命令行上运行
mvn compile时未正确生成。然后它被导入,显然没有找到。但是,答案应该解决这个潜在的问题,而不是详细介绍这个错误。因此,不是重复的@feelingunwelcome