【问题标题】:Getting java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory exception获取 java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 异常
【发布时间】:2010-12-05 19:41:03
【问题描述】:

我正在执行 spring 的简单依赖注入程序并得到这个异常。 我已经包含了 common-logging1.1.1.jar 和 spring.jar 文件。你能帮忙吗?

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:119)
    at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:55)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:77)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
    at com.client.StoryReader.main(StoryReader.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 6 more

【问题讨论】:

  • 首先,仔细检查您的类路径是否确实正确。其次,尝试打开 jar 并检查它是否确实包含 org.apache.commons.logging.LogFactory 类。最后,尝试通过在类加载器中设置断点进行调试。
  • 以下所有建议commons-logging 的答案都是倒退。请改用jcl-over-slf4j
  • 在 Android 中添加 testCompile 'commons-logging:commons-logging:1.1.1' 到 app.gradle

标签: java noclassdeffounderror


【解决方案1】:

尝试彻底清理应用程序的目标/部署目录,以摆脱任何陈旧的库 jar。重新构建并检查 commons-logging.jar 是否实际放置在正确的 lib 文件夹中。当您为应用程序构建库时,它可能不包括在内。

【讨论】:

    【解决方案2】:

    我已经包含了 common-logging1.1.1.jar 和 ...

    您确定 JAR 文件的名称拼写正确吗?我认为它可能应该是commons-logging-1.1.1.jar(注意名称中额外的-)。还要检查目录名是否正确。

    NoClassDefFoundError 总是表示找不到类,所以很可能你的类路径不正确。

    【讨论】:

    • NoClassDefFoundError 也可能是由其他极端情况引起的,例如当类初始化程序在晦涩的情况下失败时。
    • 此外,如果他因为类实例化失败而得到 NoClassDefFoundError,那么他应该首先得到一个 ExceptionInInitializerError 异常(当然,除非它被静默捕获)。
    • 别忘了“s”commons-logging-1.1.1.jar
    • @GlennLawrence 谢谢,修正了名称。
    【解决方案3】:

    只需检查 commons-logging.jar 是否已添加到您的库和类路径中。我遇到了同样的问题,就是因为这个。 正法-

    【讨论】:

      【解决方案4】:

      我通常将类路径分配给一个变量,然后对其进行验证。我写了一个小的 ruby​​ 脚本,我将它包含在我的启动脚本中,validates the classpath before launching java。在 JVM 启动之前验证类路径为我节省了大量时间来解决这些类型的问题。

      【讨论】:

      • 您应该考虑改用 Maven 等工具。
      【解决方案5】:

      我也遇到了同样的问题,要修复,请从下面的 url 下载 jar 文件

      http://commons.apache.org/logging/download_logging.cgi

      并复制到您的 lib 文件夹,将解决您的问题。

      【讨论】:

      • 这对我不起作用,即使在类路径中添加了上述公共 jar
      • 对我来说都不是。这些库已损坏。这太令人沮丧了。
      【解决方案6】:

      http://commons.apache.org/logging/download_logging.cgi

      使用此网址下载jar文件并将它们包含在您的类路径中,问题将得到解决

      【讨论】:

        【解决方案7】:

        你只需下载commons-logging-1.1.2.jar 然后将此文件复制到库中

        终于成功了。

        【讨论】:

          【解决方案8】:

          我遇到了同样的问题,只需将commons-logging.jar 添加到类路径即可解决。

          【讨论】:

            【解决方案9】:

            通过添加 commons-logging.jar 解决问题

            Imp 文件是,

            antlr-runtime-3.0.1
            
            org.springframework.aop-3.1.0.M2
            
            org.springframework.asm-3.1.0.M2
            
            org.springframework.aspects-3.1.0.M2
            
            org.springframework.beans-3.1.0.M2
            
            org.springframework.context.support-3.1.0.M2
            
            org.springframework.context-3.1.0.M2
            
            org.springframework.core-3.1.0.M2
            
            org.springframework.expression-3.1.0.M2
            
            commons-logging-1.1.1
            

            【讨论】:

              【解决方案10】:

              如果您使用 maven 管理依赖项,请在 pom.xml 中添加以下行:

              <dependency>
                      <groupId>commons-logging</groupId>
                      <artifactId>commons-logging</artifactId>
                      <version>1.1.1</version>
              </dependency>
              

              【讨论】:

                【解决方案11】:

                你好朋友,如果你在hibernate代码中遇到任何not class found异常,那是jar文件的问题。这里主要有两个问题
                1.我的意思是说你工作的旧版本的休眠可能是 3.2 波纹管。所以如果你尝试高于 3.6 它会正常工作

                2.首先检查数据库连接。如果数据库正常工作,那么它们是你的程序或 jar 文件中的错误。

                如果您尝试使用 IDE 也无法正常工作,请检查这两个问题。我正在使用 netbeanside 6.9 版本。这里休眠工作正常。你没有从类中得到任何错误,没有发现异常..

                希望这篇文章对你有更多帮助

                【讨论】:

                  【解决方案12】:

                  commons-logging-1.1.1.jar 或 jcl-over-slf4j-1.7.6.jar al

                  如果您使用的是 maven,请使用以下代码。

                  <dependency>
                      <groupId>org.slf4j</groupId>
                      <artifactId>jcl-over-slf4j</artifactId>
                      <version>${slf4j.version}</version>
                  </dependency>
                  

                  【讨论】:

                  • 包含“jcl-over-slf4j”是唯一适合我的解决方案。我的依赖项中已经有了 commons-logging。
                  • 我正在使用带有 maven 的 spring-boot 版本 2.0.1.RELEASE。这也是唯一对我有用的解决方案。
                  【解决方案13】:

                  解决方法是添加 common-logging.x.x jar 文件

                  【讨论】:

                    【解决方案14】:

                    如果所有其他方法都失败了,就像我遇到的那样,请尝试将 commons-logging-x.y.z.jar 放入您的 Tomcat lib 目录中。它解决了问题!顺便说一句,我使用的是 Tomcat 6。

                    【讨论】:

                    • 命名事物?你在说什么?
                    【解决方案15】:

                    检查 jar 是否正确导入。我使用构建路径导入了它们。但它无法识别 WAR/lib 文件夹中的 jar。后来,我将同一个 jar 复制到 war/lib 文件夹。它现在工作正常。您可以刷新/清理您的项目。

                    【讨论】:

                      【解决方案16】:

                      嘿,我正在关注 tutorialpoint.com 上的教程。完成第 2 步 - 安装 Apache Common Logging API 后添加:您必须从在此步骤下载的文件中导入外部 jar 库到项目中。对我来说,文件名是“commons-logging-1.1.1”。

                      【讨论】:

                        【解决方案17】:

                        两个选项(至少):

                        1. 将 commons-logging jar 添加到您的文件中,方法是将其复制到本地文件夹中。

                        注意:链接 jar 可能会导致服务器出现问题,这可能是它被添加到构建路径但无法解决服务器启动问题的原因。

                        所以不要将 jar 指向外部文件夹。

                        或者...

                        1. 如果您真的不想在本地添加它,因为您在项目之间共享 jar,那么...

                        如果您使用的是 tc 服务器实例,则需要将 jar 作为外部 jar 添加到服务器实例运行配置中。

                        运行身份,运行配置...,{您的 tc 服务器实例},然后是类路径选项卡。

                        然后添加 commons-logging jar。

                        【讨论】:

                          【解决方案18】:

                          尝试添加此依赖项 org.apache.commons 公共执行 1.3

                          【讨论】:

                            【解决方案19】:

                            为我设置编译范围

                            <dependency>
                              <groupId>commons-logging</groupId>
                              <artifactId>commons-logging</artifactId>
                              <version>1.2</version>
                              <scope>compile</scope>
                            </dependency>
                            

                            【讨论】:

                            • 解决了我的情况。在运行 Mockito 测试用例时,我遇到了这个错误,并且解决了 pom.xml 中的这种依赖关系。
                            【解决方案20】:

                            添加 commons-logging.jar 或 commons-logging-1.1.jar 将解决这个问题...

                            【讨论】:

                              【解决方案21】:

                              如果您在 Android 上运行此程序,请注意 java.beans 包在 Android 上显然不完整。要尝试在 Android 上修复它,请尝试以下操作:

                              1. 下载android-java-air-bridge.jar(目前下载按钮在页面底部或direct link here
                              2. 将下载的 jar 复制到您的 [APPROOT]/app/libs 目录(或以任何其他方式链接 jar)
                              3. import *** 语句更改为air-bridge 语句。例如import javadz.beanutils.BeanUtils 而不是import org.apache.commons.beanutils.BeanUtils;
                              4. 清理并重建项目

                              source 1, source 2

                              我很抱歉,因为我意识到这并不能完全回答这个问题,尽管在搜索 android 生成的 NoClassDefFoundError: Failed resolution of: beanUtils 错误时,这个 SO 页面出现了很多。

                              【讨论】:

                                【解决方案22】:

                                我遇到了和你一样的麻烦。 最后我检查了拥有该类的apache版本。 我发现1.0.4版本有这个类。

                                尝试使用 1.0.4 版本而不是 1.1.X 或 1.2.X

                                我的依赖:

                                    <dependencies>
                                        <dependency>
                                            <groupId>org.jolokia</groupId>
                                            <artifactId>jolokia-core</artifactId>
                                            <version>1.3.5</version>
                                        </dependency>
                                        <dependency>
                                            <groupId>org.jolokia</groupId>
                                            <artifactId>jolokia-client-java</artifactId>
                                            <version>1.3.5</version>
                                        </dependency>
                                        <dependency>
                                            <groupId>commons-logging</groupId>
                                            <artifactId>commons-logging</artifactId>
                                            <version>1.0.4</version>
                                        </dependency>
                                    </dependencies>
                                

                                我的 Java 代码

                                J4pClient j4pClient = new J4pClient("http://localhost:8080/jolokia");
                                J4pReadRequest req = new J4pReadRequest("java.lang:type=Memory","HeapMemoryUsage");
                                req.setPath("used");
                                J4pReadResponse resp = j4pClient.execute(req);
                                System.out.println(resp.getValue());
                                

                                我的结果:

                                130489168
                                

                                还要仔细检查您的 maven 依赖项是否已正确导入。

                                【讨论】:

                                  【解决方案23】:

                                  当 jar 存在时,我遇到了同样的错误。没有解决方案奏效。有效的方法是从文件系统(从 .m2 目录)中删除 jar,然后清理 maven 项目。

                                  【讨论】:

                                    【解决方案24】:

                                    我在 Eclipse IDE 中遇到了同样的问题,我的解决方案是: 右键单击我的项目> 属性

                                    点击Maven并在Active Maven Project

                                    中写下:jar

                                    最后,应用并关闭

                                    【讨论】:

                                      【解决方案25】:

                                      在我的例子中,我在 eclipse 中测试了一个 Tomcat 应用程序并得到了这个错误。我通过检查.classpath 文件解决了这个问题并更正了这个条目:

                                      <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
                                          <attributes>
                                              <attribute name="maven.pomderived" value="true"/>
                                              <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
                                          </attributes>
                                      </classpathentry>
                                      

                                      org.eclipse.jst.component.dependency 属性已丢失。

                                      【讨论】:

                                        猜你喜欢
                                        • 2013-09-10
                                        • 2017-09-15
                                        • 1970-01-01
                                        • 2013-11-02
                                        • 1970-01-01
                                        • 2023-01-31
                                        • 2016-05-05
                                        • 2020-06-08
                                        • 1970-01-01
                                        相关资源
                                        最近更新 更多