Spring Boot:更改 gradle 依赖项后无法编译项目

时间:2021-04-13 06:30:37

标签: java spring-boot gradle intellij-idea

我的 Spring Boot 应用程序有一个相当奇怪的问题,它一直在让我绕弯子。

所以我在 Github 中有我的 Spring boot API,它使用 Gradle 来管理我的依赖项。如果我添加依赖项并编译项目,一切正常。但是,如果我决定不再需要所述依赖项并将其从我的构建文件中删除,我的项目将不再编译,声明它无法找到与我删除的内容无关的依赖项的包/符号。 >

有没有人见过这样的东西?仅供参考,我正在使用 Intellij。

举个例子,这是我当前的构建文件:

plugins {
    id "org.springframework.boot" version "2.4.2"
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
    id "com.commercehub.gradle.plugin.avro" version "0.21.0"
    id "idea"
}

group 'org.example'
version '1.0-SNAPSHOT'

java {
    sourceCompatibility = JavaVersion.VERSION_14
    targetCompatibility = JavaVersion.VERSION_14
}

ext {
    avroVersion = "1.10.1"
}

repositories {
    mavenCentral()
    jcenter()
    maven {
        url "https://packages.confluent.io/maven/"
    }
}

avro {
    createSetters = true
    fieldVisibility = "PRIVATE"
}

apply plugin: "war"

