Jenkins持续集成学习及企业级应用

文档声明

该文档主体为去年末自主学习时总结,旨在为我司提供一套企业级持续集成解决方案。这篇文章现在看上去很稚嫩,但是当时花费了许多心血。希望将当时的学习心得拿出来与大家交流。该文档主要说明了jenkins持续集成部署的相关步骤,并着重实现了权限分组,邮件配置,插件配置的jenkins实现过程。对出现的问题进行解决,是一套持续集成的解决方案。

持续集成Continuous integration

提出

针对复杂度高的项目提出“早集成,常集成,频繁集成”来帮助项目在早期发现项目风险和质量问题

作用

 

减少风险

减少重复过程

任何时间、任何地点生成可部署的软件

增强项目的可见性

建立团队对开发产品的信心

概念

持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。

背景介绍,安装配置

Jenkins前身为Hudson,改名后被oracle收购,目前没有调解。都用于持续、自动的构建项目(持续集成),使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

选型优势

  1. 易于安装,只需部署到servlet容器(tomcat)上,无需数据库支持
  2. 易于配置,通过web可视化界面配置。
  3. 集成RSS/Email/IM-通过RSS发布构建结果,失败时email通知。
  4. 生成Junit/TestNG测试报告。
  5. 分布式构建测试

下载地址

Hudson的war包下载地址: http://mirrors.neusoft.edu.cn/eclipse/hudson/war/

Jenkins的war包下载地址: http://mirrors.jenkins-ci.org/war/

(下载后删除版本号,并确认JAVA与Tomcat安装正确)

启动jenkins的两种方式

          1.     cmd: java -jar D:/jenkins/jenkins.war

                     browser: http://localhost:8080/

          2.  将jenkins.war放入tomcat下webapps目录下,

                     browser: http://localhost:8080/jenkins

 

 

设置jenkins根目录

          1.  D:\apache-tomcat-6.0.43\conf目录下新建jenkins.xml文件 

<Context docBase="D:/jenkins/jenkins.war">
    <Environment name="JENKINS_HOME" type="java.lang.String"
        value="D:/jenkins/jenkins.war" override="true"/>
</Context>

          2.  D:\apache-tomcat-6.0.43\webapps\jenkins\WEB-INF\web.xml     

<env-entry>
    <env-entry-name>HUDSON_HOME</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>D:\jenkins</env-entry-value>
 </env-entry>

          3.  重启tomcat

或者设置环境变量Jenkins_HOME并重启计算机。

jenkins插件

          1.  browser: 系统管理-插件安装-已安装 。默认情况下,SVN与Maven插件安装完毕。

1.部署jenkins

连接192.168.0.11远程服务器,安装tomcat,将jenkins.war放入tomcat下webapps目录下。

启动tomcat。

 

2.本地配置服务器jenkins

打开浏览器,访问域名http://192.168.0.11:8080/jenkins/

此时在服务器端tomcat统计目录下生成jenkins文件。

 

3.系统设置

3.1安全配置

系统管理 – 启用安全 – 安全域 – Jenkins专有用户数据库 – 允许用户注册

使用插件Role Strategy

参考资料:http://blog.csdn.net/zhaolixin007/article/details/7751875

 

Admin用户具有所有权限,匿名用户和其他用户为只读权限。

当svn代码被提交时,jenkins会自动注册该svn用户的用户名密码,所以需要注册好svn有关人员的用户。方便邮件管理时使用。

系统设置:

管理项目/全局分组:

分配项目/全局角色:

 

至此我们配置出一套简单的权限管理方案。

3.2系统配置

3.2.1环境配置


 

3.2.2邮箱配置

3.2.2.1QQ邮箱配置

在邮箱中开启SMTP服务,默认端口为465或…

3.2.2.2企业163邮箱配置

163,126邮箱默认注册开启POP3和SMTP。

163的SMTP的服务器地址是smtp.163.com。(企业级邮箱不相同)详细配置在目录 5.

 

3.3插件配置

由于maven核心做的事情都是抽象的构建过程,很多实际的工作都是具体的插件来实现。所以很显然,maven以插件的方式集成。

安装插件findbugs(依赖analysis-core) Pmd  Codestyle  Violations等

在jenkins中需要安装版本对应的插件,否则提示可更新或者降到。

