博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使用osgi内嵌jetty作为web服务器进行web开发时,遇到错误:

org.apache.commons.logging.logconfigurationexception:no suitable log constructor [Ljava.lang.class;@1ccf0ad for org.apache.commons.logging.impl.log4jlogger(caused by java.lang.noclassdeffounderror:org/apache/log4j/category)]

被这个问题困扰了一天,把包换来换去都不行,上网查了以后发现如下两个解决方法:

1、log4j和commons-log不兼容:出现这种情况的多是在使用Web容器时出现,例如Tomcat。
      解决的方法是删除掉$tomcat/commens/lib/下面的commens-log.jar文件

2、类包的加载顺序出错:出现这种情况多是各类包的加载顺序不正确所致,我并没有去深究一个工程启动时各类包的加载顺序是怎样的,不过我的错误就属于这种。
      解决的方法是查看是否将一些类包直接放到了%java_home%/jre/lib/ext文件夹的下面,如果有,删除后即可解决。

上述方法试了还是不行(那叫一个崩溃啊。。。),后来在老大的帮助下找到个帖子发现需要为apache.commons.logging.log手动指定一个实现类,可在vm arguments中添加如下配置:

-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog

就这样 ,让我纠结两天的问题解决了。