带有 QueryDSL 和 Gradle 的 IntelliJ 15
IntelliJ 15 with QueryDSL and Gradle
我在 IntelliJ 15 中有一个 Spring-boot 1.4 项目,使用 gradle 2.3 和 QueryDSL 4.1.3 无法构建,因为我的实体没有构建到 Q 类 通过 Querydsl。我有以下内容:
buildscript {
ext {
springBootVersion = '1.4.0.BUILD-SNAPSHOT'
querydslVersion = '4.1.3'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven {url "https://plugins.gradle.org/m2/"}
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath "gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.7"
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'jacoco'
apply plugin: 'groovy'
apply plugin: "com.ewerk.gradle.plugins.querydsl"
jar {
baseName = 'billing'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
jcenter()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven { url "https://repo.spring.io/libs-snapshot" }
maven { url "https://repo.spring.io/libs-snapshot"}
maven {url "https://plugins.gradle.org/m2/"}
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')
compile "com.querydsl:querydsl-root:$querydslVersion"
compile "com.querydsl:querydsl-jpa:$querydslVersion"
compile "com.querydsl:querydsl-apt:$querydslVersion:jpa"
compile 'org.codehaus.groovy:groovy-all:2.4.1'
compile fileTree(dir: "libs/qbo-sdk-2.5.0", include: "*.jar")
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.spockframework:spock-core:1.0-groovy-2.4') {
exclude group: 'org.codehaus.groovy', module: 'groovy-all'
}
testCompile('org.spockframework:spock-spring:1.0-groovy-2.4') {
exclude group: 'org.spockframework', module: 'spock-core'
}
testCompile("junit:junit")
}
sourceSets {
main {
output.resourcesDir = output.classesDir
}
generated {
java {
srcDirs = ['src/main/generated']
}
}
}
querydsl {
library = 'com.mysema.querydsl:querydsl-apt'
querydslDefault = true
}
test {
reports.junitXml.destination = file('build/test-results/folder')
}
jacoco {
toolVersion = "0.7.0.201403182114"
}
jacocoTestReport {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
}
configurations {
querydslapt
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
idea {
module {
sourceDirs += file('generated/')
generatedSourceDirs += file('generated/')
}
}
当我 运行 我的单元测试时出现错误:
Caused by: java.lang.ClassNotFoundException: com.company.billing.customer.QCustomer
当我 运行 "gradle clean build" 我得到:
找不到 com.mysema.querydsl:querydsl-apt:.
Searched in the following locations:
https://repo1.maven.org/maven2/com/mysema/querydsl/querydsl-apt//querydsl-apt-.pom
https://repo1.maven.org/maven2/com/mysema/querydsl/querydsl-apt//querydsl-apt-.jar
https://jcenter.bintray.com/com/mysema/querydsl/querydsl-apt//querydsl-apt-.pom
https://jcenter.bintray.com/com/mysema/querydsl/querydsl-apt//querydsl-apt-.jar
https://repo.spring.io/snapshot/com/mysema/querydsl/querydsl-apt//querydsl-apt-.pom
https://repo.spring.io/snapshot/com/mysema/querydsl/querydsl-apt//querydsl-apt-.jar
https://repo.spring.io/milestone/com/mysema/querydsl/querydsl-apt//querydsl-apt-.pom
https://repo.spring.io/milestone/com/mysema/querydsl/querydsl-apt//querydsl-apt-.jar
https://repo.spring.io/libs-snapshot/com/mysema/querydsl/querydsl-apt//querydsl-apt-.pom
https://repo.spring.io/libs-snapshot/com/mysema/querydsl/querydsl-apt//querydsl-apt-.jar
我意识到 QueryDsl 在 3 和 4 之间做了一些包重构,但看起来我的依赖项无法找到,即使它们很明显在这里:https://mvnrepository.com/artifact/com.querydsl/querydsl-jpa/4.1.3
至少,这是我目前关于构建失败原因的理论。有人得到最新的 spring、gradle 和 querydsl 来工作吗?
更新:
我删除了 ewerk 插件并简化了我的 build.gradle 文件,所以现在一切都可以正确构建。我正在更新以帮助可能需要它的其他人:
buildscript {
ext {
springBootVersion = '1.4.0.BUILD-SNAPSHOT'
querydslVersion = '4.1.3'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'jacoco'
apply plugin: 'groovy'
jar {
baseName = 'billing'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
jcenter()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven { url "https://repo.spring.io/libs-snapshot" }
maven { url "https://repo.spring.io/libs-snapshot"}
maven {url "https://plugins.gradle.org/m2/"}
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')
compile "com.querydsl:querydsl-root:$querydslVersion"
compile "com.querydsl:querydsl-jpa:$querydslVersion"
compile "com.querydsl:querydsl-apt:$querydslVersion:jpa"
compile 'org.codehaus.groovy:groovy-all:2.4.1'
compile fileTree(dir: "libs/qbo-sdk-2.5.0", include: "*.jar")
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.spockframework:spock-core:1.0-groovy-2.4') {
exclude group: 'org.codehaus.groovy', module: 'groovy-all'
}
testCompile('org.spockframework:spock-spring:1.0-groovy-2.4') {
exclude group: 'org.spockframework', module: 'spock-core'
}
testCompile("junit:junit")
}
test {
reports.junitXml.destination = file('build/test-results/folder')
}
jacoco {
toolVersion = "0.7.0.201403182114"
}
jacocoTestReport {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
idea {
module {
sourceDirs += file('generated/')
generatedSourceDirs += file('generated/')
}
}
您是否在 Gradle 输出中看到您的 QClasses 正在生成?从您的错误来看,它似乎已经过了应该生成它们的地步。
我认为问题是您没有配置 JPAAnnotationProcessor
。这是为了方便 gradle 通过将 :jpa 附加到您的 querydsl-apt 依赖项来完成的。在 Maven 中,您应用插件 manually.
我的 build.gradle 中有以下与 querydsl 相关的内容。
idea {
module {
sourceDirs += file('generated/')
generatedSourceDirs += file('generated/')
}
}
[...]
compile "com.querydsl:querydsl-root:$querydslVersion"
compile "com.querydsl:querydsl-jpa:$querydslVersion"
compile "com.querydsl:querydsl-apt:$querydslVersion:jpa
idea 块只是在 IDEA 中自动配置生成的源目录,以便 in-IDE 构建正常工作。
编辑:
JPAAnnotationProcessor
输出如下所示。
Note: Running JPAAnnotationProcessor
Note: Serializing Supertypes
Note: Generating com.myclass.example.QMappedSuperClass for [com.myclass.example.MappedSuperClass]
Note: Serializing Entity types
Note: Generating com.myclass.example.QMyClass for [com.myclass.example.MyClass]
编辑:
我对 ewerk 插件不熟悉,所以我看了一下。它似乎正在尝试为您激活 JPAAnnotationProcessor。您可能需要根据文档 here 设置 JPA 标志,因为它默认为 false。
请参阅有关依赖性问题的评论线程。
编辑:对于 Gradle 4.6+,您可以使用 annotationProcessor
语法。
api "com.querydsl:querydsl-root:$querydslVersion"
api "com.querydsl:querydsl-jpa:$querydslVersion"
annotationProcessor "com.querydsl:querydsl-apt:$querydslVersion:jpa"
如果有人想使用 Kotlin 和 Gradle kotlin dsl 执行此操作,请按照以下说明使用该设置执行此操作:
build.gradle.kts
plugins {
[...]
id("org.jetbrains.kotlin.kapt") version kotlinVersion
}
dependencies {
[...]
compile("com.querydsl:querydsl-core:$queryDslVersion")
compile("com.querydsl:querydsl-jpa:$queryDslVersion")
kapt("com.querydsl:querydsl-apt:$queryDslVersion:jpa")
}
请注意,在 Kotlin 1.2.20 中修复 Kapt 错误之前,您可能需要为 Gradle 使用 Java 8。
我在 IntelliJ 15 中有一个 Spring-boot 1.4 项目,使用 gradle 2.3 和 QueryDSL 4.1.3 无法构建,因为我的实体没有构建到 Q 类 通过 Querydsl。我有以下内容:
buildscript {
ext {
springBootVersion = '1.4.0.BUILD-SNAPSHOT'
querydslVersion = '4.1.3'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven {url "https://plugins.gradle.org/m2/"}
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath "gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.7"
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'jacoco'
apply plugin: 'groovy'
apply plugin: "com.ewerk.gradle.plugins.querydsl"
jar {
baseName = 'billing'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
jcenter()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven { url "https://repo.spring.io/libs-snapshot" }
maven { url "https://repo.spring.io/libs-snapshot"}
maven {url "https://plugins.gradle.org/m2/"}
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')
compile "com.querydsl:querydsl-root:$querydslVersion"
compile "com.querydsl:querydsl-jpa:$querydslVersion"
compile "com.querydsl:querydsl-apt:$querydslVersion:jpa"
compile 'org.codehaus.groovy:groovy-all:2.4.1'
compile fileTree(dir: "libs/qbo-sdk-2.5.0", include: "*.jar")
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.spockframework:spock-core:1.0-groovy-2.4') {
exclude group: 'org.codehaus.groovy', module: 'groovy-all'
}
testCompile('org.spockframework:spock-spring:1.0-groovy-2.4') {
exclude group: 'org.spockframework', module: 'spock-core'
}
testCompile("junit:junit")
}
sourceSets {
main {
output.resourcesDir = output.classesDir
}
generated {
java {
srcDirs = ['src/main/generated']
}
}
}
querydsl {
library = 'com.mysema.querydsl:querydsl-apt'
querydslDefault = true
}
test {
reports.junitXml.destination = file('build/test-results/folder')
}
jacoco {
toolVersion = "0.7.0.201403182114"
}
jacocoTestReport {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
}
configurations {
querydslapt
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
idea {
module {
sourceDirs += file('generated/')
generatedSourceDirs += file('generated/')
}
}
当我 运行 我的单元测试时出现错误:
Caused by: java.lang.ClassNotFoundException: com.company.billing.customer.QCustomer
当我 运行 "gradle clean build" 我得到: 找不到 com.mysema.querydsl:querydsl-apt:.
Searched in the following locations: https://repo1.maven.org/maven2/com/mysema/querydsl/querydsl-apt//querydsl-apt-.pom https://repo1.maven.org/maven2/com/mysema/querydsl/querydsl-apt//querydsl-apt-.jar https://jcenter.bintray.com/com/mysema/querydsl/querydsl-apt//querydsl-apt-.pom https://jcenter.bintray.com/com/mysema/querydsl/querydsl-apt//querydsl-apt-.jar https://repo.spring.io/snapshot/com/mysema/querydsl/querydsl-apt//querydsl-apt-.pom https://repo.spring.io/snapshot/com/mysema/querydsl/querydsl-apt//querydsl-apt-.jar https://repo.spring.io/milestone/com/mysema/querydsl/querydsl-apt//querydsl-apt-.pom https://repo.spring.io/milestone/com/mysema/querydsl/querydsl-apt//querydsl-apt-.jar https://repo.spring.io/libs-snapshot/com/mysema/querydsl/querydsl-apt//querydsl-apt-.pom https://repo.spring.io/libs-snapshot/com/mysema/querydsl/querydsl-apt//querydsl-apt-.jar
我意识到 QueryDsl 在 3 和 4 之间做了一些包重构,但看起来我的依赖项无法找到,即使它们很明显在这里:https://mvnrepository.com/artifact/com.querydsl/querydsl-jpa/4.1.3
至少,这是我目前关于构建失败原因的理论。有人得到最新的 spring、gradle 和 querydsl 来工作吗?
更新: 我删除了 ewerk 插件并简化了我的 build.gradle 文件,所以现在一切都可以正确构建。我正在更新以帮助可能需要它的其他人:
buildscript {
ext {
springBootVersion = '1.4.0.BUILD-SNAPSHOT'
querydslVersion = '4.1.3'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'jacoco'
apply plugin: 'groovy'
jar {
baseName = 'billing'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
jcenter()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven { url "https://repo.spring.io/libs-snapshot" }
maven { url "https://repo.spring.io/libs-snapshot"}
maven {url "https://plugins.gradle.org/m2/"}
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')
compile "com.querydsl:querydsl-root:$querydslVersion"
compile "com.querydsl:querydsl-jpa:$querydslVersion"
compile "com.querydsl:querydsl-apt:$querydslVersion:jpa"
compile 'org.codehaus.groovy:groovy-all:2.4.1'
compile fileTree(dir: "libs/qbo-sdk-2.5.0", include: "*.jar")
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.spockframework:spock-core:1.0-groovy-2.4') {
exclude group: 'org.codehaus.groovy', module: 'groovy-all'
}
testCompile('org.spockframework:spock-spring:1.0-groovy-2.4') {
exclude group: 'org.spockframework', module: 'spock-core'
}
testCompile("junit:junit")
}
test {
reports.junitXml.destination = file('build/test-results/folder')
}
jacoco {
toolVersion = "0.7.0.201403182114"
}
jacocoTestReport {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
idea {
module {
sourceDirs += file('generated/')
generatedSourceDirs += file('generated/')
}
}
您是否在 Gradle 输出中看到您的 QClasses 正在生成?从您的错误来看,它似乎已经过了应该生成它们的地步。
我认为问题是您没有配置 JPAAnnotationProcessor
。这是为了方便 gradle 通过将 :jpa 附加到您的 querydsl-apt 依赖项来完成的。在 Maven 中,您应用插件 manually.
我的 build.gradle 中有以下与 querydsl 相关的内容。
idea {
module {
sourceDirs += file('generated/')
generatedSourceDirs += file('generated/')
}
}
[...]
compile "com.querydsl:querydsl-root:$querydslVersion"
compile "com.querydsl:querydsl-jpa:$querydslVersion"
compile "com.querydsl:querydsl-apt:$querydslVersion:jpa
idea 块只是在 IDEA 中自动配置生成的源目录,以便 in-IDE 构建正常工作。
编辑:
JPAAnnotationProcessor
输出如下所示。
Note: Running JPAAnnotationProcessor
Note: Serializing Supertypes
Note: Generating com.myclass.example.QMappedSuperClass for [com.myclass.example.MappedSuperClass]
Note: Serializing Entity types
Note: Generating com.myclass.example.QMyClass for [com.myclass.example.MyClass]
编辑:
我对 ewerk 插件不熟悉,所以我看了一下。它似乎正在尝试为您激活 JPAAnnotationProcessor。您可能需要根据文档 here 设置 JPA 标志,因为它默认为 false。
请参阅有关依赖性问题的评论线程。
编辑:对于 Gradle 4.6+,您可以使用 annotationProcessor
语法。
api "com.querydsl:querydsl-root:$querydslVersion"
api "com.querydsl:querydsl-jpa:$querydslVersion"
annotationProcessor "com.querydsl:querydsl-apt:$querydslVersion:jpa"
如果有人想使用 Kotlin 和 Gradle kotlin dsl 执行此操作,请按照以下说明使用该设置执行此操作:
build.gradle.kts
plugins {
[...]
id("org.jetbrains.kotlin.kapt") version kotlinVersion
}
dependencies {
[...]
compile("com.querydsl:querydsl-core:$queryDslVersion")
compile("com.querydsl:querydsl-jpa:$queryDslVersion")
kapt("com.querydsl:querydsl-apt:$queryDslVersion:jpa")
}
请注意,在 Kotlin 1.2.20 中修复 Kapt 错误之前,您可能需要为 Gradle 使用 Java 8。