除了官方文档,网上关于Luntbuild的资料并不多,而Luntbuild+maven的更少,相比而言,使用Ant的比较多。笔者也是第一次使用,而笔者的项目是包含多个子项目的,在顶层目录中,有一个pom.xml文件,在该目录中有好几个子目录,其中每个目录也都包含了一个pom.xml,这样,普通的配置方法虽然可以实现正常的构建,但如果想要把每个子项目的各种报表(如emma,pmd等)也生成到构建制品中,并可以让用户可以直接通过luntbuild的web地址访问这些报告,则不能轻松实现。经过了一段时间的琢磨,查找了些资料后,总结出一种方法可以达到目的。
假定项目目录结果如下:
mydemo
├─ pom.xml
├─ subdemo1
│ ├─ pom.xml
│ └─ src
│ └─ ...
└─ subdemo2
├─ pom.xml
└─ src
└─ ...
上面顶层目录中的pom.xml里必须在<modules>标签中包含两个子项目,这样只要在顶层目录中执行mvn就可以同时运行子项目。
1. 配置project
进入luntbuild的Web管理页面,以管理员身份登录(默认为账号密码:luntbuild/luntbuild)。选择project标签,在最右侧右击<img alt="">
“新建”图标,填写好各项目内容(参照官方文档即可)。
2. 配置VCS模块
这里也请参照官方文档。
3. 配置Builder
新建一个Builder,builder type 选择 Maven2 builder,Name可以自己随便填写,这里填maven mydemo builder。Command to run Maven2填写运行mvn命令脚本的完整路径,如/home/admin/tools/apache-maven-2.2.0/bin/mvn。Directory to run Maven2 in表示要执行mvn命令的目录,相对于项目根目录,这里直接在项目根目录执行,所以空着。Goals to build填写maven2的构建目标,比如我们要编译、并使用插件生成各种报表,使用以下命令:compile emma:emma jxr:jxr pmd:pmd。其它使用默认配置。填写完后保存。
4. 编写一个简单的maven2插件
由于步骤3的配置虽然可以正常构建,但两个子项目生成的报表无法放到luntbuild的制品输出目录中(而是仅仅放到两个子项目目录中的target/site目录中),这样也就无法通过luntbuild的web来访问。所以这一步要写一个maven2插件,用于在上面的builder执行结束后把target/site中的内容复制到luntbuild的制品输出目录中,以便用户可以直接访问。
首先创建一个临时目录,在命令行下cd到该目录中,然后使用maven的archetype插件生成一个项目,执行以下命令:
mvn archetype:create -DgroupId=com.mycomapny.mojo -DartifactId=maven-copy-site-plugin -DarchetypeArtifactId=maven-archetype-mojo
成功后,到临时目录中可以看到生成了maven-copy-site-plugin目录,进入到里面的src\main\java\com\mycompany\mojo目录中,新建一个类CopyFolderMojo.java:
/**
* @author Jinggang.huangjg
*
* @goal copydirectory
*
* @description 复制指定的源目录到指定的目标目录
*/
public class CopyFolderMojo extends AbstractMojo {
/**
* 被拷贝的源目录路径
*
* @parameter expression="${project.build.directory}"
* @required
*/
private File inputDirectory;
/**
* 目标目录路径
*
* @parameter expression="${project.copyto.directory}"
* @required
*/
private File outputDirectory;
/**
* 当前项目名称
*
* @parameter expression="${project.name}"
* @required
*/
private String projectName;
public void execute() throws MojoExecutionException, MojoFailureException {
File in = new File(inputDirectory, "site");
if (!in.exists()) {
return;
}
File out = new File(outputDirectory, projectName);
if (!out.exists()) {
out.mkdirs();
}
in.renameTo(new File(out, in.getName()));
}
}
然后命令行cd到maven-copy-site-plugin目录的根目录下,执行mvn install命令,把该插件安装到本地库中。
5. 配置为两个子项目分别配置builder。
这两个builder专门执行刚刚写的插件,用于复制报表所在的目录(不进行其它编译之类的工作,因为之前那个顶层项目builder执行时会把各个子项目执行一遍。
在luntbuild的Builders标签页中,点击新建图标。builder type选择Maven2 builder,Name可以填SubDemo1 report。Command to run Maven2:/home/admin/tools/apache-maven-2.2.0/bin/mvn。
这里Directory to run Maven2 in要填:subdemo1。
Goals to build填:com.mycompany.mojo:maven-copy-site-plugin:1.0-SNAPSHOT:copydirectory,
Build properties中加入一行:project.copyto.directory="${build.artifactsDir}"
其余默认。填完保存。同样的,再新建一个builder,对subdemo2做类似配置。
6. 创建构建计划
点击Schedules标签,点击新建图标。Name可以填:demo schedule
Next build version可以填:demo-1.0.0
Trigger type选simple,Repeat interval(minutes):依实际情况配置(每多少分钟执行计划一次)
Associated builders:选择maven mydemo
Associated post-builders:选择SubDemo1 report和SubDemo2 report
Post-build strategy:选择post-build always,其余配置参考官方文档。
然后保存。
到这里,所有的配置都配置好了。然后每次自动构建后(也可以手动构建),在Home -> Builds中可以看到最近一次构建结果,点击Latest build列中的一个构建制品,查看详情,点击
Build Artifacts 可以看到各个子项目的报表内容,点击进去即可查看。