2

我正在Eclipse中使用一個項目,該項目有兩個項目;一個產品和一個名爲views的插件。項目中新依賴項的NoClassDefFoundError

我加入SVNKit v1.3.5如在視圖pom.xml文件的依賴這樣:

<dependency> 
    <groupId>org.tmatesoft.svnkit</groupId> 
    <artifactId>svnkit</artifactId> 
    <version>1.3.5</version> 
    <scope>compile</scope> 
</dependency> 

執行Maven 2的工具後>生成的觀點插件Eclipse產品(從高速緩存),則由於它從repo1.maven.org/maven2/...etc下載SVNKit,所以構建成功。

我繼續並執行Maven 2 Tools>在視圖插件上生成OSGi Bundle Manifest和Copy Resources,並且構建成功。

然後,我運行Maven 2 Tools> Generate and Set Target Platform on the product,並設置運行配置,就像我對其他項目一樣。

該產品設置爲eclipse應用程序,並且插件驗證沒有錯誤。

我可以編寫代碼,它可以在編譯期間檢測類並且沒有問題;問題是程序在運行時需要類。

我運行的產品,它工作正常,直到我彈出窗口需要從SVNKit任何類文件的用戶界面彈出窗口。窗口根本不彈出,並在控制檯顯示:

!ENTRY org.eclipse.ui 4 0 2012-07-19 10:07:10.242 
!MESSAGE Unhandled event loop exception 
!STACK 0 
java.lang.NoClassDefFoundError: org/tmatesoft/svn/core/SVNException 
... 
Caused by: java.lang.ClassNotFoundException: org.tmatesoft.svn.core.SVNException 

我試圖解決這個問題,但也遇到了同樣的錯誤一遍又一遍,不管什麼「修理」我試過。類路徑是正確的,因爲它指向平方米回購因爲它沒有其它的依賴:

<classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/svnkit/1.3.5/svnkit-1.3.5.jar" sourcepath="M2_REPO/org/tmatesoft/svnkit/svnkit/1.3.5/svnkit-1.3.5-sources.jar"> 
    <attributes> 
     <attribute value="jar:file:/<details omitted>/.m2/repository/org/tmatesoft/svnkit/svnkit/1.3.5/svnkit-1.3.5-javadoc.jar!/" name="javadoc_location"/> 
    </attributes> 
</classpathentry> 
<classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/trilead-ssh2/build213-svnkit-1.3-patch/trilead-ssh2-build213-svnkit-1.3-patch.jar"/> 
<classpathentry kind="var" path="M2_REPO/org/tmatesoft/sqljet/sqljet/1.0.4/sqljet-1.0.4.jar" sourcepath="M2_REPO/org/tmatesoft/sqljet/sqljet/1.0.4/sqljet-1.0.4-sources.jar"/> 

任何建議,將不勝感激。 在此先感謝!

編輯:相比於其他比我在我引用的庫 SVNKit v1.3.5的清單文件很短:

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.7.0 
Created-By: 1.5.0_15-b04 (Sun Microsystems Inc.) 

其他圖書館有更多的信息,如出口包,捆綁軟件版本,軟件包名稱,導入軟件包等等......這可能是問題嗎?如果是這樣,我已經嘗試Google爲SVNKit 1.3.5提供了一個清單包文件,但一直沒能找到任何東西。

+0

您使用的是什麼樣的存儲庫?你有沒有嘗試一個maven clean? – 2012-07-19 15:50:23

+0

是的,我已經嘗試了一個乾淨的以及手動刪除M2回購。 repo1.maven.org/maven2是唯一正在使用的外部回購協議,其他協議是內部的,並且沒有SVNKit。 我也嘗試下載各種版本的SVNKit作爲jar文件,並使用命令mvn install將它們添加到maven:install ...等等,但是這也沒有任何區別。 – KilloWatt 2012-07-19 16:36:05

回答

0

嘗試將範圍更改爲<scope>provided</scope>而不是compile

默認範圍是編譯,這意味着依賴項在運行時不存在。爲此,您使用提供的範圍。更多關於Apache的Introduction to Maven Dependencies的maven依賴的範圍。

希望這可以解決您的問題。

+0

感謝您的建議,但在嘗試將其設置爲提供並運行Maven在項目中生成後仍然面臨同樣的問題。 – KilloWatt 2012-07-19 15:41:56

+0

如果有幫助,我在主帖的底部添加了更多信息。 – KilloWatt 2012-07-19 15:48:01

+5

這是不正確的。編譯依賴關係在所有類路徑中都可用。即這種依賴關係在編譯,運行時和測試類路徑中可用。 – pingw33n 2012-07-19 15:59:45