Jenkins持续集成学习及企业级应用
文档声明
该文档主体为去年末自主学习时总结,旨在为我司提供一套企业级持续集成解决方案。这篇文章现在看上去很稚嫩,但是当时花费了许多心血。希望将当时的学习心得拿出来与大家交流。该文档主要说明了jenkins持续集成部署的相关步骤,并着重实现了权限分组,邮件配置,插件配置的jenkins实现过程。对出现的问题进行解决,是一套持续集成的解决方案。
持续集成Continuous integration |
|
提出 |
针对复杂度高的项目提出“早集成,常集成,频繁集成”来帮助项目在早期发现项目风险和质量问题 |
作用
|
减少风险 |
减少重复过程 |
|
任何时间、任何地点生成可部署的软件 |
|
增强项目的可见性 |
|
建立团队对开发产品的信心 |
|
概念 |
持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。 |
背景介绍,安装配置
Jenkins前身为Hudson,改名后被oracle收购,目前没有调解。都用于持续、自动的构建项目(持续集成),使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
选型优势
- 易于安装,只需部署到servlet容器(tomcat)上,无需数据库支持
- 易于配置,通过web可视化界面配置。
- 集成RSS/Email/IM-通过RSS发布构建结果,失败时email通知。
- 生成Junit/TestNG测试报告。
- 分布式构建测试
下载地址
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,跳过测试。
具体配置项参考:
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 项目名称: $PROJECT_NAME<br/><hr/> 4 5 构建编号: $BUILD_NUMBER<br/><hr/> 6 7 源版本号: ${SVN_REVISION}<br/><hr/> 8 9 构建状态: $BUILD_STATUS<br/><hr/> 10 11 触发原因: ${CAUSE}<br/><hr/> 12 13 版本变化:<br/> 14 15 上次成功: ${CHANGES_SINCE_LAST_SUCCESS, reverse=true}<br/> 16 17 上次失败:${CHANGES_SINCE_LAST_UNSTABLE, reverse=true}<br/><hr/> 18 19 测试数量:${TEST_COUNTS}<br/> 20 21 失败数量:${TEST_COUNTS, var="fail"}<br/> 22 23 跳过数量:${TEST_COUNTS, var="skip"}<br/> 24 25 <hr/><br/><br/> 26 27 日志地址:<a href="${BUILD_URL}console"> view console </a><br/><hr/><br/><br/> 28 29 构建地址:<a href="$BUILD_URL"> view build url </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>
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>
实例:
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>
设置好Ant的环境后,在命令中使用ant -f build.xml,或者在Eclipse直接运行build.xml文件,运行后生成了一个xml文件,如果你想用Html的格式查看findbugs的结果,可以把output属性设为:html。这样就可以通过Html来查看findbugs的结果了。
参考资料:
http://tntxia.iteye.com/blog/604714
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>
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的结果可以直接跳转到代码行位置。
作者:牧伯流水
World need ur smile O(∩_∩)O Copyright ©2015 Galaxias.Sapphi.REN