Gradle构建成功但本地依赖项在运行时抛出noClassDefFoundError

时间:2017-09-20 04:27:39

标签: java eclipse class gradle noclassdeffounderror

我正在编写一个从命令行运行的Java程序,并使用我编写的库来解析命令行参数。由于我的库不在maven存储库中,我在gradle中使用flatDir从本地/包含jar文件的目录中获取jar。这是我的build.gradle:

apply plugin: 'java-library'

repositories {
    jcenter()
    mavenCentral()

    flatDir(dirs: 'local')
}

dependencies {
    api 'org.apache.commons:commons-math3:3.6.1'

    implementation 'com.google.guava:guava:21.0'

    testImplementation 'junit:junit:4.12'

    // https://mvnrepository.com/artifact/javax.mail/mail
    compile group: 'javax.mail', name: 'mail', version: '1.4.1'

    // https://mvnrepository.com/artifact/org.mongodb/mongodb-driver
    compile group: 'org.mongodb', name: 'mongodb-driver', version: '3.4.2'

    // https://mvnrepository.com/artifact/org.jsoup/jsoup
    compile group: 'org.jsoup', name: 'jsoup', version: '1.7.2'

    // https://mvnrepository.com/artifact/log4j/log4j
    compile group: 'log4j', name: 'log4j', version: '1.2.12'

    // not in maven repository
    compile 'JModule:JModule:1.3.1'

}

task copyToLib(type: Copy) {
   from configurations.compile
   into 'dependencies'
}

build.dependsOn(copyToLib)

我的代码在eclipse IDE中运行正常,当我注释掉所有对JModule(我的库)的引用并使用我使用的所有其他库运行它时,从命令行运行正常。但是,当我使用JModule作为依赖项运行它时,会产生以下错误:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: com/jModule/def/CommandLogic
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: com.jModule.def.CommandLogic
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

我已经尝试删除对com.JModule.commandLogic类的引用,但这只会与其他JModule类产生相同的错误。为了清楚起见,我还没有导出到jar - 我只是使用" java"从命令行运行主类。命令。 jar也在eclipse文件夹"项目和外部依赖项"所以我假设这意味着它在我的类路径中,因为那里的其他罐子在我的程序中运行良好。

感谢任何帮助,谢谢

0 个答案:

没有答案