【问题标题】:SonarQube 4.0 and XercesSonarQube 4.0 和 Xerces
【发布时间】: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版本,所以我尝试了一些东西

  1. 要排除所有 xercesimpl 依赖项,因为由于 jdk 1.4 还包含 xercesimpl -> 错误。获得强制转换异常。
  2. 在我的包 (v2.9.1) 中排除 xercesimpl 依赖项,只保留声纳依赖项 (2.8.1)。 -> 得到同样的错误。找不到类。
  3. 排除 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 中包含这两个库,但是当我运行分析时,我得到了同样的错误。

【问题讨论】:

    标签: java maven sonarqube


    【解决方案1】:

    好的。这是我的错。

    SonarQube 4.x 中似乎不再包含 xerces 库。使用 sonar-plugin-api 4.0 重新编译我的插件,maven 找到 xercesimpl 并将其包含到我的插件中。然后,它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2011-12-09
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      相关资源
      最近更新 更多