背景:在项目开发过程中,很多应用都进行了模块划分,有的时候是jar包依赖,有的时候通过build path进行配置,搞清楚这部分有助于理解项目之间的关系。
1 tms项目开发
1.1 问题描述
项目结构如图:
这个项目是用dubbo方式进行通信:
tms_interface定义接口
tms_service是服务提供者
tms_web是服务消费者
这里tms_service中没有对tms_interface的jar包引用,为了使得service中的类不报错,刚开始我采用如下方式进行关联
这个时候eclipse是不会报错的,但是在运行程序的时候就会出现如下错误:
Caused by: java.lang.NoClassDefFoundError: szfs/tms/interfaces/service/ITrade
Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [szfs.tms.service.framework.facade.TradeImpl] for bean with name ‘trade’ defined in class path resource [service.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: szfs/tms/interfaces/service/ITrade
1.2 发现问题
以SVN原有文件做说明
检查tms_service的.project文件发现如下情况
而我的这些文件目录都是在G:\STSPro\partition-work\下面,所以肯定是这里导致程序在运行时候找不到java文件的
再观察项目的.classpath 文件,发现如下情况
这些文件关联是什么?
1.3 解决问题
原来这是程序采用linked folder的方式进行关联,单纯的去修改配置文件治标不治本,这一切都可以在eclipse中配置完成。
解决思路:先建立关联文件夹,然后在eclipse中添加相关联的文件夹。
添加关联文件夹:
ps:我这里添加了tms_interface_src 和tms_public_lib_src两个关联文件夹。和SVN中tms_interface tms_public 命名不同。
在父文件夹 右键——new folder ——Advance 关联需要关联的文件夹
效果如图:
配置buil path:
工程 右键 Build Path ——Configure Build Path——Source
效果图和前后对比图:
此时程序运行前和运行后都没有问题。
1.4 小结
eclipse中的配置改动 和.project .classpath文件的改动是一致的。
对于.project文件 当我在tms_service下面建立两个关联文件tms_interface_src 和tms_public_lib_src后,项目的目录结构就体现在.project文件上:
对于.project文件,当修改了build path的中的Source foleder配置,该配置就体现在.classpath文件上:
这里还发现:
总结就是:
工程目录的所有修改内容都和.project文件内容对应
build path 中内容的修改都和.classpath文件对应