最近花了两周的空闲时间帮朋友把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

wso2esb源码编译总结的更多相关文章

  1. Android 5.0源码编译问题

    如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...

  2. Android stdio Apktool源码编译

    Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...

  3. SSH/SSL 源码编译安装简易操作说明

    环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...

  4. Hadoop源码编译过程

    一.           为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...

  5. World Wind .NET源码编译问题处理

    World  Wind  .NET源码编译问题处理 下载了World_Wind_1.4.0_Source源码(http://worldwindcentral.com/wiki/NASA_World_W ...

  6. 源码编译安装 MySQL 5.5.x 实践

    1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...

  7. Linux 安装node.js ---- 源码编译的方式

    一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...

  8. 烂泥:mysql5.5数据库cmake源码编译安装

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前也写过一篇有关mysql5.0源码编译的文章,该文章为<烂泥:mysql5.0数据库源码编译安装>.但是MySQL自5.5版本以后,就开 ...

  9. Centos7.X 源码编译安装subversion svn1.8.x

    说明:SVN(subversion)的运行方式有两种:一种是基于Apache的http.https网页访问形式:还有一种是基于svnserve的独立服务器模式.SVN的数据存储方式也有两种:一种是在B ...

随机推荐

  1. TCP和UDP的区别(转)

    TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  2. 认识Ant

    Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作. 一.            ...

  3. String和StringBuilder 的使用区别

    String 类有不可变性,每次执行操作时都会创建一个新的String对像,需要对该对象分配新的空间. StringBuilder 解决了对字符串重复修改过程中创建大量对象的问题.初始化一个Strin ...

  4. 探究foreach对于迭代变量的封装性的研究

    众所周知教科书上对于foreach之中的注释是在遍历过程中无法改变其遍历的元素例如声明一个数组 ,,,}; foreach(int m in ii){ m = ;//错误 “m”是一个“foreach ...

  5. java 去除重复项

    import java.util.Arrays; import java.util.HashSet; import java.util.Set; class Demo20 { public stati ...

  6. Java---文件夹及文件操作

    /** * 获取文件夹大小 * @param file File实例 * @return long */ public static long getFolderSize(java.io.File f ...

  7. Oracle自治事务

    定        义: Autonomous transactions are independent transactions that can be called from within anot ...

  8. NSData、NSString 、 NSFileManager

      1 NSData和NSMutableData的基本使用 1.1 问题 NSData类是IOS提供的用于以二进制的形式操作文件数据的类,NSData有两个常用的属性length和bytes,leng ...

  9. Cortex-M3寄存器等基础知识

    1.寄存器 CM3拥有R0~R15通用寄存器和一些特殊功能寄存器 R0~R12这些通用寄存器,复位初始值都是不可预料的 2.CM3有R0到R15的通用寄存器组 注:绝大部分的16位thumb只能访问R ...

  10. uva11630 or hdu2987 Cyclic antimonotonic permutations(构造水题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Cyclic antimonotonic permutations Time Li ...