web-dev-qa-db-ja.com

Gradle 5へのアップグレード後のQuerydsl注釈プロセッサの問題

Mongo注釈付きエンティティからquerydslクラスを生成するGradleスクリプトがあります。これまでのところ機能していましたが、Gradle 5にアップグレードした後、次の問題が発生しました。

* What went wrong:
Execution failed for task ':myproject-common:compileQuerydsl'.
Annotation processor 'org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor' not found

以下のgradle.buildスクリプトを見つけてください。何が間違っているのでしょうか? Gradle 5で、コンパイル時にアノテーションプロセッサがデフォルトで使用されず、annotationProcessor宣言を追加する必要があるという変更があったことを読みましたが、依存関係に追加すると、同じエラーが発生します。

plugins {
    id 'org.springframework.boot' version '2.0.4.RELEASE'
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
repositories {
    mavenCentral()
}
apply plugin: 'Java'
apply plugin: 'io.spring.dependency-management'
jar {
    enabled = true
    baseName = 'myproject-common'
    version =  '0.0.1-SNAPSHOT'
}
// do no package commons into fat jar
bootJar {
    enabled = false
}
querydsl {
    library = 'com.querydsl:querydsl-apt:4.1.4'
    querydslSourcesDir = 'src/main/querydsl'
    springDataMongo = true
}
sourceCompatibility = 11.0
targetCompatibility = 11.0
sourceSets {
    main {
        Java {
            srcDirs = ['src/main/Java', 'src/main/querydsl']
        }
    }
}
dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.data:spring-data-mongodb")
    compile("org.springframework.boot:spring-boot-starter-data-rest")
    compile("org.springframework.boot:spring-boot-starter-security")
    compile("com.fasterxml.jackson.datatype:jackson-datatype-    jsr310:2.8.6")
    compile("com.google.guava:guava:23.0")
    compile("commons-io:commons-io:2.5")
    compile("org.aspectj:aspectjweaver:1.8.9")
    compile("org.Apache.commons:commons-lang3:3.5")
    compile("commons-collections:commons-collections:3.2.2")
    compile("org.javamoney:moneta:1.1")
    compile("com.fizzed:rocker-runtime:1.2.0")
    compile("com.querydsl:querydsl-core:4.1.4")
    compile("com.querydsl:querydsl-mongodb:4.1.4")
    compile("com.querydsl:querydsl-apt:4.1.4")
    compile("com.codepoetics:protonpack:1.15")

    testCompile("org.springframework.boot:spring-boot-starter-test")
    testCompile("org.assertj:assertj-core:3.7.0")
}
5
Michal Plewka

次の2つの依存関係を追加することで問題を解決できます。

annotationProcessor "com.querydsl:querydsl-apt:4.2.1:jpa"
annotationProcessor 'javax.annotation:javax.annotation-api:1.3.1'

2番目の依存関係は、それが私にとってうまくいかない隠された理由でした。

0
Michael

依存関係にcompile("com.querydsl:querydsl-apt:4.1.4")があると思います。 ドキュメント によると

実装の詳細はアノテーションプロセッサにとって重要であるため、アノテーションプロセッサパスで個別に宣言する必要があります。 Gradleはコンパイルクラスパスの注釈プロセッサを無視します

したがって、com.querydsl:querydsl-apt:4.1.4annotationProcessorスコープ内。

ところで、apiよりも implementation/compile スコープに切り替えることを検討してください。

0
madhead