我正在执行简单的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
这个话题已经过时了。但它仍然可以满足我们的日子。
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就是一个例子。
这个话题已经过时了。但它仍然可以满足我们的日子。
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就是一个例子。