安装完毕插件需要在服务器重启tomcat。

3.3.1cmd命令

参考资料:http://www.cnblogs.com/zhangchuan210/p/3413811.html

3.3.2插件主要功能

findbugs

基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug。如NullPoint空指针检查、没有合理关闭资源、字符串相同判断错(==,而不是equals)等

Pmd

检查Java源文件中的潜在问题。主要包括:空try/catch/finally/switch语句块。

未使用的局部变量、参数和private方法。空if/while语句。过于复杂的表达式,如不必要的if语句等。复杂类。

Codestyle

检查Java源文件是否与代码规范相符。Javadoc注释,命名规范,多余没用的Imports,Size度量,如过长的方法,缺少必要的空格Whitespace,重复代码

安装插件后,在maven项目中配置pom.xml。

3.2.3插件pom配置

详见附录。

3.2.4测试结果

CMD测试(D: \workspace\com.sapphire)

mvn clean test

mvn findbugs:findbugs

mvn pmd:pmd

mvn checkstyle:checkstyle

4部署工程(以svn中sapphire  maven项目为例)

4.1基本配置

新建一个maven工程的软件项目,并关联。

基本信息:

4.2源码仓库配置

 

在第一次设置时,可能需要填写远程服务器访问用户名密码,这里我使用rensifei:******

验证成功后,可连接svn对应源码。

4.3触发器配置

 

例如,表达式中填写0,15,30,45 * * * *将使Hudson每隔15分钟就检查一次源码仓库的变

化。

语法所代表的含义:

minute

0~59

hour

0~23

day

1~31

month

1~12

week

0~7

0 * * * * 表示的就是每个小时的第0分钟执行一次构建。这里设置每天24点发送持续集成报告,jenkins每隔15分钟检测一次svn库源码是否更新,每更新一次,进行一次构建。

4.4目标配置

Pre steps可以添加构建前的批处理、ant等命令。

Goals and options: 构建需要执行的命令

MAVEN_OPTS: 可配参数,如 –Dmaven.test.skip=true,跳过测试。

具体配置项参考:

http://wenku.baidu.com/link?url=6QoE6Wa0E9isMDtRxvdV3FanSZxx_7vi8zbfyH_zwtfchhtPkjD6Xx-aLkaEE0EATHbZpCzeU45gAbitKaY8T3jUEERielzGbsWfuHBwb8e

 

5邮件配置

5.1安装插件…

安装完插件后,在 全局设置 邮件配置上方 与 工程设置 添加构建后操作 都产生新的配置项。

5.2配置stmp服务测试

 

说明:163企业smtp服务器。SSL协议端口465,163邮箱默认开启smtp服务。

5.3email ext全局变量配置

 

设置EMAIL EXT全局环境变量。

5.3.1$DEFAULT_CONTENT:

 1 <hr/>(本邮件为持续集成环境自动下发,请勿回复!)<br/><hr/>
 2 
 3 项目名称:&nbsp; &nbsp; $PROJECT_NAME<br/><hr/>
 4 
 5 构建编号:&nbsp; &nbsp; $BUILD_NUMBER<br/><hr/>
 6 
 7 源版本号:&nbsp; &nbsp; ${SVN_REVISION}<br/><hr/>
 8 
 9 构建状态:&nbsp; &nbsp; $BUILD_STATUS<br/><hr/>
10 
11 触发原因:&nbsp; &nbsp; ${CAUSE}<br/><hr/>
12 
13 版本变化:<br/>
14 
15 &nbsp; &nbsp; &nbsp; &nbsp; 上次成功: ${CHANGES_SINCE_LAST_SUCCESS, reverse=true}<br/>
16 
17 &nbsp; &nbsp; &nbsp; &nbsp; 上次失败:${CHANGES_SINCE_LAST_UNSTABLE, reverse=true}<br/><hr/>
18 
19 测试数量:${TEST_COUNTS}<br/>
20 
21 &nbsp; &nbsp; &nbsp; &nbsp; 失败数量:${TEST_COUNTS, var="fail"}<br/>
22 
23 &nbsp; &nbsp; &nbsp; &nbsp; 跳过数量:${TEST_COUNTS, var="skip"}<br/>
24 
25 <hr/><br/><br/>
26 
27 日志地址:<a href="${BUILD_URL}console">&nbsp; &nbsp; view console&nbsp; &nbsp; </a><br/><hr/><br/><br/>
28 
29 构建地址:<a href="$BUILD_URL">&nbsp; &nbsp; view build url&nbsp; &nbsp; </a><br/><hr/>
30 
31 变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>

 

