hudson+findbugs的配置方法及无数坑爹的陷阱.docx
《hudson+findbugs的配置方法及无数坑爹的陷阱.docx》由会员分享,可在线阅读,更多相关《hudson+findbugs的配置方法及无数坑爹的陷阱.docx(9页珍藏版)》请在冰豆网上搜索。
hudson+findbugs的配置方法及无数坑爹的陷阱
hudson+findbugs的配置方法及无数坑爹的陷阱
Hudson是一个简单而非常强大的集成测试工具,结合mavenjunitfindbugssvnant等等数以百计的插件,可以大有作为,今天只说findbugs。
Hudson本身的安装与配置就不说了,非常简单,下载war包直接扔到tomcat即可。
maven的基本操作也不说了,不行自己去看。
第一步:
首先进入Hudson »系统管理»插件管理 »可选插件
选中FindBugsPlug-in,点击最下面的安装即可,安装完成后需要重启tomcat,以便加载新插件。
说明:
1、如果你曾经安装过该插件,则在“可选插件”中是看不到的,在“已安装”插件中。
2、点击“更新”页签,如果出现“Hudson:
:
Maven(legacy):
:
Plugin”的更新,你最好乖乖的更新,否则你的job设置中的BuildSettings选项下的PublishFindBugsanalysisresults和E-mailNotification选项,勾选之后点击保存,再次打开设置页面,居然为空,保存不成功!
这是一个非常坑爹的BUG。
第二步:
准备工程
eclipse中新建个maven工程,要点是:
在依赖中添加
org.codehaus.mojo
findbugs-maven-plugin
--1.2-->
true
true
true
--target/test-findbugs-->
注意点:
看到我注释掉的那句话了吗,这又是一个陷阱,假如放开注释,是可以执行成功的,但是你在Hudson中看不到结果,也就是在target/test-findbugs下你可以看到findbugsXml.xml,里面也确实有东西,你在命令行执行>mvncleaninstallfindbugs:
findbugs或者>mvncleaninstallfindbugs:
gui都没有任何问题,但是一旦进入Hudson就是看不到FindBugsWarnings和FindBugsResult,这是因为FindBugs的HudsonPlug-in是从target目录中取得report。
又一个坑爹的陷阱。
手工运行一下mvncleaninstallfindbugs:
findbugs,可以看到报告的位置在target的根目录下,才是正确的。
第三步:
拷贝你的工程到\.hudson\jobs\你的job名\workspace\下。
没有workspace可以自己新建一个。
第四步:
Hudson»新建任务 »构建一个Maven2/3(Legacy)项目
进入设置界面:
SourceCodeManagement
自己看着办吧,从svn取或者自己拷贝到jobs/你的job名字/workspace中
Build
RootPOM:
填写相对于workspace的根pom的位置
Goalsandoptions:
填写诸如cleaninstallfindbugs:
findbugs或compile findbugs:
findbugs此类的
BuildSettings:
勾选PublishFindBugsanalysisresults,其他可以用默认值。
说明:
1、一定要注意,cleanfindbugs:
findbugsinstall,这种写法是错的,可以运行的,但是并不产生findbugs报告,再次坑爹。
2、当然你可以选择“构建一个自由风格的软件项目”,在下一步配置界面选择InvokeMaven2(Legacy)或InvokeMaven3,这也是可以的,不过配置参数有所不同。
至此,全部完成,点击构建,不出意外的话,你可以看到结果页面。
注意:
如果你看到的Plug-inResult是个红叉叉,请修改Hudson»系统管理»插件管理»系统设置
邮件通知中的HudsonURL为你的正确地址,注意使用ip地址,不要使用localhost,坑爹啊。
如果你用的所有包都是最新的,你很有可能会看到下面的错误,错误日志片段:
[java]java.text.ParseException:
Unparseabledate:
"12/20/201109:
17PMEST"
[java] atjava.text.DateFormat.parse(DateFormat.java:
337)
[java] atedu.umd.cs.findbugs.Version.(Version.java:
175)
[java] atedu.umd.cs.findbugs.PluginLoader.init(PluginLoader.java:
595)
[java] atedu.umd.cs.findbugs.PluginLoader.(PluginLoader.java:
280)
[java] atedu.umd.cs.findbugs.PluginLoader.loadCorePlugin(PluginLoader.java:
1304)
[java] atedu.umd.cs.findbugs.PluginLoader.loadInitialPlugins(PluginLoader.java:
1259)
[java] atedu.umd.cs.findbugs.PluginLoader.(PluginLoader.java:
146)
[java] atedu.umd.cs.findbugs.DetectorFactoryCollection.getCoreResource(DetectorFactoryCollection.java:
360)
[java] atedu.umd.cs.findbugs.SystemProperties.loadPropertiesFromConfigFile(SystemProperties.java:
72)
[java] atedu.umd.cs.findbugs.SystemProperties.(SystemProperties.java:
55)
[java] atedu.umd.cs.findbugs.FindBugs2.(FindBugs2.java:
87)
这是为啥呢,又一个坑爹,是程序员就直接看代码,分析原因如下:
下载源码包findbugs-2.0.0-source.zip:
解压后,直接导入eclipse中即可。
打开 edu.umd.cs.findbugs.Version.java,从第175行开始,往上看。
解决办法:
如果你用的是maven,jar包的位置\.m2\repository\com\google\code\findbugs\findbugs\2.0.0\findbugs-2.0.0.jar
方法1:
修改类edu.umd.cs.findbugs.updates.UpdateChecker,然后将编译后的class文件,替换掉findbugs-2.0.0.jar中的对应类。
(由于有内部类,注意是4个类)
方法2:
看代码175行,打开jar中的version.properties可以看到错误原因正是这个文件中持久化的时间时区与DateFormat默认的时区不一致导致(我们是上海时区),因此修改该properties为正确值即可。