使用gradle创建可运行的* .jar时出现NoClassDefFoundError:org / slf4j / LoggerFactory [英] NoClassDefFoundError: org/slf4j/LoggerFactory while creating a runnable *.jar with gradle

查看:2049
本文介绍了使用gradle创建可运行的* .jar时出现NoClassDefFoundError:org / slf4j / LoggerFactory的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是想在gradle和应用程序插件的帮助下为我的应用程序创建一个可运行的* .jar文件。



构建结束没有错误,清单文件是OK等等,但是当运行* .jar文件时会发生这种情况:

  java.lang.NoClassDefFoundError :org / slf4j / LoggerFactory 
在main.Launcher。< clinit>(Launcher.java:19)
引起:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory
at java .net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java) :331)
在java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1更多
线程main中的异常
进程已完成退出代码1

很明显我错过了这个库,但是它被指定:



build.gradle

  group'Comparator'
version'0.9'

apply plugin:'java'
apply plugin:'application'

mainClassName =main.Launcher

compileJava {
//在单独的守护程序进程中启用编译
options.fork = true
//启用增量编译
options.incremental = true
}

存储库{
mavenCentral()

}

依赖关系{
testCompile组:'junit',名称:'junit',版本:'4.11'
// GraphStream核心
编译组:'org.graphstream',名称:'gs-core',版本: '1.3'
// GraphStream
// UI
编译组:'org.graphstream',名称:'gs-ui',版本:'1.3'
// GraphStream
// algo
编译组:'org.graphstream',名称:'gs-algo',版本:'1.3'
// Jena
// https:// mvnrepository.com/artifact/org.apache.jena/jena-arq
co mpile group:'org.apache.jena',name:'jena-arq',version:'2.13.0'
compile group:'org.apache.jena',name:'jena-querybuilder',version :'2.13.0'

// Log
编译组:'org.slf4j',名称:'slf4j-api',版本:'1.7.21'

编译组:'ch.qos.logback',名称:'logback-classic',版本:'1.0.9'
编译组:'ch.qos.logback',名称:'logback-core ',版本:'1.0.9'
// https://mvnrepository.com/artifact/org.jgrapht/jgrapht-core
编译组:'org.jgrapht',名称:'jgrapht- core',version:'0.9.2'
编译组:'org.jgrapht',名称:'jgrapht-jdk1.5',版本:'0.7.3'
编译组:'org。 jgrapht',name:'jgrapht-ext',version:'0.9.2'
// CSV解析器
编译组:'com.univocity',name:'univocity-parsers',version:' 1.0.0'

// https://mvnrepository.com/artifact/c om.google.guava / guava
编译组:'com.google.guava',名称:'guava',版本:'11 .0.2'


}

jar {
manifest {
attributes'Main-Class':mainClassName,
'Class-Path':configurations.runtime.files.collect {$ it.name } .join('')
}
}

创建的清单如下:

 清单 - 版本:1.0 
主类:main.Launcher
类 - 路径:gs-core-1.3.jar gs-ui-1.3.jar gs-algo-1.3.jar jena-arq-2.1
3.0.jar jena-querybuilder-2.13.0.jar slf4j-api-1.7。 21.jar logback-cla
ssic-1.0.9.jar logback-core-1.0.9.jar jgrapht-core-0.9.2.jar jgrapht-
jdk1.5-0.7.3.jar jgrapht-EXT-0.9.2.jar单义的解析器-1.0.0.jar区
AVA-11.0.2.jar的JUnit 4.12.jar pherd-1.0.jar mbox2-1.0.jar斯卡拉 - 天秤座
ry-2.10.1.jar commons-math-2.1.jar commons-math3-3.4.1.jar jfreechart
-1.0.14.jar jena-core-2.13.0.jar httpclie NT-4.2.6.jar jsonld-java的0.5
.1.jar HttpClient的缓存-4.2.6.jar libthrift-0.9.2.jar公地-CSV-1.0
的.jar公地lang3 -3.3.2.jar SLF4J-log4j12-1.7.6.jar的log4j-1.2.17.jar
Apache的耶拿 - 库 - 2.13.0.pom jgraphx-2.0.0.1.jar jgraph-5.13.0.0。罐子
jsr305-1.3.9.jar hamcrest核-1.3.jar jcommon-1.0.17.jar iText的-2.1.5
的.jar耶拿-IRI-1.1.2.jar xercesImpl 2.11。 0.jar httpcore-4.2.5.jar comm
ons-codec-1.6.jar jackson-core-2.3.3.jar jackson-databind-2.3.3.jar j
ena-tdb-1.1 .2.jar bcmail-jdk14-138.jar bcprov-jdk14-138.jar杰克逊-A
nnotations-2.3.0.jar JCL-过SLF4J-1.7.7.jar共享记录-1.1.1 .j
ar xml-apis-1.4.01.jar

请注意,它确实包括slf4j,但我仍然得到例外。
有什么想法吗?



谢谢!

解决方案

