首页 > 解决方案 > java.lang.NoClassDefFoundError: antlr/collections/AST 设置配置时.all.transitive = false

问题描述

我正在使用 gradle 构建一个带有依赖项的胖 jar。原来的胖罐子是 75MB。通过设置以下内容,我能够将大小减小到 10MB:

configurations.all {
    transitive = false
}

但是,现在当我运行 gradle 构建时,我收到了一个新错误:

* What went wrong:
Execution failed for task ':service-common:metrics:checkstyleMain'.
java.lang.NoClassDefFoundError: antlr/collections/AST

这是我的新构建脚本:

buildscript {
    repositories {
        mavenCentral()
        jcenter()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "com.github.jengelman.gradle.plugins:shadow:5.2.0"
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:latest.release"
    }
}
plugins {
    id 'java'
    id 'maven-publish'
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'maven'
apply plugin: 'antlr'

checkstyleMain.exclude '**/**Test.java'
build_docker.enabled = false

repositories {
    mavenLocal()
    maven {
        url = 'https://repository.cloudera.com/artifactory/cloudera-repos/'
    }
    mavenCentral()
}

configurations.all {
    transitive = false
}

dependencies {
    antlr "org.antlr:antlr4:4.7.1"
    runtime "org.antlr4:antlr4-runtime:4.7.1"
    annotationProcessor 'org.projectlombok:lombok:1.18.6'
    implementation (
        'io.micrometer:micrometer-core:1.6.4',
        'org.slf4j:slf4j-api:1.7.5',
        'org.slf4j:slf4j-log4j12:1.7.5',
        'org.apache.logging.log4j:log4j-api:2.12.1'
    )
    compile (
        'com.fasterxml.jackson.core:jackson-core:2.10.4',
        'com.fasterxml.jackson.core:jackson-annotations:2.10.4',
        'com.fasterxml.jackson.core:jackson-databind:2.10.4',
        'org.apache.commons:commons-lang3:3.8.1',
        'org.json:json:20180813',
        'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.0',
        'com.google.guava:guava:19.0',
        'org.apache.kafka:kafka-clients:2.4.1',
        'org.yaml:snakeyaml:1.2+',
        'org.apache.logging.log4j:log4j-slf4j-impl:2.12.1',
        'org.apache.logging.log4j:log4j-core:2.12.1',
        'org.apache.logging.log4j:log4j-api:2.12.1'
    )
    compileOnly 'org.projectlombok:lombok:1.18.6'
    testImplementation (
        'org.mockito:mockito-core:2.22.0',
        'junit:junit:4.12',
        'org.assertj:assertj-core:3.19.0',
        'org.mockito:mockito-all:1.10.19',
        'com.google.code.findbugs:jsr305:3.0.2',
        'net.bytebuddy:byte-buddy:1.10.20'
    )
}

如您所见,我已尝试直接启用 antltr 插件。但我仍然得到类未找到错误。我错过了什么吗?

标签: javagradlebuild.gradleantlr

解决方案


我找到了答案。我不得不跑

gradle dependencies

查看需要哪些库来检查样式。我手动添加了这些库并且它有效。


推荐阅读