使用带有 Spring Boot、Gradle 和 Idea 的 querydsl 时 QClasses 中未解析的符号

Posted

技术标签:

【中文标题】使用带有 Spring Boot、Gradle 和 Idea 的 querydsl 时 QClasses 中未解析的符号【英文标题】:Unresolved symbols in QClasses when using querydsl with Spring Boot, Gradle and Idea 【发布时间】:2018-09-20 07:24:40 【问题描述】:

我正在尝试使用 querydsl 构建一个带有 Spring Boot 的 API。我已经设法使用 Gradle 插件生成 QClasses,但我无法将这些类用作 QClasses,所有它们的导入都未解决。我附上了相关文件和屏幕截图,以了解事情的外观。

plugins 
    id "java"
    id "eclipse"
    id "idea"
    id "org.springframework.boot" version "2.0.1.RELEASE"
    id "io.spring.dependency-management" version "1.0.5.RELEASE"
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.9"


querydsl 
    querydslDefault = true
    jpa = true


idea 
    module 
        sourceDirs += file('src/querydsl/')
        generatedSourceDirs += file('src/querydsl/')
    


dependencies 
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile "com.querydsl:querydsl-jpa:4.1.3"
    testCompile('org.springframework.boot:spring-boot-starter-test')

这会产生像这样的 QClasses

如您所见,一个小问题是我无法再将树打开到 querydsl 模块。如果我删除sourceDirs += file('src/querydsl/'),我可以打开树。我不知道这是不是有意的。

我的仓库类是这样的

public interface BotRepository extends PagingAndSortingRepository<Bot, UUID>, QuerydslPredicateExecutor<Bot>, QuerydslBinderCustomizer<QBot> 

但我在 IntelliJ 中得到了这个

这告诉我项目模块设置有问题,即使我在 Gradle 中添加源。单击Add dependency on module 后,我可以导入该类。但话又说回来,我得到一个错误

我很确定会发生此错误,因为 QClass 无法解析导入。这是它的样子

这就是我卡住的地方。我无法继续使用 API。任何帮助将不胜感激。

P.S.:我知道有一些答案显示了如何设置 gradle,我使用这些答案进行了设置,并决定使用 querydsl gradle 插件。所以,我不希望删除插件并采取其他方式(阅读:querydsl-apt:jpa)

【问题讨论】:

【参考方案1】:

我在 Eclipse 上运行 Gradle + Spring Boot + QueryDSL 时也遇到了一些问题。但是,我注意到了一些重要的点:

1) 在我的笔记本上,它作为 Eclipse 中的 Java 应用程序或 Spring Boot 应用程序正确运行

2) 在我的桌面上,它确实没有作为 Java 应用程序运行

3) 在我的桌面上,它作为 Spring Boot App 正确运行

4) 在我的桌面上,它使用命令行正确运行:gradle bootRun

我仍然对第一次观察很感兴趣......

无论如何,请找到我使用的 build.gradle。希望对你有帮助...

plugins 
         id 'org.springframework.boot' version '1.5.8.RELEASE'
         id 'com.ewerk.gradle.plugins.querydsl' version '1.0.9'


apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

ext 
     querydslVersion = '4.1.4'


wrapper 
         gradleVersion = '4.3.1'


repositories 
              mavenCentral()
              maven  url "https://plugins.gradle.org/m2/" 


dependencies 
              compile('org.springframework.boot:spring-boot-starter')
              compile('org.springframework.boot:spring-boot-starter-actuator')
              compile('org.springframework.boot:spring-boot-starter-data-mongodb')
              compile('org.springframework.boot:spring-boot-starter-thymeleaf')
              compile('org.springframework.boot:spring-boot-starter-web')

              compile("com.querydsl:querydsl-mongodb:$querydslVersion")

              testCompile('org.springframework.boot:spring-boot-starter-test')


querydsl 
          springDataMongo = true
          querydslSourcesDir = 'src/generated-sources/java'
          library = "com.querydsl:querydsl-apt:$querydslVersion"
         

【讨论】:

以上是关于使用带有 Spring Boot、Gradle 和 Idea 的 querydsl 时 QClasses 中未解析的符号的主要内容,如果未能解决你的问题,请参考以下文章

带有 kotlin 设置问题的 Spring Boot gradle 项目

带有 Gradle 的 Spring Boot 任务失败:测试?

带有私有仓库的 Spring Boot Gradle bootBuildImage 任务

使用 Gradle 为带有 JSP 页面的 Spring Boot 应用程序创建 Jar

带有spring-cloud的Spring Boot:gradle构建失败

Gradle:带有用于 Spring Boot 的 jvm 参数的自定义任务