一段时间后,我来到(我认为是)解决方案。这对生成的类路径有不同的依赖关系是个大问题。从头开始生成项目并导入代码和资源证明是一个成功的构建。



如果您遇到相同的错误我提出相同的解决方案,只需从头开始重建项目。 / p>

是的,可能有更好的解决方案,但我在1个月内找不到它。


I'm just trying to create a runnable *.jar file for my application with the help of gradle and the application plugin.

Building ends with no errors, manifest file is OK etc etc, but when it comes to running the *.jar file this happens:

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at main.Launcher.<clinit>(Launcher.java:19)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more
Exception in thread "main" 
Process finished with exit code 1

It seems obvious that I am missing the library, but it is specified:

build.gradle

group 'Comparator'
version '0.9'

apply plugin: 'java'
apply plugin: 'application'

mainClassName = "main.Launcher"

compileJava {
    //enable compilation in a separate daemon process
    options.fork = true
    //enable incremental compilation
    options.incremental = true
}

repositories {
    mavenCentral()

}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    // GraphStream Core
    compile group: 'org.graphstream', name: 'gs-core', version: '1.3'
    // GraphStream
    //UI
    compile group: 'org.graphstream', name: 'gs-ui', version: '1.3'
    // GraphStream
    //algo
    compile group: 'org.graphstream', name: 'gs-algo', version: '1.3'
    // Jena
    // https://mvnrepository.com/artifact/org.apache.jena/jena-arq
    compile group: 'org.apache.jena', name: 'jena-arq', version: '2.13.0'
    compile group: 'org.apache.jena', name: 'jena-querybuilder', version: '2.13.0'

    // Log
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.21'

    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.0.9'
    compile group: 'ch.qos.logback', name: 'logback-core', version: '1.0.9'
    // https://mvnrepository.com/artifact/org.jgrapht/jgrapht-core
    compile group: 'org.jgrapht', name: 'jgrapht-core', version: '0.9.2'
    compile group: 'org.jgrapht', name: 'jgrapht-jdk1.5', version: '0.7.3'
    compile group: 'org.jgrapht', name: 'jgrapht-ext', version: '0.9.2'
    // CSV parser
    compile group: 'com.univocity', name: 'univocity-parsers', version: '1.0.0'

    // https://mvnrepository.com/artifact/com.google.guava/guava
    compile group: 'com.google.guava', name: 'guava', version: '11.0.2'


}

jar {
    manifest {
        attributes 'Main-Class': mainClassName,
                'Class-Path': configurations.runtime.files.collect { "$it.name" }.join(' ')
    }
}

The created manifest is as follows:

Manifest-Version: 1.0
Main-Class: main.Launcher
Class-Path: gs-core-1.3.jar gs-ui-1.3.jar gs-algo-1.3.jar jena-arq-2.1
 3.0.jar jena-querybuilder-2.13.0.jar slf4j-api-1.7.21.jar logback-cla
 ssic-1.0.9.jar logback-core-1.0.9.jar jgrapht-core-0.9.2.jar jgrapht-
 jdk1.5-0.7.3.jar jgrapht-ext-0.9.2.jar univocity-parsers-1.0.0.jar gu
 ava-11.0.2.jar junit-4.12.jar pherd-1.0.jar mbox2-1.0.jar scala-libra
 ry-2.10.1.jar commons-math-2.1.jar commons-math3-3.4.1.jar jfreechart
 -1.0.14.jar jena-core-2.13.0.jar httpclient-4.2.6.jar jsonld-java-0.5
 .1.jar httpclient-cache-4.2.6.jar libthrift-0.9.2.jar commons-csv-1.0
 .jar commons-lang3-3.3.2.jar slf4j-log4j12-1.7.6.jar log4j-1.2.17.jar
  apache-jena-libs-2.13.0.pom jgraphx-2.0.0.1.jar jgraph-5.13.0.0.jar 
 jsr305-1.3.9.jar hamcrest-core-1.3.jar jcommon-1.0.17.jar itext-2.1.5
 .jar jena-iri-1.1.2.jar xercesImpl-2.11.0.jar httpcore-4.2.5.jar comm
 ons-codec-1.6.jar jackson-core-2.3.3.jar jackson-databind-2.3.3.jar j
 ena-tdb-1.1.2.jar bcmail-jdk14-138.jar bcprov-jdk14-138.jar jackson-a
 nnotations-2.3.0.jar jcl-over-slf4j-1.7.7.jar commons-logging-1.1.1.j
 ar xml-apis-1.4.01.jar

Note that it does include slf4j, but i am still getting the exception. Any ideas?

Thank you!

解决方案

After some time i've come to the (what i think is) solution. It was a big problem with different dependencies on the generated classpath. Generating the project from scratch and importing code and resources proved a succesfull build.

If you encounter the same error i propose the same solution, just rebuild the project from scratch.

Yes, there probably is a better solution but i could not find it in 1 month.

这篇关于使用gradle创建可运行的* .jar时出现NoClassDefFoundError:org / slf4j / LoggerFactory的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