5.3.2$DEFAULT_RECIPIENTS

<XXX@sapphire.cn>,<XXX@sapphire.cn>,<XXX@sapphire.cn>,<XXX@sapphire.cn>,<XXX@sapphire.cn>,<cc:XXX@sapphire.cn>

5.4email ext插件配置

在下方添加触发器,触发器包括:构建流产,构建前,稳固,成功,失败,不稳固等。

每一种事件都要配置触发器和对应的接收人列表。

我在这里配置了 Failure-Any Success Unstable(Test Failures) Failure-Still

Unstable(Tesf Failures)/Failure>Success Faillure>Unstable

6.问题

6.1版本升级

确认后默认版本不升级。

解决方法

进行备份迁移。

6.2内存泄露(未解决)

在每次构建后,继续进行jenkins配置,都会产生如上错误导致jenkins崩溃。

解决方法

修改%MAVEN_HOME%\bin\mvn.bat

@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000

     set MAVEN_OPTS= -Xms256m –Xmx1024m

6.3邮件显示问题

确定问题为没有测试用例导致显示为空。

测试数量:${TEST_COUNTS}取不到值。

Maven工程test结果:

 

解决方法

在maven-surefire-plugin插件配置configuration中:

如果添加includes标签,应把默认test任务补全。

<includes><!-- 添加测试命名规则 -->

                    <include>**/*Tests.java</include><include>**/*Test.java</include>

</includes>

成功图例:

邮件显示:

 

6.4unit test问题

Pom配置有问题,理解maven-surefire-plugin maven-surefire-report-plugin插件作用。

Surefire插件:依赖junit jar包将指定(这里为src/test/java)中指定文件名称Test中包含的test方法进行测试。包含了集成测试的思想。

Surefire-report插件:将测试结果以report形式展示,还可以通过整合形成特定xml文件。

解决方法

具体配置在附录中。

6.5Findbugs等图像显示问题

原因确定为没有出现findbugs问题,不提示findbugs warning。未安装violations插件,导致图表不显示。在配置成功后,job构建结果成功后,在列表左侧显示PMD warning与Findbugs warning。(可能列表太长显示不出来。)

解决方法

Violations插件作用为将warning视图化显示。

 

7.附录POM.XML

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 
  3 <project
  4 
  5 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6 
  7 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  8 
  9           <modelVersion>4.0.0</modelVersion>
 10 
 11           <groupId>com.sapphire</groupId>
 12 
 13           <artifactId>com.sapphire</artifactId>
 14 
 15           <version>1.0-SNAPSHOT</version>
 16 
 17           <packaging>pom</packaging>
 18 
 19           <name>sapphire</name>
 20 
 21           <modules>
 22 
 23                      <module>sapphire.dependencies</module>
 24 
 25                      <module>sapphire.formmeta</module>
 26 
 27                      <module>sapphire.formmeta.api</module>
 28 
 29                      <module>sapphire.workflow</module>
 30 
 31                      <module>sapphire.workflow.api</module>
 32 
 33                      <module>sapphire.web</module>
 34 
 35           </modules>
 36 
 37  
 38 
 39  
 40 
 41  
 42 
 43           <!-- 指定属性 -->
 44 
 45           <properties>
 46 
 47                      <version>1.0-SNAPSHOT</version>
 48 
 49                      <jdk.version>1.7</jdk.version>
 50 
 51           </properties>
 52 
 53  
 54 
 55           <distributionManagement>
 56 
 57                      <snapshotRepository>
 58 
 59                                <id>snapshot-distributed</id>
 60 
 61                                <name>snapshot-distributed</name>
 62 
 63                                <url>http://192.168.0.11:8081/nexus/content/repositories/sapphire_mall/</url>
 64 
 65                      </snapshotRepository>
 66 
 67           </distributionManagement>
 68 
 69  
 70 
 71           <repositories>
 72 
 73                      <repository>
 74 
 75                                <id>repo-release</id>
 76 
 77                                <name>repo-release</name>
 78 
 79                                <url>http://192.168.0.11:8081/nexus/content/groups/Sapphire</url>
 80 
 81                      </repository>
 82 
 83           </repositories>
 84 
 85  
 86 
 87           <build>
 88 
 89                      <!-- 默认源代码和资源文件目录配置 -->
 90 
 91                      <sourceDirectory>src/main/java </sourceDirectory>
 92 
 93                      <testSourceDirectory>src/test/java</testSourceDirectory>
 94 
 95                      <resources>
 96 
 97                                <resource>
 98 
 99                                          <directory>src/main/resources</directory>
