SonarQube 4.0和Xerces

我正在为声纳开发一个自定义插件,它会生成一个报告并将其导出为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尝试了同样的结果 .

任何的想法?

UPDATE

我做的工作是将xercesimpl.jar和xml-apis.jar复制到sonar webserver目录:sonarqube-4.0 \ web \ WEB-INF \ lib

有什么方法可以避免这种情况吗?

我试图修改我的pom依赖项以在我的插件jar中包含这两个库,但是当我运行分析时,我得到了同样的错误 .

回答(1)

3 years ago

好 . 这是我的错 .

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