Gradle 编译 QuerydslJava 失败

Gradle compile QuerydslJava failed

我正在使用 gradle、springBoot、querydsl 和 mongodb。 添加下一个 gradle 设置遵循 this article:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.9"
    }
}

apply plugin: 'com.ewerk.gradle.plugins.querydsl'

sourceSets {
    main {
        java {
            srcDir "$buildDir/generated/source/app/main"
        }
    }
}

dependencies {
    compile "com.querydsl:querydsl-mongodb:4.1.4"
    compileOnly "com.querydsl:querydsl-apt:4.1.4"
}

querydsl {
    springDataMongo = true
    querydslSourcesDir = "$buildDir/generated/source/app/main"
}

当我使用 gradle bootRun 启动项目时它工作正常,但是当我只使用 gradle clean build 时它在编译 querydsl 时失败。

FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileQuerydslJava'.
> Compilation failed with exit code 1; see the compiler error output for details.

/Volumes/DATA/notification-service/app/build/generated/source/app/main/net/platform/notification/domain/impl/entity/QNotification.java:76: error: cannot find symbol
    public QNotification(Path<? extends Notification> path) {
                         ^
  symbol:   class Path
  location: class QNotification
/Volumes/DATA/notification-service/app/build/generated/source/app/main/net/platform/notification/domain/impl/entity/QNotification.java:76: error: cannot find symbol
    public QNotification(Path<? extends Notification> path) {
                                        ^
  symbol:   class Notification
  location: class QNotification
/Volumes/DATA/notification-service/app/build/generated/source/app/main/net/platform/notification/domain/impl/entity/QNotification.java:80: error: cannot find symbol
    public QNotification(PathMetadata metadata) {
                         ^
  symbol:   class PathMetadata
  location: class QNotification
/Volumes/DATA/notification-service/app/build/generated/source/app/main/net/platform/notification/domain/impl/entity/QNotification.java:5: error: package com.querydsl.core.types.dsl does not exist
import com.querydsl.core.types.dsl.*;
^

为什么它在构建过程中失败而在 bootRun 之后工作正常?

问题出在 pmd 插件中。

我已经从我的构建中排除了 compileQuerydslJava 任务 ./gradlew clean build -x compileQuerydslJava 并且遇到了下一个错误

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:pmdQuerydsl'.
> 46 PMD rule violations were found. See the report at: file:///Volumes/DATA/notification-service/app/build/reports/pmd/querydsl.html

所以我为 pmd 插件指定了源集

pmd {
        sourceSets = [sourceSets.main]
    }

现在一切正常。