querydsl生成的q源码没有正确导入

Posted

技术标签:

【中文标题】querydsl生成的q源码没有正确导入【英文标题】:querydsl generated q source code is not imported correctly 【发布时间】:2019-09-16 03:48:27 【问题描述】:

我正在尝试将 querydsl 添加到现有系统,但在获取生成的 Q 源进行编译时遇到问题。我已经阅读了几个类似的问题和解释(https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling#querydsl-web-support、https://blog.jdriven.com/2018/10/using-querydsl-annotation-processor-with-gradle-and-intellij-idea/(即使这与想法有关)),几乎所有 querydsl 的堆栈溢出问题......

这是我的 build.gradle 的一部分,它描述了问题所在:

ext 
  ... 
  querydslVersion = '4.2.1'


sourceSets 
    generated 
       java 
            srcDirs = [ 'build/generated' ]
        
    
    main 
        java 
            srcDirs = [ 'src/main/java' ]
        
    


...

dependencies 
    ...
    compile("com.querydsl:querydsl-core:$querydslVersion")
    compile("com.querydsl:querydsl-jpa:$querydslVersion")
    compile "com.querydsl:querydsl-apt:$querydslVersion:jpa"
    compileOnly group: 'org.projectlombok', name: 'lombok'
    annotationProcessor(
        "com.querydsl:querydsl-apt:$querydslVersion:jpa",
        "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final",
        "javax.annotation:javax.annotation-api:1.3.2",
        "org.projectlombok:lombok"
    )

当我尝试构建时,我收到错误:cannot find symbol QuerydslBinderCustomizer<QSample> 在存储库类中。 QSample.java 是根据模型 Sample 生成的,它位于

/build/generated/sources/annotationProcessor/java/main/com/prep/ws/model/QSample.java.

由于它位于 build 文件夹中,我很困惑为什么 IDE 和 gradle 看不到它。

我不确定自己做错了什么。

【问题讨论】:

出于好奇 - 您使用的是哪个版本的 Grade 和 intellij?您不再需要添加 sourceSets @Lesiak 我使用的是 eclipse,而不是想法,但在那里提到我分析了更多的解释,甚至是想法。 Gradle 版本是 5.4。 把srcDir改成build/generated/sources/annotationProcessor/java/有帮助吗 @Lesiak 感谢您的帮助,但不幸的是没有。已经试过了。如您所述,尝试使用所有组合设置 srcDir -> 基本目录、模型目录、annotationProcessor 目录。也尝试不设置 sourceSet。没有变化。不确定它是如何生成的,但不包括在内。 【参考方案1】:

经过多次尝试,我已经管理了该 querydsl 的工作(并且运行良好)。如果其他人有同样的问题,我会发布这个答案。就我而言,我不得不将 sourceSet 更改为直接指向 annotationProcessor/java/main。之后一切都按预期工作。

sourceSets.main.java.srcDirs = ['build/generated/sources/annotationProcessor/java/main','src/main/java']

指向build/generatedbuild/generated/sources/annotationProcessorbuild/generated/sources/annotationProcessor/java 不起作用。

【讨论】:

我爱你发布这个。无需插件即可工作,适用于 Eclipse 和 IntelliJ。完美 确认这在 2021 年寒冷的冬日仍然有效。谢谢!

以上是关于querydsl生成的q源码没有正确导入的主要内容,如果未能解决你的问题,请参考以下文章

QueryDSL:使用 Kotlin 和 Gradle 生成类失败

QueryDSL 注释处理器和 gradle 插件

Mockito QueryDSL

QueryDsl 设置架构

QueryDsl - 如何使用 maven 创建 Q 类?

Elasticsearch的javaAPI之query dsl-queries