天天看点

ActiveMQ从源码构建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/50462739

众多开源项目,我们一般都是直接拿过来用之而后快。不过我们也应该知道这些项目是如何从源码构建而来的。
           

既然代码是写出来的,就不能避免有BUG存在,话说没有完美的软件,也没有无漏洞的程序。

其实从源码构建,步骤不多,总的来说是件很简单的事情。了解了这样一个过程,以后需要修改源码或者在源码之上进行二次开发也知道怎么把源码构建成可运行程序,本文以ActiveMQ为例,简单概括一下如何从源码构建可应用程序。旨在抛砖引玉,为需要的同学们指个路。

因为最近项目中需要AMQ,所以又把AMQ翻出来用了,中间遇到点瓶颈问题,所以需要修改AMQ的源码来解决。

AMQ分为持久化和非持久化,AMQ的持久化现在默认的为kahadb,也可以配置使用数据库来持久化,还有LevelDB。这是它目前已经提供的几个可以直接配置的持久化方式。如果对AMQ进行过测试的同学应该都知道,AMQ如果配置了持久化,生产者的速度很低。但是实际业务开发中,很多时候我们又要保证数据不能丢失,所以我们必须要进行持久化操作。为了解决这个瓶颈问题,我们可以备采用第三方缓存或其他吞吐量高的持久化方式,所以我们通过修改AMQ的源码来增加这些支持。大家有想法或好的方案,不妨留言探讨。

其实如果有的同学还在做MQ选型,就直接选择RabbitMQ吧,这个综合方面都要比AMQ要好。AMQ只能说是老牌子,还是很吃香的,比较很多系统的需求AMQ足以应付。
           

如果对TPS要求非常高,不妨可虑下Apache的MQ新宠“Kafha”。如果不要求消息的持久化,ZeroMQ也是不错的选择,它的吞吐量就像一头猛兽,只是它不支持持久化。

AMQ是Java语言开发,本文以AMQ从源码构建做个简单步骤说明:

1、下载源码

大家可以从官网下载AMQ对应版本的源码,这里给一个地址:

http://apache.fayea.com/activemq/

下载源码文件 activemq-parent-5.13.0-source-release.zip 之后,解压到本地磁盘。我把它放在H盘的amq目录下。

2、打开CMD通过命令行的方式构建

cd H:\amq\activemq-parent-5.13.0

mvn -Dtest=false -DfailIfNoTests=false clean install

我在执行的时候,出现了一些jar包无法从maven仓库下载的错误,所以手动下载jar包(这个网站可以下载到很多jar:

http://www.java2s.com/Code/Jar/

http://maven.outofmemory.cn/

aether-util-0.9.0.M2.jar

xz-1.2.jar

plexus-archiver-2.4.4.jar

我下载缺少的jar包后,手工安装到到本地maven仓库,命令如下:

mvn install:install-file -DgroupId=org.eclipse.aether -DartifactId=aether-util -Dversion=0.9.0.M2 -Dpackaging=jar -Dfile=aether-util-0.9.0.M2.jar

mvn install:install-file -DgroupId=org.tukaani -DartifactId=xz -Dversion=1.2 -Dpackaging=jar -Dfile=xz-1.2.jar

mvn install:install-file -DgroupId=org.codehaus.plexus -DartifactId=plexus-archiver -Dversion=2.4.4 -Dpackaging=jar -Dfile=plexus-archiver-2.4.4.jar

mvn install:install-file -DgroupId=org.codehaus.plexus -DartifactId=plexus-io -Dversion=2.0.10 -Dpackaging=jar -Dfile=plexus-io-2.0.10.jar

mvn install:install-file -DgroupId=groovy -DartifactId=groovy-all-1.0-jsr -Dversion=03 -Dpackaging=jar -Dfile=groovy-all-1.0-jsr-03.jar

大家根据实际报错的jar包按这样操作安装到本地仓库即可。

我的网络不行,老是出现下载中断的情况,为此我倒腾好久。

总之,如果是网络问题就重复执行 mvn -Dtest=false -DfailIfNoTests=false clean instal 重试,如果是实在下载不下来jar包,就自己寻找后手工安装。如此反复,直到出现 BUILD SUCCESS 为止,如下:

………………
………………
[INFO] ActiveMQ :: Tooling ............................... SUCCESS [0.061s]
[INFO] ActiveMQ :: Memory Usage Test Plugin .............. SUCCESS [3.111s]
[INFO] ActiveMQ :: Performance Test Plugin ............... SUCCESS [5.169s]
[INFO] ActiveMQ :: StartUp/Stop Plugin ................... SUCCESS [4.619s]
[INFO] ActiveMQ :: Web ................................... SUCCESS [1.961s]
[INFO] ActiveMQ :: OSGi bundle ........................... SUCCESS [20.011s]
[INFO] ActiveMQ :: Blueprint ............................. SUCCESS [0.634s]
[INFO] ActiveMQ :: Web Demo .............................. SUCCESS [12.950s]
[INFO] ActiveMQ :: Web Console ........................... SUCCESS [10.347s]
[INFO] ActiveMQ :: Karaf Integration Tests ............... SUCCESS [3.049s]
[INFO] ActiveMQ :: Integration Test :: Spring 3.1 ........ SUCCESS [0.627s]
[INFO] ActiveMQ :: Assembly .............................. SUCCESS [38.243s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7:22.460s
[INFO] Finished at: Thu Dec 24 01:35:48 CST 2015
[INFO] Final Memory: 176M/711M
[INFO] ------------------------------------------------------------------------
H:\amq\activemq-parent-5.13.0>           

构建完成后,进入assembly/target 目录,其中的两个压缩文件就分别是Linux 和Windows文件,解压即可。(Linux是tar结尾文件,Win是zip结尾文件)

通过eclipse构建eclipse工程文件

命令:mvn eclipse:eclipse

然后就可以从eclipse导入工程了,代码修改后,再使用上面的构建命令构建即可。

下面是导入后的工程: