当前位置: 首页 > 知识库问答 >
问题:

QueryDSL, spring-boot

年烈
2023-03-14

我希望通过gradle将querydsl引入我的spring-boot项目。尽管在网上找到了几个例子,但实际上没有一个对我有用,因为存在依赖性的问题(我想)。根据QueryDSL支持论坛,gradle还不被支持。但是我想知道所有的事情

这是我的版本。gradle:

apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'jacoco'
apply plugin: 'war'

buildscript {
    repositories {
        maven { url "http://repo.spring.io/libs-snapshot" }
        mavenLocal()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.0.0.RC4")
    }
}

repositories {
    mavenCentral()
    maven { url: "http://repo.spring.io/libs-snapshot" }
//    maven { url: "http://repo.spring.io/milestone" }

}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.0.0.RC5")
    compile("org.springframework.boot:spring-boot-starter-data-jpa:1.0.0.RC5")
    compile("org.springframework:spring-orm:4.0.0.RC1")
    compile("org.hibernate:hibernate-entitymanager:4.2.1.Final")
    compile("com.h2database:h2:1.3.172")
    compile("joda-time:joda-time:2.3")
    compile("org.thymeleaf:thymeleaf-spring4")
    compile("org.codehaus.groovy.modules.http-builder:http-builder:0.7.1")
    compile('org.codehaus.groovy:groovy-all:2.2.1')
    compile('org.jadira.usertype:usertype.jodatime:2.0.1')

    // this line fails
    querydslapt "com.mysema.querydsl:querydsl-apt:3.3.2"

    testCompile('org.spockframework:spock-core:0.7-groovy-2.0') {
        exclude group: 'org.codehaus.groovy', module: 'groovy-all'
    }
    testCompile('org.codehaus.groovy.modules.http-builder:http-builder:0.7+')
    testCompile("junit:junit")
}

jacocoTestReport {
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}


sourceSets {
    main {
        generated {
            java {
                srcDirs = ['src/main/generated']
            }
        }

        java {
            srcDirs = []
        }
        groovy {
            srcDirs = ['src/main/groovy', 'src/main/java']
        }
        resources {
            srcDirs = ['src/main/resources']
        }

        output.resourcesDir = "build/classes/main"
    }

    test {
        java {
            srcDirs = []
        }
        groovy {
            srcDirs = ['src/test/groovy', 'src/test/java']
        }
        resources {
            srcDirs = ['src/test/resources']
        }

        output.resourcesDir = "build/classes/test"
    }
}


configurations {
    // not really sure what this is, I see it in examples but not in documentation
    querydslapt
}

task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') {
    source = sourceSets.main.java
    classpath = configurations.compile + configurations.querydslapt
    options.compilerArgs = [
            "-proc:only",
            "-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor"
    ]
    destinationDir = sourceSets.generated.java.srcDirs.iterator().next()
}

compileJava {
    dependsOn generateQueryDSL
    source generateQueryDSL.destinationDir
}

compileGeneratedJava {
    dependsOn generateQueryDSL
    options.warnings = false
    classpath += sourceSets.main.runtimeClasspath
}

clean {
    delete sourceSets.generated.java.srcDirs
}

idea {
    module {
        sourceDirs += file('src/main/generated')
    }
}

但是格拉德失败了:

Could not find method querydslapt() for arguments [com.mysema.querydsl:querydsl-apt:3.3.2] 

我尝试将querydsl-apt版本更改为早期版本,但我得到了相同的错误。

共有2个答案

端木宏盛
2023-03-14

您可能需要至少做两件事:

>

  • 在使用之前声明“querydslapt”配置

    将querydsl-jpa(或任何您需要的风格)添加到您的“编译”配置中。

    然后您将设置好类路径,但是如果没有更多的配置,apt位不会做任何事情(正如您在querydsl支持论坛中发现的那样)。apt but用于生成一些代码,然后您需要编译这些代码并在您的应用程序代码中使用它们(对应于您的域对象的“Q*”类)。我想您可以从gradle中的一个构建任务中驱动它(它只需要为域对象中的每一个变化运行一次)。

  • 柳坚白
    2023-03-14

    Spring Boot 1.3.5的工作配置和支持的QueryDSL,使用gradle 2.14进行了测试。

    ext {
        queryDslVersion = '3.6.3'
        javaGeneratedSources = file("$buildDir/generated-sources/java")
    }
    
    compileJava {
        doFirst {
            javaGeneratedSources.mkdirs()
        }
        options.compilerArgs += [
                '-parameters', '-s', javaGeneratedSources
        ]
    }
    
    dependencies {
        compile('org.springframework.boot:spring-boot-starter-data-jpa')
        compile "com.mysema.querydsl:querydsl-jpa:$queryDslVersion"
    
        compileOnly "com.mysema.querydsl:querydsl-apt:$queryDslVersion:jpa"
    }
    

    完整的项目源代码:spring-boot-querydsl

     类似资料:
    • 我将Spring Boot 1.5.13与QueryDSL一起使用,每当我向控制器发出调用时,我都会得到以下

    • 问题内容: 我是Spring数据JPA的新手,正在尝试了解如何最好地将其与QueryDSL结合使用。没有QueryDSL,我将可以在SpringData接口中使用@Query注释简单地创建任何查询。 为了获得与使用QueryDSL相同的经验,从我可以看到的角度来看,我需要创建自己的自定义存储库实现,并使我的repo接口扩展我的自定义实现接口,或者将我的所有QueryDSL查询放在包装我的repo的

    • 我试图在我的Spring Boot应用程序上实现查询DSL,该应用程序使用Spring Data Mongo&Gradle。我正在使用Spring工具套件在本地运行它。 我从包括Spring数据文档在内的多个来源中找到了以下步骤: null null 之后,更新了注释接口,如下所示。注意:我还将片段存储库FragmentOrderRepository用于一些自定义查询。 然后在controller

    • 我是Spring data JPA的新手,正在尝试了解如何最好地将其与QueryDSL一起使用。如果没有QueryDSL,我就可以用@Query注释在SpringData接口中创建任何查询。 为了获得使用QueryDSL的相同体验,根据我所看到的,我需要创建我自己的自定义存储库实现并让我的repo接口扩展我的自定义实现接口,或者将我的所有QueryDSL查询放在包装我的repo的服务层。 在第一种

    • 原因:java.lang.annotation.annotationFormaterror:无效默认值:public abstract java.lang.class org.springframework.data.jpa.repository.config.enableJParepositories.repositoryBaseClass()