RCP项目依赖一个通用的java实现的公共库(单独的eclipse project), 这个公共library将通过class loader加载外部的class(实现库中的interface). 因此这个library项目不能变为eclipse plugin ,因为plugin 不能简单加载外部的class(因为eclipse classloader的层次关系)。
网上提到的解决方案使用上级bundle的class loader加载,没有测试过。但是如果只是对动态加载的class使用上层classloader, 这些动态加载进来的classloader不能被自身已静态加载的class使用。
后来想到利用OS的目录链接功能,将library 项目的output目录链接到rcp 项目的output目录,这样两个项目生成的class等输出文件就自动合并在一起了。通过测试,这样可以方便的调试library中的代码。
在测试中,发现eclipse project 项目输出目录的配置中也可以指定项目外部的目录,在创建新output目录时可以通过高级选项链接到已有的系统目录(如另一个项目的output目录)。这种方式更方便一些,而且适合任意eclipse支持的操作系统。
解决了合并两个项目的output后,调试就方便多了。但是部署是否还需要将library项目单独打包为jar文件后加载的rcp项目中呢。需要根据实际情况考虑。如果这个library需要单独发布,则需要单独打包(需要测试打包后的jar文件是否包括了rcp的输出内容,如果有则需要改变output目录里,重新打包)。或者rcp应用中自动包括了output目录下的内容,则发布rcp应用是可以不再需要library的jar。