ClassNotFoundException:/ org / jdom2 / JDOMException编译项目后引发

时间:2019-06-11 22:13:27

标签: java

要对此进行开头,是的,我看过this thread,但是它没有帮助我。具体来说,虽然有很多人提到建筑物分支和环境分支之间可以存在不同的类结构,但没有人说过如何进行测试,更不用说修复它了。即便如此,我仍不确定这是否是根本原因。

我正在开发一个gradle项目,我想编译我拥有的项目,以在我的IDE Netbeans 8.2之外对其进行测试,在该项目中它可以正常工作。

当我尝试使用通常的java -jar命令运行程序时,它最初可以正常工作,直到程序遇到可以抛出JDOMException的类为止。然后我得到标题中描述的错误,然后是NoClassDefFoundError。

在Netbeans中,JDOMException.class下包含Dependencies>Compile for main>jdom2-2.0.6.jar>org.jdom2

build.gradle脚本显示为:

    apply plugin: 'java'

sourceCompatibility = 1.8

[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'


if (!hasProperty('mainClass')) {
    ext.mainClass = 'bikesys.hda.BikeSys'
}

repositories {
    mavenCentral()
    jcenter()
}

dependencies {

testCompile group: 'junit', name: 'junit', version: '4.10'
compile files('libs/jcalendar-1.4.jar')
compile group: 'org.jdom', name: 'jdom2', version: '2.0.6'


compile ("com.byteowls:jopencage:1.2.0")
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.0.1'
compile group: 'org.slf4j', name:'slf4j-api', version: '1.7.2'
compile group: 'ch.qos.logback', name:'logback-classic', version: '1.0.9'
compile group: 'ch.qos.logback', name:'logback-core', version: '1.0.9'
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6'

compile group: 'org.json', name: 'json', version: '20180813'

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
compile group: 'log4j', name: 'log4j', version: '1.2.17'
compile group: 'me.atlis', name: 'atlis-location-base', version: '1.0.0'    
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
compile group: 'me.atlis', name: 'nominatim-api', version: '1.0.0'
}

jar {
    manifest {
        attributes(
            'Main-Class': 'bikesys.hda.BikeSys'
         )
    }
}

我在Netbeans中使用Java JDK 1.8.0_202,并在JRE 1.8.0_211-B12中将其作为运行时环境。我已经找到了“必须将jdom2添加到运行时环境”的答案,但是我既不知道如何做到这一点,也不知道这是否是解决问题的一般方法。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

问题在于,默认情况下,构建普通的.jar文件时gradle不包括外部依赖项。我不得不指示gradle来构建“胖罐”文件。

我是通过更改

来完成此操作的
jar {
    ...
}

将我的gradle脚本的一部分写成以下说明:

jar {
    manifest {
        attributes(
                'Main-Class': 'bikesys.hda.BikeSys'
        )
    }
    from {
        configurations.compileClasspath.filter{ it.exists() }.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

确保将类路径(在我的情况下为bikesys.hda.BikeSys)编辑到您的主类。