贾斯珀与JBoss战斗

时间:2011-06-14 01:39:25

标签: java jboss jar jasper-reports

您好我正在尝试使用Jasper(4.0.2)报告与JBoss 6使用XML文件作为数据源。但是,由于我不能排除JBoss库,因此我排除了任何冲突的Jasper JAR。当我自己运行程序时一切都很好但是当我重新介绍JBoss库时,我在尝试执行任何与Jasper相关的任务时得到了这个:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/logmanager/Logger$AttachmentKey
    at org.slf4j.impl.Slf4jLoggerFactory.<clinit>(Slf4jLoggerFactory.java:31)
    at org.slf4j.impl.StaticLoggerBinder.getLoggerFactory(StaticLoggerBinder.java:33)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:240)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:208)
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:131)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:645)
    at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.<clinit>(JRXmlDigesterFactory.java:180)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:205)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:170)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:154)
    at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:111)
    at com.ehive.report.ejb3.RenderReportBean.execute(RenderReportBean.java:56)
    at com.ehive.report.ejb3.RenderReportBean.main(RenderReportBean.java:46)
Caused by: java.lang.ClassNotFoundException: org.jboss.logmanager.Logger$AttachmentKey
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    ... 14 more

它似乎抱怨的Log4j库在Jboss和Jasper中是相同的版本所以我对此异常感到困惑。

任何人都可以告诉我这是一般性兼容性问题还是有一种安全的方法来包含所有必需的库而不会发生冲突?

4 个答案:

答案 0 :(得分:1)

我正在使用你正在做的事情  *common-annotations,commons-beanutils-1.7.0,commons-collections-3.2.1,commons-digester-1.8,commons-logging-1.1.1jasper-compiler-jdt-5.5.23,jasperreports-3.7.2,slf4j-api-1.5.10,xmlbeans-2.3.0*和JSF + spring web app中的其他jar成功完成!

答案 1 :(得分:0)

我的Jasper报告中有类似的问题(尽管不一样)。由于与weblogic jar的类冲突,它甚至不会编译。我的解决方案是使用单独的ant目标编译jasper jrxml文件,该目标定义了单独的类路径。将jrxml编译成jasper文件后,我在应用服务器中运行它没有任何问题。

答案 2 :(得分:0)

你可以重新打包冲突的类,即log4j和Jasper w /类似jar jar链接(???)。这当然意味着你有两个log4j副本,虽然有不同的包名和一个自定义的jasper。但是,一旦完成,事情应该正常工作,除非在代码中有硬编码字符串引用log4j中的原始包名称。希望这不是一个问题:)

答案 3 :(得分:0)

所以问题在于包含了jasperreports-4.0.2.jar和jasperreports-javaflow-4.0.2.jar文件。一旦“javaflow”JAR被删除,所有部署都顺利进行。