2014-01-10 87 views
0

我正在開發聲納定製插件,它生成報告並將其導出到PDF。爲此,我使用我們的一個庫,其中xercesimpl 2.9.1依賴關係。SonarQube 4.0和Xerces

該插件可用於SonarQube 3.7.4,但我發現一個ClassNotFoundException的與SonarQube 4.0當我分析了項目 「MVN聲納:聲納」

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) 

看來聲納插件的API也需要xercesimpl,但是2.8.1版本,所以我嘗試過的一些事情

  1. 要排除所有xercesimpl依賴,becau因爲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嘗試過,結果相同。

有什麼想法?

UPDATE

我沒有它的工作拷貝xercesimpl.jar和xml-apis.jar聲納Web服務器目錄: sonarqube-4.0 \網絡\ WEB-INF \ lib中

有什麼避免這種情況的方法?

我試圖修改我的pom依賴關係,將兩個庫都包含在我的插件jar中,但是當我運行分析時,我得到相同的錯誤。

回答

0

好的。這是我的錯誤。

似乎xerces庫不包含在SonarQube 4.x中了。用sonar-plugin-api 4.0重新編譯我的插件,maven找到xercesimpl並將其包含到我的插件中。然後,它工作正常。