dependencies {
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

    implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '6.6'
    compile group: 'co.elastic.logging', name: 'logback-ecs-encoder', version: '0.5.2'
    compile group: 'com.amazonaws', name: 'aws-java-sdk', version: '1.11.860'
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-cache', version: '2.4.3'

//    compile 'redis.clients:jedis:3.5.1'

    implementation group: 'com.mashape.unirest', name: 'unirest-java', version: '1.4.9'

    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '3.0.0'
    compile group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'

    compile('org.springframework.boot:spring-boot-starter-data-elasticsearch')
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-mongodb', version: '2.3.3.RELEASE'
    compile group: 'org.springframework.data', name: 'spring-data-elasticsearch', version: '4.0.4.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '2.3.3.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.3.3.RELEASE'
    compile group: 'org.springframework.security', name: 'spring-security-oauth2-client', version: '5.4.0'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '2.4.2'
    compile group: 'org.springframework.kafka', name: 'spring-kafka', version: '2.6.5'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-oauth2-resource-server', version: '2.4.2'

    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.21'


    compile group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.11.2'

    compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
    compile group: 'org.openapitools', name: 'jackson-databind-nullable', version: '0.2.1'

    compile group: 'commons-io', name: 'commons-io', version: '2.6'
    compile group: 'org.apache.commons', name: 'commons-collections4', version: '4.4'
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.11'
    compile group: 'org.passay', name: 'passay', version: '1.6.0'
    compile group: 'com.google.guava', name: 'guava', version: '30.0-jre'

    // https://mvnrepository.com/artifact/com.auth0/java-jwt
    compile group: 'com.auth0', name: 'java-jwt', version: '3.12.0'


    compile group: 'io.confluent', name: 'kafka-schema-registry-client', version: '6.0.0'
    compile group: 'io.confluent', name: 'kafka-avro-serializer', version: '6.0.0'
    compile group: 'io.confluent', name: 'monitoring-interceptors', version: '6.0.0'
    compile(group: 'io.confluent', name: 'kafka-streams-avro-serde', version: '6.0.0') {
        exclude(module: 'log4j-over-slf4j')
    }

    compile "org.apache.avro:avro:1.10.1"
    implementation "org.apache.avro:avro:${avroVersion}"

    compileOnly 'org.projectlombok:lombok:1.18.12'
    annotationProcessor 'org.projectlombok:lombok:1.18.12'

    implementation 'com.amazonaws:aws-java-sdk-s3'
    implementation 'org.springframework.boot:spring-boot-starter-web'

    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompileOnly 'org.projectlombok:lombok:1.18.12'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'

    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

jar {
    manifest {
        attributes(
                'Main-Class': 'com.test.TestApplication'
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

test {
    useJUnitPlatform()
}

现在让我们假设我不想要 logstash,所以我将其删除,这发生在任何依赖项

    implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '6.6'

现在我的构建文件如下所示:

plugins {
    id "org.springframework.boot" version "2.4.2"
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
    id "com.commercehub.gradle.plugin.avro" version "0.21.0"
    id "idea"
}

group 'org.example'
version '1.0-SNAPSHOT'


java {
    sourceCompatibility = JavaVersion.VERSION_14
    targetCompatibility = JavaVersion.VERSION_14
}

ext {
    avroVersion = "1.10.1"
}

repositories {
    mavenCentral()
    jcenter()
    maven {
        url "https://packages.confluent.io/maven/"
    }
}

avro {
    createSetters = true
    fieldVisibility = "PRIVATE"
}

apply plugin: "war"

dependencies {
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

// REMOVED    implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '6.6'
    compile group: 'co.elastic.logging', name: 'logback-ecs-encoder', version: '0.5.2'
    compile group: 'com.amazonaws', name: 'aws-java-sdk', version: '1.11.860'
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-cache', version: '2.4.3'

//    compile 'redis.clients:jedis:3.5.1'

    implementation group: 'com.mashape.unirest', name: 'unirest-java', version: '1.4.9'

    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '3.0.0'
    compile group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'

    compile('org.springframework.boot:spring-boot-starter-data-elasticsearch')
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-mongodb', version: '2.3.3.RELEASE'
    compile group: 'org.springframework.data', name: 'spring-data-elasticsearch', version: '4.0.4.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '2.3.3.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.3.3.RELEASE'
    compile group: 'org.springframework.security', name: 'spring-security-oauth2-client', version: '5.4.0'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '2.4.2'
    compile group: 'org.springframework.kafka', name: 'spring-kafka', version: '2.6.5'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-oauth2-resource-server', version: '2.4.2'

    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.21'


    compile group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.11.2'

    compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
    compile group: 'org.openapitools', name: 'jackson-databind-nullable', version: '0.2.1'

    compile group: 'commons-io', name: 'commons-io', version: '2.6'
    compile group: 'org.apache.commons', name: 'commons-collections4', version: '4.4'
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.11'
    compile group: 'org.passay', name: 'passay', version: '1.6.0'
    compile group: 'com.google.guava', name: 'guava', version: '30.0-jre'

    // https://mvnrepository.com/artifact/com.auth0/java-jwt
    compile group: 'com.auth0', name: 'java-jwt', version: '3.12.0'


    compile group: 'io.confluent', name: 'kafka-schema-registry-client', version: '6.0.0'
    compile group: 'io.confluent', name: 'kafka-avro-serializer', version: '6.0.0'
    compile group: 'io.confluent', name: 'monitoring-interceptors', version: '6.0.0'
    compile(group: 'io.confluent', name: 'kafka-streams-avro-serde', version: '6.0.0') {
        exclude(module: 'log4j-over-slf4j')
    }

    compile "org.apache.avro:avro:1.10.1"
    implementation "org.apache.avro:avro:${avroVersion}"

    compileOnly 'org.projectlombok:lombok:1.18.12'
    annotationProcessor 'org.projectlombok:lombok:1.18.12'

    implementation 'com.amazonaws:aws-java-sdk-s3'
    implementation 'org.springframework.boot:spring-boot-starter-web'

    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompileOnly 'org.projectlombok:lombok:1.18.12'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'

    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

jar {
    manifest {
        attributes(
                'Main-Class': 'com.test.TestApplication'
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

test {
    useJUnitPlatform()
}

一旦我点击构建,我就会得到不相关的 logstash 编译错误,例如在各种类中:

java: package lombok does not exist
java: package org.openapitools.jackson.nullable does not exist
java: cannot find symbol
  symbol: class Getter
java: package org.springframework.data.domain does not exist
java: package org.openapitools.jackson.nullable does not exist

我试过重新导入我的项目,我已经删除了它并从 Git 中提取了一个新副本..我现在不知所措。如果有人遇到过这个问题,请告诉我,因为 google 现在让我失望了 :-/

非常感谢

编辑:请注意澄清,这似乎只在我让 Intellij 执行构建和运行时发生。

enter image description here

如果我将下面的内容切换到 Gradle,我没有问题,删除上述依赖项。但是,我希望让 Intellij 执行构建和运行。

编辑: 添加 gradle-wrapper.properties 以防万一

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip

zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

此外,按照下面的建议,我清除了 Intellij 中的缓存,这确实解决了问题,但是,一旦我删除了另一个依赖项,我又回到了上面的错误中。

第二次编辑

我不确定这是否重要,但我注意到因为 Lombok 是我检查注释设置的主要错误。

为什么要导入默认值和 gradle,这会导致任何问题吗?

enter image description here

0 个答案:

没有答案