【发布时间】:2014-01-10 16:36:01
【问题描述】:
我正在为声纳开发一个自定义插件,该插件会生成报告并将其导出为 PDF。为此,我使用了我们的一个具有 xercesimpl 2.9.1 依赖项的库。
此插件适用于 SonarQube 3.7.4,但是当我使用“mvn sonar:sonar”分析项目时,我在 SonarQube 4.0 中遇到 ClassNotFoundException
Caused by: java.lang.NoClassDefFoundError: org/apache/xerces/dom/DocumentImpl
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:389)
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)
at es.excentia.qalitax.report.service.OdtReport.getPdfOutputFile(OdtReport.java:103)
at es.excentia.sonar.odtreports.OdtReportPostJob.generateAndSaveReport(OdtReportPostJob.java:204)
at es.excentia.sonar.odtreports.OdtReportPostJob.executeOnIfLicenseOk(OdtReportPostJob.java:96)
at es.excentia.sonar.licenser.LicensedPostjob.executeOnIfEnabled(LicensedPostjob.java:29)
at es.excentia.sonar.plugins.common.DisableablePostjob.executeOn(DisableablePostjob.java:21)
看来sonar-plugin-api也需要xercesimpl,但是2.8.1版本,所以我尝试了一些东西
- 要排除所有 xercesimpl 依赖项,因为由于 jdk 1.4 还包含 xercesimpl -> 错误。获得强制转换异常。
- 在我的包 (v2.9.1) 中排除 xercesimpl 依赖项,只保留声纳依赖项 (2.8.1)。 -> 得到同样的错误。找不到类。
- 排除 sonar-plugin-api 中的 xercesimpl 依赖项并保留我的包的依赖项。 -> 现在插件 jar 包含 xercesimpl.jar 但我得到了同样的错误。我尝试在声纳之前激活“useChildFirstClassLoader”以加载 xercesimpl 2.9.1,但没有成功。
我已经阅读了几篇关于此的帖子,例如 "Xerces Hell"。我也读过它可能是 jvm problem ,但我已经用 jdk 6 和 7 进行了尝试,结果相同。
有什么想法吗?
更新
我完成了将 xercesimpl.jar 和 xml-apis.jar 复制到声纳网络服务器目录的工作: sonarqube-4.0\web\WEB-INF\lib
有什么办法可以避免吗?
我尝试修改我的 pom 依赖项以在我的插件 jar 中包含这两个库,但是当我运行分析时,我得到了同样的错误。
【问题讨论】: