【问题标题】:Java: Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactoryJava:线程“主”java.lang.NoClassDefFoundError 中的异常:org/slf4j/LoggerFactory
【发布时间】:2012-09-17 23:26:13
【问题描述】:

我有一个项目结构为

myproject/
         moduleA/
         moduleB/
         moduleC/

myproject 具有pom.xml

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.0.3</version>
            <scope>provided</scope>
        </dependency>

现在moduleC 需要moduleB 代码,因此它将依赖项引用为

       <dependency>
            <groupId>com.org.myproject</groupId>
            <artifactId>moduleB</artifactId>
            <version>${project.version}</version>
        </dependency>

但是当我在moduleC 中执行课程时,它会抱怨

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
......
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

当我的 moduleC 类执行 moduleB 代码时会发生这种情况。

我做错了什么?我该如何解决这个问题?

【问题讨论】:

  • 如何打包二进制文件以及如何执行它们?给定的pom.xml 仅描述了编译时依赖项——而不是二进制文件的打包方式。错误消息通常是类路径问题。所以JVM在classpath上找不到LoggerFactory类的logback实现。

标签: java logging slf4j


【解决方案1】:

您将依赖项设置为“已提供”,这意味着它们不会包含在您的运行时类路径中。您基本上是在告诉 Maven 您将在运行时提供这些文件,因此它们可以在那里进行编译,但除非您手动将它们放入类路径中,否则它们在您运行时将不存在。

查看此处:http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope,了解有关每个范围级别的更多信息。

如果你什么都不指定,那么范围将被编译:

编译是默认范围,如果没有指定则使用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖项会传播到相关项目。

所以你可以省略你的作用域标签或显式添加它作为编译,当你运行你的应用程序时,依赖项将包含在运行时类路径中。

【讨论】:

    【解决方案2】:

    根据@Dave 的评论,我确实在我的pom.xml 中添加了以下内容,一切都开始照常进行

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.6</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.0.6</version>
            </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 2016-11-28
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多