前段时间看到有版友,因为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目录下还有一个配置。