100 
101                                </resource>
102 
103                      </resources>
104 
105                      <testResources>
106 
107                                <testResource>
108 
109                                          <directory>src/test/resources</directory>
110 
111                                </testResource>
112 
113                      </testResources>
114 
115                      <!-- 如何拓展源代码资源文件夹 http://acooly.iteye.com/blog/1814673 -->
116 
117  
118 
119                      <pluginManagement><!-- 由子pom子文件决定是否引用 -->
120 
121                                <plugins>
122 
123                                          <!-- 指定JDK的编译版本 -->
124 
125                                          <plugin>
126 
127                                                     <groupId>org.apache.maven.plugins</groupId>
128 
129                                                     <artifactId>maven-compiler-plugin</artifactId>
130 
131                                                     <version>2.5.1</version>
132 
133                                                     <configuration>
134 
135                                                               <source>${jdk.version}</source>
136 
137                                                               <target>${jdk.version}</target>
138 
139                                                               <showWarnings>true</showWarnings>
140 
141                                                     </configuration>
142 
143                                          </plugin>
144 
145                                          <plugin>
146 
147                                                     <groupId>org.apache.maven.plugins</groupId>
148 
149                                                     <artifactId>maven-resources-plugin</artifactId>
150 
151                                                     <version>2.6</version>
152 
153                                                     <configuration>
154 
155                                                               <encoding>UTF-8</encoding>
156 
157                                                               <source>${jdk.version}</source><!-- 源代码编译版本 -->
158 
159                                                               <target>${jdk.version}</target><!-- 目标平台编译版本 -->
160 
161                                                               <showWarnings>true</showWarnings>
162 
163                                                     </configuration>
164 
165                                          </plugin>
166 
167                                </plugins>
168 
169                      </pluginManagement>
170 
171                      <plugins>
172 
173                                <!-- findbugs plugin -->
174 
175                                <plugin>
176 
177                                          <groupId>org.codehaus.mojo</groupId>
178 
179                                          <artifactId>findbugs-maven-plugin</artifactId>
180 
181                                          <version>3.0.0</version>
182 
183                                          <configuration>
184 
185                                                     <threshold>High</threshold> <!-- 级别高 -->
186 
187                                                     <findbugsXmlOutput>true</findbugsXmlOutput>
188 
189                                                     <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
190 
191                                                     <!-- dashboard use this to union report -->
192 
193                                                     <xmlOutput>true</xmlOutput>
194 
195                                                     <effort>Max</effort>
196 
197                                                     <formats>
198 
199                                                               <format>html</format>
200 
201                                                     </formats>
202 
203                                          </configuration>
204 
205                                </plugin>
206 
207                                <!-- pmd plugin -->
208 
209                                <plugin>
210 
211                                          <groupId>org.apache.maven.plugins</groupId>
212 
213                                          <artifactId>maven-pmd-plugin</artifactId>
214 
215                                          <version>3.0.1</version>
216 
217                                          <configuration>
218 
219                                                     <linkXref>true</linkXref>
220 
221                                                     <sourceEncoding>utf-8</sourceEncoding>
222 
223                                                     <minimumTokens>100</minimumTokens>
224 
225                                                     <targetJdk>1.6</targetJdk>
226 
227                                                     <!-- rulesets> <ruleset>target/pmd.xml</ruleset> </rulesets -->
228 
229                                          </configuration>
230 
231                                </plugin>
232 
233  
234 
235                                <!-- 单元测试插件Junit -->
236 
237                                <plugin>
238 
239                                          <groupId>org.apache.maven.plugins</groupId>
240 
241                                          <artifactId>maven-surefire-plugin</artifactId>
242 
243                                          <version>2.18</version>
244 
245  
246 
247                                           <configuration>
248 
249                                                     <!-- 参数行命令 -->
250 
251                                                     <argLine>-Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256m</argLine>
252 
253                                                     <parallel>methods</parallel>
254 
255                                                     <threadCount>10</threadCount>
256 
257                                                     <!-- skipTests为true发布时候自动跳过单元测试 -->
258 
259                                                     <skipTests>false</skipTests>
260 
261                                                    <includes><!-- 添加测试命名规则 -->
262 
263                                                               <include>**/*Tests.java</include>
264 
265                                                               <include>**/*Test.java</include>
266 
267                                                     </includes>
268 
269                                                     <formats>
270 
271                                                               <format>html</format>
272 
273                                                     </formats>
274 
275                                          </configuration>
276 
277                                          <!--依赖junit插件,修改junit版本等。 -->
278 
279                                          <dependencies>
280 
281                                                     <dependency>
282 
283                                                               <groupId>junit</groupId>
284 
285                                                               <artifactId>junit</artifactId>
286 
287                                                               <version>4.11</version>
288 
289                                                     </dependency>
290 
291                                          </dependencies>
292 
293                                </plugin>
294 
295  
296 
297                      </plugins>
298 
299           </build>
300 
301  
302 
303           <reporting>
304 
305                      <plugins>
306 
307                                <!-- add ut report and findbugs report -->
308 
309                                <plugin>
310 
311                                          <groupId>org.apache.maven.plugins</groupId>
312 
313                                          <artifactId>maven-surefire-report-plugin</artifactId>
314 
315                                          <version>2.18</version>
316 
317                                          <configuration>
318 
319                                                     <showSuccess>false</showSuccess>
320 
321                                          </configuration>
322 
323                                </plugin>
324 
325                                <!-- add report url to check for error -->
326 
327                                <plugin>
328 
329                                          <groupId>org.apache.maven.plugins</groupId>
330 
331                                          <artifactId>maven-jxr-plugin</artifactId>
332 
333                                          <version>2.5</version>
334 
335                                          <reportSets>
336 
337                                                     <reportSet>
338 
339                                                               <id>aggregate</id>
340 
341                                                               <reports>
342 
343                                                                         <report>aggregate</report>
344 
345                                                                         <report>test-aggregate</report>
346 
347                                                               </reports>
348 
349                                                     </reportSet>
350 
351                                          </reportSets>
352 
353                                </plugin>
354 
355                                <!-- add findbugs report -->
356 
357                                <plugin>
358 
359                                          <groupId>org.codehaus.mojo</groupId>
360 
361                                          <artifactId>findbugs-maven-plugin</artifactId>
362 
363                                          <version>3.0.0</version>
364 
365                                </plugin>
366 
367                                <!-- add pmd report -->
368 
369                                <plugin>
370 
371                                          <groupId>org.apache.maven.plugins</groupId>
372 
373                                          <artifactId>maven-pmd-plugin</artifactId>
374 
375                                          <version>3.3</version>
376 
377                                </plugin>
378 
379                      </plugins>
380 
381           </reporting>
382 
383  
384 
385           <dependencies><!-- junit 父工程测试范围使用 -->
386 
387                      <dependency>
388 
389                                <groupId>junit</groupId>
390 
391                                <artifactId>junit</artifactId>
392 
393                                <version>4.10</version>
394 
395                                <scope>test</scope>
396 
397                      </dependency>
398 
399           </dependencies>
400 
401 </project>
View Code

