我正在执行简单的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

当前回答

我也遇到过同样的问题,要解决这个问题,请从下面的url下载jar文件

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

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

其他回答

这个话题已经过时了。但它仍然可以满足我们的日子。

common -logging(也称为JCL)是一个已弃用的库。最后一个版本是在2014年曝光的

您应该避免在项目中直接添加对它的依赖。我认为大多数答案和公认的答案都不再真实。

在您的项目中使用新的替代方案(如slf4j或log4j2)是一种更好的方式,它们扮演着与jcl相同的角色。原因和动机是另一个大话题,不是针对这个范围的问题。

如果您的应用程序使用log4j2,并且遇到错误,请添加依赖项:

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-jcl</artifactId>
  <version>2.y.z</version>
</dependency>

如果你更喜欢slf4j,(在之前的评论/回复中已经提供了)使用:

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

如果你使用Spring,很可能在依赖树中有:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jcl</artifactId>
</dependency>

这也解决了问题。

在示例中,我故意跳过了某些版本,它们很快就会被弃用,请参阅官方Maven存储库。

在某些情况下,您根本不应该使用版本属性,而宁愿使用来自BOM文件的依赖项。Spring就是一个例子。

如果你在Android上运行这个,那么注意显然是java。在Android上beans包不完整。尝试在Android上修复它,请尝试以下方法:

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

源1源2

我很抱歉,因为我意识到这并没有完全回答这个问题,尽管这个SO页面在搜索android生成的NoClassDefFoundError:失败的:beanUtils错误决议时出现了很多。

将作用域设置为编译对我来说很有用

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

在我的例子中,我正在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已经丢失。

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