前段時間看到有版友,因為RCP中找不到JAR包的問題,弄得焦頭爛額。由于沒有版友的開發環境,所以也很難給他提出錯誤原因在哪。授人以魚,不如授人以漁。今天我也遇到了一次了,就把我解決這個問題的思路寫出來,以供參考。
今天RCP加入一個新的模塊,其中需要用DOM4J讀入一個XML文件。進行的過程如下
1.將dom4j-1.6.jar復制到LIB目錄中
2.在maven的project.xml中加入了引用,這是為了在構建項目時,從jar倉庫自動將dom4j-1.6.jar復制到項目lib目錄。
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6</version>
<properties>
<plugin.library>true</plugin.library>
</properties>
</dependency>
3.在項目下maven update_libs ,將項目的lib庫更新一下(這時第1步手動復制可以不用,如果你是用ANT或手工構建項目的,第2、3步省略)
4. 在build.properties加入對dom4j-1.6.jar的引用
jars.extra.classpath = lib/commons-codec-1.3.jar,\
lib/dom4j-1.6.jar,\
lib/jboss.jar,\
這時已經可以在Eclipse中開發dom4j的程序了,。在Application環境下做了dom4j的測試,沒有問題。雖然沒有在.classpath中加入對dom4j-1.6.jar的引用,但項目屬性中的"java build path"->"Libraries"中的"Plug-in Dependencies"中已經有了對dom4j-1.6.jar的引用。
然而運行RCP程序進行測試時卻出現了錯誤,界面和console沒有提示錯誤原因。是程序錯誤嗎?于是將程序注釋至最簡,還是不行。難道是包沒找到的錯誤?哦忘記去看看錯誤日志了,于是轉到runtime-adminconsole\.metadata目錄下打開.log文件,果然是類未找到錯誤異常,如下:
java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader
但application下怎么能找到dom4j包呢,難道有什么地方的對dom4j我沒加上?于是打開plugin.xml,在它的圖形界面里翻了翻,發現runtime選項卡的classpath沒有加入對dom4j包的引用。runtime項顧名思議就是運行時的依賴項。在這里加上對dom4j包的引用后,錯誤解除。
加的方法有兩種,最簡單的通用圖形界面加,另外也可以通過META-INF/MANIFEST.MF文件來加。我習慣直接操作文件,當初為了加入dom4j包的引用在項目根目錄下翻了一遍,卻沒注意META-INF目錄下還有一個配置。