8.附录Ant技术

概念

构建工具

将软件编译、测试、部署等步骤联系在一起加以自动化

跨平台

JAVA编写

操作简单

Build.xml编程

自动构建部署

XML构建文件—Target树—执行Task(实现特定接口对象)

项目结构

Src

文件

Class

编译文件

Lib

JAR包

Dist

打包、发布代码

一个构建文件(build.xml)定义一个项目(project)包括多个目标(target),目标中有依赖关系,每个目标包括多个任务(task)与任务序列。

任务分类

核心任务

Ant自带任务

可选任务

第三方任务,附加Jar文件

自定义任务

用户自定义开发的任务

Ant环境搭建与配置

环境变量

ANT_HOME

apache-ant安装目录

PATH

;%ANT_HOME%\bin

CMD测试

Demo测试

D:\ant\build.xml

<?xml version="1.0"?>

<project name="helloWorld">

       <target name="sayHelloWorld">

              <echo message="Hello,this is ant!"/>

       </target>

</project>

CMD测试

 

Ant默认为build.xml文件,如果不是修改为 ant –file test.xml [targetName]

Ant标签

Project

name

project元素名称

default

默认执行target名称

basedir

基路径位置(默认Ant构件文件的附目录)

<project name="helloWorld" default="sayHelloWorld" basedir="D:\">

          <target name="sayHelloWorld">

                     <echo message="Hello,this is ant!"/>

                     <echo message="the base dir is : ${basedir}"/>

          </target>

