Jenkins持續集成學習及企業級應用

文檔聲明

該文檔主體爲去年底自主學習時總結,旨在爲我司提供一套企業級持續集成解決方案。這篇文章如今看上去很稚嫩,可是當時花費了許多心血。但願將當時的學習心得拿出來與你們交流。該文檔主要說明了jenkins持續集成部署的相關步驟,並着重實現了權限分組,郵件配置,插件配置的jenkins實現過程。對出現的問題進行解決,是一套持續集成的解決方案。html

持續集成Continuous integrationjava

提出web

針對複雜度高的項目提出「早集成,常集成,頻繁集成」來幫助項目在早期發現項目風險和質量問題數據庫

做用apache

 

減小風險編程

減小重複過程api

任什麼時候間、任何地點生成可部署的軟件瀏覽器

加強項目的可見性tomcat

創建團隊對開發產品的信心安全

概念

持續集成是一種軟件開發實踐,對於提升軟件開發效率並保障軟件開發質量提供了理論基礎。持續集成是一種軟件開發實踐,對於提升軟件開發效率並保障軟件開發質量提供了理論基礎。

背景介紹,安裝配置

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的結果能夠直接跳轉到代碼行位置。

相關文章
相關標籤/搜索