Jiangshachina
同是Java爱好者,相逢何必曾相识!
a cup of Java, cheers!
::
首页
:: ::
联系
::
聚合
::
管理
::
34 随笔 :: 1 文章 :: 180 评论 :: 0 Trackbacks
<
2006年9月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
公告
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
(105)
App Server(1)
(rss)
Applet(1)
(rss)
Concurrency(2)
(rss)
CoreJavaTechTips(2)
(rss)
Database(9)
(rss)
db4o(2)
(rss)
Eclipse(2)
(rss)
English
(rss)
Generic(1)
(rss)
Java(15)
(rss)
JavaEE
(rss)
JavaOne(2)
(rss)
JavaSE(7)
(rss)
JavaTutorials(2)
(rss)
JUnit(1)
(rss)
Maven(5)
(rss)
MySQL(5)
(rss)
NetBeans(1)
(rss)
Oracle(2)
(rss)
Others(11)
(rss)
SunTechDays(3)
(rss)
Translation(13)
(rss)
UnitTest(1)
(rss)
Unix(4)
(rss)
翻译(13)
(rss)
随笔档案
(35)
2008年6月 (2)
2008年5月 (2)
2008年4月 (1)
2008年2月 (1)
2007年12月 (1)
2007年11月 (2)
2007年10月 (2)
2007年9月 (1)
2007年7月 (1)
2007年6月 (3)
2007年5月 (1)
2007年4月 (1)
2007年3月 (1)
2007年1月 (1)
2006年12月 (1)
2006年11月 (1)
2006年10月 (1)
2006年9月 (3)
2006年8月 (9)
文章分类
Concurrency
(rss)
Java
(rss)
Java SE
(rss)
Attach
搜索
积分与排名
积分 - 44391
排名 - 175
最新评论
1. re: 何时编写单元测试?(译)
嘿嘿,谢谢!
但我不敢以这句话的原创者自居*_* 它实际上是我在学习JUnit in Action时记下来的。
当时也与你一样,认为它说得很好,所以一直记在心头。
--Sha Jiang
2. re: 何时编写单元测试?(译)
单元测试程序就是应用程序的"客户",这句话我喜欢!^_^
--于翔
3. re: Rock Star 2008 -- Joshua Bloch(译)
Thanks :-)
--Sha Jiang
4. re: Rock Star 2008 -- Joshua Bloch(译)
很棒的工作,多谢
--dennis
5. re: Sun Tech Days 2007 -- Preview(原)
花开花又落,花落又花开...
--Sha Jiang
6. re: Sun Tech Days 2007 -- Preview(原)
评论内容较长,点击标题查看
--daming
7. re: Maven入门--较复杂的实例(原)
受益匪浅,收藏了
--chamborghini
8. re: Java Applet不适用于这样的应用?(译)[未登录]
>Sha Jiang
或>javapon
Java web start设置自动下载JRE的代码知道吗?(没有的话自动下载--本地的JRE或官方网上的JRE都可以)
--j2ee
9. re: Java Applet不适用于这样的应用?(译)
评论内容较长,点击标题查看
--Sha Jiang
10. re: Java Applet不适用于这样的应用?(译)[未登录]
@java.net
他所提到的消费版jre,大概是什么东东啊?免安装的那种吗?现在发布没?
--javapon
阅读排行榜
1. Maven入门--概念与实例(原)(3811)
2. Maven入门--较复杂的实例(原)(2655)
3. 使用Callable返回结果(译)(2275)
4. Rock Star 2008 -- Chet Haase(译)(2062)
5. Maven Weed(原)(2022)
6. Continuum入门--实例(原)(1991)
7. Rock Star 2008 -- Joshua Bloch(译)(1538)
8. 何时编写单元测试?(译)(1360)
9. 在Linux上安装Oracle10g(原)(1254)
10. Eclipse Weed(原)(1187)
评论排行榜
1. Maven Weed(原)(33)
2. Maven入门--概念与实例(原)(15)
3. Maven入门--较复杂的实例(原)(14)
4. Sun Tech Days 2007 -- Preview(原)(14)
5. Java Tutorials -- Generics(译)(13)
6. Sun Tech Days 2007 -- Day 2(原)(12)
7. Sun Tech Days 2007 -- Day 1(原)(10)
8. Continuum入门--实例(原)(10)
9. "Java"的由来(译)(9)
10. Java Applet不适用于这样的应用?(译)(9)
Continuum入门--实例(原)
Continuum入门--实例
本文虽然是Continuum的入门,但并不涉及Continuum的历史、下载与安装,这些内容可以到 Continuum的官方网站
(http://maven.apache.org/continuum/)
上了解。本文主要是以一个实例来阐述使用 Continuum的基本方法,而其中将使用的Maven工程是《Maven入门--概念与实例》中的实例(该文末有下载链接)。
注:转载时请注明原作者(jiangshachina)及出处(
http://www.blogjava.net/jiangshachina
)!
1 使用持续集成的好处
1.1 较早提交,经常提交
当开发者有规律性地提交文件时,持续集成将是最高效的。这就是意味着,不能提交不完全的代码,而是保持每次的改动不大,并且有很好的测试。这就可以更好地发现代码中的错误。
1.2 尽可能频繁的构建
频繁的Build可能要受到需要进行Build的工作量,以及进行Build工作的机器的性能的影响。但频繁的Build确实可以在开发人员转移注意力之前,尽可能早的发现错误。任何时候,任何一个提交的发生,Continuum都可以触发一个Build工作。这就意味着,这些Build工作应该更快,对于大量的Build工作或性能测试
1.3 创建一个稳定的环境
如果该Build不是其它开发,测试或产品环境中的一员,那么就可以避免定制JDK或其它的本地设置。如果在持续集成环境中,一个Build工作失败了,它会被从引起它的原因的修改中隔离出来,可以独立于运行环境来被使用。
1.4 运行干净的构建
快速、重复地构建是十分有用的,同样重要的是,不会由于旧的Build状态而发生失败的Build工作。有规律的考虑问题,就能得到干净的构建。Continuum默认就是进行干净的Build工作,未来它还可以允许开发者根据所选的时间表去请求一个初始的checkout。
2 实例
2.1 构想
本实例中需要持续集成的Maven工程是
《Maven入门--概念与实例》
中的Demo。使用的SCM是Subversion,即假定已经安装好了Subversion服务器和命令行客户端。我们的目标是使用Continuum对Maven工程demo(包括它的子工程)进行定时的持续集成。在本文的环境中有如下路径:
Continuum_Home
=D:\continuum
SVN_Repoitory
=E:\svn-repo\repository
Maven_Demo
=D:\maven\demo
Continuum_Maven
=D:\maven\continuum
// 该目录存放从Subversion下载的Maven Demo工程
2.2 初始化Subversion仓库
生成仓库:
svnadmin create
SVN_Repository
将Maven_Demo中的文件导入到仓库:
svn import Maven_Demo file:///
SVN_Repoitory
/demo -m "initial import demo"
重新下载仓库中的文件(在目录Continuum_Maven中运行如下命令):
svn checkout file:///
SVN_Repoitory
/demo demo
2.3 启动Continuum
假设此时已经安装了Continuum,但还没有运行它。要运行Continuum,可以双击
Continuum_Home
\bin\win32\run.bat
文件。对于第一次运行,会报一些错误:
……
WARN RDBMS - Error initialising derby schema : Schema 'SA' does not exist
ERROR 42Y07: Schema 'SA' does not exist
……
这种情况是正常的,因为Continuum后台使用的是Apache Derby数据库,在第一次运行之前,Continuum所需要的一些表和数据并不存在。但Continuum会初始化这些数据,当第2次启动Continuum时,这些错误就不会出现了。
Continuum服务器默认使用8080端口,如果之前该端口已被占用了,那么启动将失败。为了解决这个问题,我们需要修改jar文件
Continuum_Home
\apps\continuum-plexus-application-1.0.3.jar
中的
\conf\application.xml
文件。在该文件中查找
8080
(该值是唯一的),将改它为你所指定的端口值,本文是使用
8081
。经过上述过程后,Continuum服务器应该就可以正常启动了。下面将讨论Continuum的初始化配置。
2.4 初始化配置
在浏览器中使用地址
http://localhost:8081/continuum
登录Continuum控制台界面,如下图所示。
第一次登录Continuum后,需要进行一些配置。主要包括用户名/密码,工作区目录,Build输出目录以及公司信息。主要参数值如下所示:
Working Directory=D:\continuum\workspace
Build Output Directory=D:\continuum\workspace\output
Base URL=http://localhost:8081/continuum/servlet/continuum
// 这里的Company信息就借用此Blog站点的信息吧 *_*
Company Name=BlogJava
Company Logo=http://www.blogjava.net/images/logo.gif
Company URL=http://www.blogjava.net/
提交之后会出现如下画面(能够看到BlogJava的logo吗 *_*)
使用初始配置时设置的用户名及密码,就可以登录Continuum控制台了。
2.5 修改POM文件
在目录
Continuum_Maven
中执行如下命令,将Maven工程demo重新下载一次
svn checkout file:///
SVN_Repository
/demo demo
为了能被Continuum使用,且能与Subversion进行配合,需要对原来Maven工程中的POM文件进行修改。在每个POM中加入如下形式的语句:
<
project
>
……
<
ciManagement
>
<
system
>
Continuum
</
system
>
<
url
>
http://localhost:8081/continuum/servlet/continuum
</
url
>
<
notifiers
>
<
notifier
>
<
type
>
mail
</
type
>
<
address
>
jiangshachina@163.com
</
address
>
</
notifier
>
</
notifiers
>
</
ciManagement
>
<
scm
>
<
connection
>
scm:svn:file://localhost/
SVN_Repository
/
ProjectName
</
connection
>
</
scm
>
……
</
project
>
其中
ProjectName
要与POM当前所在工程名一致,如对于demo目录中的POM,
ProjectName
就是demo。这三个文件修改完毕之后,将它们都提交到Subversion服务器中,在
各个POM的当前目录
下执行命令:
svn commit pom.xml -m "my settings"
为了每个工程都可以被单独地运行,需要将整个demo及其子工程都安装到Maven仓库中,仅需要在
Maven_Demo
目录
下执行命令:
mvn install
2.6 添加Maven工程
登录到Continuum控制台后,点击左边“Add Project”组中的“Maven 2.0+ Project”。添加Maven2工程有两种情况:输入POM文件的URL;直接上传POM文件。前者适用于任何Maven工程;后者只能适用于没有module,即无子工程的Maven工程。由于本文使用的Maven工程demo中有两个子工程,所以只能使用前一种方法。
只需要加载顶层工程的POM文件,Continuum会自动加载其它moudel的POM文件。如上图所示,在M2 POM Url中输入:
file:///D:/maven/continuum/Demo/pom.xml
提交之后会看到如下的画面,即表示Maven工程已经被正确地加载到Continuum中了。
加载工程时,Continuum会将这些工程分别下载到
Working Directory
(见2.4节)中,并在
Build Output Directory
(见2.4节)中为每个工程
生成一个输出目录(开始只有一些log文件)。细心的朋友可能会发现,当上述工作完成之后,子工程“CE Maven Demo – App”和“CE Maven Demo – WebApp”的Build状态仍然是“Queued Build”。其实这是Continuum的一个Bug!Continnum在许多情况下不会自动刷新页面,需要手动刷新,即点击“Show projects”按钮。
但请不要使用浏览器中的refresh按钮,这样可能会重新提交你的请求。
这个Bug将在Continuum1.1中被修复
。当页面刷新之后,App和WebApp的Build状态将与Demo工程一致。
2.7 第一次Build
要Build任何一个Maven工程都十分简单,只需要点击某个工程右边“Build Now”按钮就可以Build该工程了。如我们点击demo工程对应的“Build Now”按钮,那么Continuum将按照demo中的POM文件执行Build工作。当Build完成后,可以显示本次Build的结果状态:成功,失败或错误(但请随时手动刷新页面^_^)。而Build次数也将从0改变为1。
点击上图表格中的列“Build”中的数字,将可以看到本次Build的详细过程,如下图所示。
2.8 设置时间表
前面已经谈过,持续集成就需要进行有规律的Build。即需要建立一个时间表,让持续集成服务器按照这个表进行Build。Continuum默认的时间表为:每天的每一个整点进行一次Build,即每天每隔一小时Build一次。我们也可以建立自己的时间表。点击Administration组中的“Schedules”按钮就可以发现当前默认使用的时间表,再点击“Add”按钮就可以添加新的时间表了,如下图所示。
这些参数项中最关键的是Cron Expression,它定义了Continuum执行Build的时间规则,它的语法规则请见参加资源[4]。上图中规定的时间表是:在每天的14:00-14:59之间,每分钟都要进行一次Build。勾选上Enable复选框之后,再提交,该Schedule就可以被使用了。
为了使用新建的Schedule,我们需要进入工程视图页面。点击“Show Projects”-->工程名(如CE Maven Demo),就可以看到该工程的详细信息,如下图所示。
在工程视图的Build Definitions项的Goals中可以发现,使用的Schedule就是“DEFAULT_SCHEDULE”时间表。再点击“Add”按钮,并在Schedule下拉列表框中,请选择刚刚新建的“My First Schedule”时间表(如下图所示),最后再提交后,新的时间表将被采用。
4 小结
根据前面的描述,应该可以对Continuum的使用有些感性上的认识了。由于Continuum是Maven的子项目,它内置支持Maven2,所以能够与Maven进行良好的集成使用。现时,Continuum也能够支持Ant与Shell脚本工程。使用Continuum+Maven,能够对工程进行干净与频繁的集成,可以提高Build效率并能促进工程的健康发展。
5 参数资源
[1]Continuum官方网站.
http://maven.apache.org/continuum/
[2]Continuum的参考文档.
http://maven.apache.org/continuum/guides/index.html
[3]Better Build with Maven.
http://www.mergere.com/m2book_download.jsp
[4]Cron Expression语法规则.
http://www.opensymphony.com/quartz/api/org/quartz/CronTrigger.html
posted on 2006-09-09 11:32
Sha Jiang
阅读(1991)
评论(10)
编辑
收藏
所属分类:
Maven
评论
#
re: Continuum入门--实例
2006-11-30 09:41
zhengoodman
辛苦了,这正是我所需要的。感谢作者能分享自己的经验。
回复
更多评论
#
re: Continuum入门--实例
2006-12-01 08:52
Sha Jiang
使用Continuum持续集成Maven确实十分方便,几分钟就可以成功。
但在实际的工作中,我是使用CruiseControl对Maven工程进行持续集成。
没办法,CC的人气太旺了,公司要求用它 :D
而且从功能上而言,CC仍然还是最好的,而且配置起来也不难。所以可能在较长的时间内,仍然是一种很好的选择。
回复
更多评论
#
re: Continuum入门--实例
2006-12-04 08:41
zhengoodman
有没有像Appfuse的ant配置文件那样的大型项目的maven2配置文件?现在网上关于maven2的都是些基本的操作。不知道有没有实际一点的例子?
回复
更多评论
#
re: Continuum入门--实例
2006-12-04 20:06
Sha Jiang
Maven应该目前并不流行,所以也没看到很好的样例。
我使用Maven也只是一些最的一段时间,目前使用的项目也不大。
回复
更多评论
#
re: Continuum入门--实例
2006-12-05 08:42
zhengoodman
非常感谢,以后还请多多关照。
回复
更多评论
#
re: Continuum入门--实例
2006-12-06 13:11
Sha Jiang
有问题,可以发邮件给我。
jiangshachina@163.com
jiangshachina@gmail.com
这两个邮箱,我每天都会打开多次 ^_^
我也只是Maven的初学者,大家一起讨论,一起进步嘛 :D
回复
更多评论
#
re: Continuum入门--实例
2007-06-28 16:56
sitinspring
好,先做个记号,有时间准备从马恩往Continuun转。
回复
更多评论
#
re: Continuum入门--实例
2007-06-28 16:58
sitinspring
不知你是否用过Maven的Eclipse plugin,有时间能否谈谈?
回复
更多评论
#
re: Continuum入门--实例
2007-06-29 08:40
Sha Jiang
> 好,先做个记号,有时间准备从马恩往Continuun转。
"马恩"?你是指Maven吗?
如果是指Maven的话,那么你这句话就很有问题了。
Maven是Build工具,类似于Ant(其实官方强烈反对大家对Maven的这种评价,他们认为Maven是一个工程管理工具)。Continuum是一个持续集成服务器,类似于CruiseControl,它是Maven项目的一个子项目,天然支持对Maven工程的持续集成。
回复
更多评论
#
re: Continuum入门--实例
2007-06-29 08:43
Sha Jiang
> 不知你是否用过Maven的Eclipse plugin,有时间能否谈谈?
我一直没有用过Maven的Eclpse插件。
如果你看了我其它文章,就知道我是通过将Maven配置为Eclipse的外部工具的方法而在Eclipse内部使用Maven的。
插件功能应该要强些,但对我个而言用处不大。
回复
更多评论
新闻频道
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-07-03 08:52 编辑过
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子技术博客
相关文章:
Maven入门--较复杂的实例(原)
Maven插件使用收集(原)
Maven Weed(原)
Continuum入门--实例(原)
Maven入门--概念与实例(原)
Powered by:
BlogJava
Copyright © Sha Jiang