</project>

 

查看project目录下所有target

 

Target(基本执行单元)

name

Target元素名称,必须且在project中唯一

depends

依赖,多个依赖用”,”隔开,按顺序执行

if

验证属性是否存在,不存在则不执行

unless

验证属性是否存在,不存在则执行

description

功能描述

<target name="sayVersion" if="ant.java.version">

                     <echo message="JAVA Version : ${ant.java.version}"

          </target>

          <target name="dependSV" depends="sayVersion" unless="amigo">

                     <description>a depend example!</description>

                     <echo message="the base dir is : ${basedir}"/>

          </target>

 

Property(属性)

导入property属性的方式有两种:

一是在project中直接设置,

二是写在build.properties文件中,然后<property file=” build.properties”>导入。

该实例输出一些内置属性和property属性

<target name="example" depends="someBuiltIn">

                     <echo message="name: ${name}, age: ${age}"/>

          </target>

          <property name="name" value="rensifei"/>

          <property name="age" value="22"/>

          <target name="someBuiltIn">

                     <echo message="basedir: ${basedir}"/>

                     <echo message="ant.file: ${ant.file}"/>

                     <echo message="ant.version: ${ant.version}"/>

                     <echo message="ant.project.name: ${ant.project.name}"/>

                     <echo message="ant.java.version: ${ant.java.version}"/>

          </target>

 

Task(常用任务)

Copy

 

Delete

 

Mkdir

 

Move

 

Echo

根据日志或监控器的级别输出信息

Javac测试

详细见工程javacTest及其build.xml文件。

 

9.附录Findbugs技术

简介

Findbugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。利用这个工具,就可以在不实际运行程序的情况对软件进行分析。它可以帮助改进代码的质量。可作为Eclipse插件来使用。

这里我们整合进maven使用。

Ant整合

在build.xml文件中配置findbugs可以将ant与findbugs整合。

 1 <project name="项目名" default="all">
 2 
 3 <property name="findbugs.home" value="findbugs解压路径" />
 4 
 5 <path id="findbugs.path">
 6 
 7 <fileset dir="findbugs解压路径">
 8 
 9 <include name="**/*.jar" />
10 
11             </fileset>
12 
13 </path>
14 
15 <taskdef name="findbugs"
16 
17 classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
18 
19 classpathref="findbugs.path" />
20 
21 <!--  定义findbugs的home,findbugs的task要使用  -->
22 
23 <target name="findbugs">
24 
25 <findbugs home="${findbugs.home}"
26 
27 output="xml:withMessages" outputFile="生成的文件">
28 
29 <!--  以上定义findbugs查找的类路径  -->
30 
31 <auxClasspath path="${findbugs.home}/lib/findbugs-ant.jar" />
32 
33 <auxClasspath>
34 
35                      <fileset dir="lib" includes="*.jar" />
36 
37 </auxClasspath>
38 
39 <sourcePath path="源文件路径" />
40 
41 <class location="生成类路径" />
42 
43 </findbugs>
44 
45           </target>
46 
47      </project>
View Code

实例:

 1 <project name="Calendar" default="all">
 2 
 3 <property name="findbugs.home" value="../../findbugs-1.3.8" />
 4 
 5 <path id="findbugs.path">
 6 
 7 <fileset dir="../../findbugs-1.3.8">
 8 
 9 <include name="**/*.jar" />
