由以下原因引起:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
java 和 slf4j 的一些问题
使用想法制作项目,没关系。但是如果我尝试用 gradle 制作罐子,我会遇到一些问题。
build.gradle
group 'test.test'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile 'org.slf4j:slf4j-api:1.7.20'
compile 'ch.qos.logback:logback-classic:1.1.7'
}
jar {
manifest {
attributes 'Main-Class': 'Test'
}
}
Test.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
LOGGER.info("info");
}
}
航站楼:
gradle build
java -jar target/HttpServer-1.0-SNAPSHOT.jar
输出:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at HttpServerHH.Main.<clinit>(Main.java:15)
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
我试过用gradle/maven(mvn包)同样的问题。它在类路径中找不到 Logger 和 LoggerFactory 的一些原因。
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
compile 'ch.qos.logback:logback-core:1.1.6'
compile 'ch.qos.logback:logback-classic:1.1.6'
compile 'org.slf4j:slf4j-api:1.7.18'
}
JVM 无法在类路径上找到依赖项,因为它们显然不在类路径上。默认情况下 Gradle 和 Maven 只将你的 类 添加到一个 jar 中,你必须使用 -cp
参数手动指定依赖项的路径。如果你想构建一个 fat jar,你可以使用 ShadowJar with Gradle and Shade 和 Maven。
感谢 Michael 记得 fat jar。在你的评论试图 google: "gradle build fat jar" 并且它修改了我的 build.gradle
之后
jar {
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes 'Main-Class': 'Test'
}
}
java 和 slf4j 的一些问题 使用想法制作项目,没关系。但是如果我尝试用 gradle 制作罐子,我会遇到一些问题。
build.gradle
group 'test.test'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile 'org.slf4j:slf4j-api:1.7.20'
compile 'ch.qos.logback:logback-classic:1.1.7'
}
jar {
manifest {
attributes 'Main-Class': 'Test'
}
}
Test.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
LOGGER.info("info");
}
}
航站楼:
gradle build
java -jar target/HttpServer-1.0-SNAPSHOT.jar
输出:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at HttpServerHH.Main.<clinit>(Main.java:15)
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
我试过用gradle/maven(mvn包)同样的问题。它在类路径中找不到 Logger 和 LoggerFactory 的一些原因。
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
compile 'ch.qos.logback:logback-core:1.1.6'
compile 'ch.qos.logback:logback-classic:1.1.6'
compile 'org.slf4j:slf4j-api:1.7.18'
}
JVM 无法在类路径上找到依赖项,因为它们显然不在类路径上。默认情况下 Gradle 和 Maven 只将你的 类 添加到一个 jar 中,你必须使用 -cp
参数手动指定依赖项的路径。如果你想构建一个 fat jar,你可以使用 ShadowJar with Gradle and Shade 和 Maven。
感谢 Michael 记得 fat jar。在你的评论试图 google: "gradle build fat jar" 并且它修改了我的 build.gradle
之后jar {
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes 'Main-Class': 'Test'
}
}