我正在执行简单的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.jar或common -logging-1.1.jar将解决这个问题…

其他回答

我和你有同样的"麻烦" 最后,我检查了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依赖项是否导入良好。

common -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>

至少有两种选择:

将common -logging jar文件复制到本地文件夹中,添加到您的文件中。

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

所以不要把罐子指向外部文件夹。

还是……

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

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

去运行as,运行配置…,{你的tc服务器实例},然后是类路径选项卡。

然后添加common -logging jar。

解决方案是添加common-logging.x。X jar文件

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

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就是一个例子。