为什么我在ECLIPSE中引用了库并在build.gradle中指定了依赖项,却得到了“java.lang.NoClassDefFoundError”?

lmyy7pcs  于 2022-09-21  发布在  Eclipse
关注(0)|答案(1)|浏览(127)

对于org/apache/commons/compress/archivers/tar/TarArchiveInputStream抛出错误,如here所示。

我在eclipse中引用了这个库(如here所示)

这种依赖关系也在build.gradle中有所规定。Gradle文件的内容:

plugins {
    id 'org.spongepowered.plugin' version '0.9.0'
}

group = pluginGroup
version = pluginVersion

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

dependencies {
    compileOnly 'org.spongepowered:spongeapi:7.2.0'
    annotationProcessor 'org.spongepowered:spongeapi:7.2.0'
    compile 'org.apache.commons:commons-compress:1.21'
}

sponge.plugin.id = pluginId

Eclipse也不会标记任何错误。像tarInput.getNextTarEntry()这样的代码行以正确的颜色显示,没有红色下划线,而且eclipse甚至会自动完成Commons-Compress中找到的方法的名称。

假设eclipse似乎正在正确地处理依赖项,并且考虑到运行./gradlew build会导致成功构建,因此我不知道为什么会出现java.lang.NoClassDefFoundError错误。

vof42yt1

vof42yt11#

@Nitind帮了忙。我专注于运行时,发现问题出在我的build.gradle文件上(尽管构建成功了!)。我将其更改为以下内容,错误已消失:

buildscript {
        repositories {
                mavenCentral()
                }
}

plugins {
    id 'org.spongepowered.plugin' version '0.9.0'
}

apply plugin: 'java'

group = pluginGroup
version = pluginVersion

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

dependencies {
    compileOnly 'org.spongepowered:spongeapi:7.2.0'
    annotationProcessor 'org.spongepowered:spongeapi:7.2.0'
    compile 'org.apache.commons:commons-compress:1.21'
}

jar {
        from configurations.compile.collect { zipTree it }
}

sponge.plugin.id = pluginId

相关问题