首页 > 解决方案 > 运行 .jar 文件时 Maven 和 Class 未发现异常

问题描述

我开始使用简单的 hello world 应用程序学习 maven 并添加了一些依赖项:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>

并改为System.out.println("Hello World")

    var logger = LoggerFactory.getLogger(App.class);
    logger.info("Hello World");

然后我使用 maven 生命周期创建了 .jar 文件,当我尝试运行它时,我收到了这个错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at io.github.mat3e.App.main(App.java:11)
    Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at           java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at   java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 1 more

这是为什么?

标签: javamavenexception

解决方案


通过添加以下依赖项来使用 SLF4J 记录器 API 的推荐方法:

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

在您的 java 类中获取记录器实例,如下所示:

 private static final Logger logger = LoggerFactory.getLogger(App.class); 
 logger.info("Hello World");

应该工作正常。

查看文档


推荐阅读