最近花了两周的空闲时间帮朋友把wso2esb的4.0.3、4.6.0、4.7.0三个版本从源码编译出来了。以下是大概的一些体会。
wso2esb是基于carbon的。carbon是个基于eclipse equinox的基础整合OSGi框架容器。
所以,要编译wso2esb,需要先编译carbon,最后再编译esb。
wso2esb 4.0.3的源码是基于carbon2.3.3的,比如integration-test的jar,mvn中央库和wso2的maven库都找不到了,幸亏这个是用来做test的,不影响esb本身的编译。
carbon4.1.0 跟4.0.x比较:
1、像是原来放在orbit中的一些依赖,丢到kernel和dependence里去了
2、一些pom的配置也从上级挪到下级去了
3、加了hadoop的依赖
wso2esb4.7.0 和 4.6.0 实际用的很多组件还是4.0.0的,carbon-core的基准版本都是4.0.5 ,也就是说编译carbon4.1.0其实没用上。
用carbon4.0.5+esb4.6.0编译的时候,因为修改了carbon-core 4.0.5, 所以会影响到下次对esb4.7.0的编译。
在用户目录下的.m2\repository\org\wso2\carbon\wso2carbon-core 删掉4.0.5文件夹,这样下次编译时直接从maven库下载,而不是使用我们编译的版本。
kernel的core目录编译完的时候,其实carbon就编译好了。
kernel\distribution\product\modules\distribution\target 下有打包好的carbon zip文件。
carbon的大概源码结构是一个基线版本,比如4.0.0,
然后在上面打一些tag做分支版本,把tag版本号作为patch,添加到原来的项目pom依赖中去。
这样,carbon打包后的jar里,就会大部分是xxx-4.0.0.jar, 还有少量的xxxx-4.0.1.jar xxxxxx-4.0.5.jar 这些都是更新的版本。
打包的时候,根据pom里的依赖模块版本号,拿不同的源码来编译。 carbon依赖的第三方库,也基本都是以源码+自定义的版本号来这么管理的。
esb的打包是直接基于carbon core的zip文件的。
先从m2里拿到zip,解压了到platform\products\esb\4.7.0\modules\p2-profile\target下的tmpxxxx文件夹。
然后根据p2-profile下pom.xml中的描述,去拿各种需要的jar,包括各种依赖,合并到一起
然后打包成esb的最终文件结构,
再打包成zip放到distribution(同时也打包了docs),这个就是可以直接发布的版本。
打包过程会在C:\Users\kk\.m2\repository\org\eclipse\tycho\tycho-p2-runtime\0.13.0\eclipse下生成一个eclipse的内核,用来作为OSGi装配容器。
由于carbon和wso2esb都是插件机制,所有的东西都可以看做是一个小的插件模块,所以源码结构很零碎。而且carbon是所有的wso2产品的技术基础平台,对esb来说,很多东西都是多余的,但是wso2为了省事,没有去掉依赖关系,比如esb编译时需要编译hive和hadoop,这两个压根儿跟esb没关系,完全可以去掉依赖。
而且由于产品很多,近20个,导致carbon的每个模块的版本都很多,产品很少的哪些模块也都有各自的版本,这样交叉起来,依赖关系特别复杂,非常容易出错。所以,下载wso2esb源码后自己编译,主要就是理顺一些依赖关系。
前面分析的都是 wso2esb 的core和management console的源码。
developer studio的代码在:
http://svn.wso2.org/repos/wso2/tags/tools/ide/eclipse/developer-studio/3.2.0/esb/
这个就是一些eclipse的插件了。编译依赖于eclipse自身的一些东西。
wso2esb支持两种部署模式,独立启动模式,作为web应用启动模式。
4.0.0以后的版本,都建议使用独立启动模式。即直接作为容器运行。
想要嵌入到web server运行的话,比如tomcat或jboss,weblogic之类的话,可以参考编译出来的target\wso2esb-4.6.0-docs.zip,解压出来,看deployment_guide.html和webapp_deployment_guide.html两个文件的说明步骤。
其他的信息,可以参考官方文档:
http://docs.wso2.org/wiki/display/ESB460/Enterprise+Service+Bus+Documentation