10 
11 </fileset>
12 
13     </path>
14 
15 <taskdef name="findbugs"
16 
17 classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
18 
19 classpathref="findbugs.path" />
20 
21 <!--  定义findbugs的home,findbugs的task要使用  -->
22 
23 <target name="findbugs">
24 
25 <mkdir dir="target/findbugs"/>
26 
27 <findbugs home="${findbugs.home}" output="xml:withMessages"
28 
29 outputFile="target/findbugs/calendar-fb.xml">
30 
31 <!--  以上定义findbugs查找的类路径  -->
32 
33 <auxClasspath path="${findbugs.home}/lib/findbugs-ant.jar" />
34 
35 <auxClasspath>
36 
37 <fileset dir="lib" includes="*.jar" />
38 
39 </auxClasspath>
40 
41 <sourcePath path="src" />
42 
43 <class location="target/classes" />
44 
45 </findbugs>
46 
47 </target>
48 
49 </project>
View Code

设置好Ant的环境后,在命令中使用ant -f build.xml,或者在Eclipse直接运行build.xml文件,运行后生成了一个xml文件,如果你想用Html的格式查看findbugs的结果,可以把output属性设为:html。这样就可以通过Html来查看findbugs的结果了。

参考资料:

http://tntxia.iteye.com/blog/604714

http://wenku.baidu.com/link?url=KJ0qtB70PtjffIQdm99-6wSIJp3zIRLCVZrOuARI1j4Kp0I144rONerK5FpkhvF63AOxIGow-W5rBm3G3nDKyoas7anSXOz9yfoJlnDJ-tm

Maven整合(这里使用这个)

Maven的核心是抽象的构建过程,实际操作由插件完成。

修改maven的pom.xml文件

 1 <!--配置插件下载地址 -->
 2 
 3     <pluginRepositories>
 4 
 5        <pluginRepository>
 6 
 7            <id>Codehaus repository</id>
 8 
 9            <url>http://repository.codehaus.org/</url>
10 
11        </pluginRepository>
12 
13 </pluginRepositories>
14 
15 <plugin>
16 
17 <groupId>org.codehaus.mojo</groupId>
18 
19 <artifactId>findbugs-maven-plugin</artifactId>
20 
21 <version>3.0.0</version>
22 
23 <configuration>
24 
25 <effort>Default</effort>
26 
27 <!-- findbugs xml输出 -->                  
28 
29 <findbugsXmlOutput>true</findbugsXmlOutput>
30 
31 <!-- findbugs xml输出路径 -->        
32 
33 <findbugsXmlOutputDirectory>target/site</findbugsXmlOutputDirectory>
34 
35 </configuration>
36 
37 </plugin>
View Code

CMD测试

D: \

Cd D:\workspace\com.sapphire

mvn clean

mvn package

Mvn Findbugs指令

mvn findbugs:help

查看findbugs插件的帮助 

mvn findbugs:check

检查代码是否通过findbugs检查,如果没有通过检查,检查会失败,但检查不会生成结果报表

mvn findbugs:findbugs

检查代码是否通过findbugs检查,如果没有通过检查,检查不会失败,会生成结果报表保存在target/findbugsXml.xml文件中

mvn findbugs:gui

查代码并启动gui界面来查看结果

mvn findbugs:gui

 

在maven设置中添加pom.xml的goals and options

 

构建时

 

遇到问题

在Eclipse下maven测试时产生error

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile

Fatal error compiling: tools.jar not found: C:\Program Files (x86)\Java\jre7\..\lib\tools.jar

解决方案:修改了properties里面jre instaill里面的jre路径(设置为javahome)

Checkstyle技术

Checkstyle可执行任务如下:

mvn checkstyle:help

查看checkstyle-plugin的帮助

mvn checkstyle:check

检查工程是否满足checkstyle的检查,如果没有满足,检查会失败,可以通过target/site/checkstyle.html查看。

mvn checkstyle:checkstyle

检查工程是否满足checkstyle的检查,如果没有满足,检查不会失败,可以通过target/site/checkstyle.html查看。

mvn checkstyle:checkstyle-aggregate

检查工程是否满足checkstyle的检查,如果没有满足,检查不会失败,可以通过target/site/checkstyle.html查看。

在运行完“mvn checkstyle:checkstyle”命令后,可以运行"mvn jxr:jxr"来使checkstyle的结果可以直接跳转到代码行位置。

 

posted @ 2015-07-20 23:48  Galaxias.Sapphi.REN  阅读(2137)  评论(2编辑  收藏  举报