﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Sky's blog-随笔分类-project manager</title><link>http://www.blogjava.net/aoxj/category/44505.html</link><description>我和我追逐的梦</description><language>zh-cn</language><lastBuildDate>Sun, 15 May 2011 10:12:35 GMT</lastBuildDate><pubDate>Sun, 15 May 2011 10:12:35 GMT</pubDate><ttl>60</ttl><item><title>解决gradle与sonar集成过程中的版本问题</title><link>http://www.blogjava.net/aoxj/archive/2011/05/15/350269.html</link><dc:creator>sky ao</dc:creator><author>sky ao</author><pubDate>Sun, 15 May 2011 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/aoxj/archive/2011/05/15/350269.html</guid><wfw:comment>http://www.blogjava.net/aoxj/comments/350269.html</wfw:comment><comments>http://www.blogjava.net/aoxj/archive/2011/05/15/350269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoxj/comments/commentRss/350269.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoxj/services/trackbacks/350269.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 初学gradle，一切都还在摸索的过程中。今天刚刚试图将之前基于ant + ivy的一个小项目转移到gradle下，结果在和sonar集成时出现问题.&nbsp;&nbsp;<a href='http://www.blogjava.net/aoxj/archive/2011/05/15/350269.html'>阅读全文</a><img src ="http://www.blogjava.net/aoxj/aggbug/350269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoxj/" target="_blank">sky ao</a> 2011-05-15 13:12 <a href="http://www.blogjava.net/aoxj/archive/2011/05/15/350269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sonar 与 NOSONAR</title><link>http://www.blogjava.net/aoxj/archive/2010/11/22/338671.html</link><dc:creator>sky ao</dc:creator><author>sky ao</author><pubDate>Mon, 22 Nov 2010 03:04:00 GMT</pubDate><guid>http://www.blogjava.net/aoxj/archive/2010/11/22/338671.html</guid><wfw:comment>http://www.blogjava.net/aoxj/comments/338671.html</wfw:comment><comments>http://www.blogjava.net/aoxj/archive/2010/11/22/338671.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/aoxj/comments/commentRss/338671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoxj/services/trackbacks/338671.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 12px; line-height: 18px; font-family: Arial, sans-serif, Helvetica, Tahoma; text-align: left"><br />
&nbsp;&nbsp;&nbsp; 大家都知道sonar是个好东东，在有CI支持的情况下，使用好了可以非常好的控制代码的质量，诸如代码覆盖率，代码规则检查等。<span class="Apple-converted-space">&nbsp;</span><br />
<br />
&nbsp;&nbsp;&nbsp; 而解决violation的办法，除了正统的修改代码来满足规则外，还有一个变通的方法， NOSONAR。这个标记本意是在一些特殊情况，有不得已的理由不得不违反规则，为了避免sonar继续报错而不得已做了一个"变通"。<span class="Apple-converted-space">&nbsp;</span><br />
<br />
&nbsp;&nbsp;&nbsp; NOSONAR本意虽好，但要是有人滥用，变通就会变成取巧，因为解决sonar violation的最简单的方法，就是直接NOSONAR！<span class="Apple-converted-space">&nbsp;</span><br />
<br />
&nbsp;&nbsp;&nbsp; 当问题很简单时，一般人都会选择正常的方式修改代码，如果只是举手之劳基本上还是能遵守规则的。但是当问题复杂时，或者说当解决问题不再是举手之劳时，每个人都要受到NOSONAR的诱惑。而NOSONAR的底线在哪里？没有人定义，没有人检测，自然不会每个人都坚守，NOSONAR的底线随着一个一个的NOSONAR慢慢的在降低。退五十步的人，是没有资格笑百步的。<span class="Apple-converted-space">&nbsp;</span><br />
<br />
&nbsp;&nbsp;&nbsp; 返回到现实代码中，不知道是大家都没有顶住诱惑，还是说我们开启的规则不大合理，总之越来越频繁的在代码中看到NOSONAR了，虽然还没有到泛滥的地步，但是已经让我有些不安了。简单搜索了一下刚才让我感觉到很多NOSONAR的project，结果是58个。<span class="Apple-converted-space">&nbsp;</span><br />
<br />
&nbsp;&nbsp;&nbsp; 更糟糕的是，每个NOSONAR后面都不会带有注释说明为什么要NOSONAR，因此一个个飞舞的NOSONAR就变成了一个个谜团。想知道为什么要NOSONAR吗？恩，你猜......<span class="Apple-converted-space">&nbsp;</span><br />
<br />
&nbsp;&nbsp;&nbsp; 我没有办法去检查这个58个NOSONAR是不是都合理的，都站得住脚的。出于程序员的习惯，对于一切不可确认性都报以怀疑的眼光和质疑的姿态，我总觉得这58个NOSONAR让我总是没有底，每次我看到sonar上100%的规则检测通过率时，我总是禁不住在心里浮现NOSONAR的字样。<span class="Apple-converted-space">&nbsp;</span><br />
<br />
&nbsp;&nbsp;&nbsp; 好吧，我承认，我是个心里有些阴暗的家伙......<span class="Apple-converted-space">&nbsp;<br />
<br />
</span></span></span>
<img src ="http://www.blogjava.net/aoxj/aggbug/338671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoxj/" target="_blank">sky ao</a> 2010-11-22 11:04 <a href="http://www.blogjava.net/aoxj/archive/2010/11/22/338671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> hudson中subversion HEAD check out 的问题及疑惑</title><link>http://www.blogjava.net/aoxj/archive/2010/09/29/333433.html</link><dc:creator>sky ao</dc:creator><author>sky ao</author><pubDate>Wed, 29 Sep 2010 15:02:00 GMT</pubDate><guid>http://www.blogjava.net/aoxj/archive/2010/09/29/333433.html</guid><wfw:comment>http://www.blogjava.net/aoxj/comments/333433.html</wfw:comment><comments>http://www.blogjava.net/aoxj/archive/2010/09/29/333433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoxj/comments/commentRss/333433.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoxj/services/trackbacks/333433.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">近期发现一个问题，hudson执行任务时，经常不能获取到最新的代码，从而导致出现各种问题。&nbsp;<br />
<br />
日常开发中的典型例子：发现一个bug，修改代码，本地测试通过，提交代码到subversion，手工激活hudson构建，原本期望hudson获取到刚刚提交的代码并测试/打包/发布。结果事与愿违，测试的结果发现刚刚做出的修改似乎没有生效。正费解之时，再执行一次hudson构建，又成功了...&nbsp;<br />
<br />
经历过几次上述蹊跷遭遇之后，发现这个问题不是偶然。之后检查hudson的日志，发现问题的发现在最开始update / check out subversion代码时，明明已经提交的代码，hudson做update / check out时，居然没有update / check out下来！显示的subversion版本号也和subversion上实际的最新版本不一致，hudson总是要小一些，换言之，hudson update / check out的代码要比当前最新代码老一些。&nbsp;<br />
<br />
google一番，发现这个问题之前就有人遭遇过，hudson上甚至已经有了好几个关于这个问题的bug，比如 http://issues.hudson-ci.org/browse/HUDSON-1241 "force using HEAD SVN version for build"。问题的根源在于hudson 获取subversion代码的方式，hudson是通过时间戳的方式来获取代码，而不是我们一般认为的"最新代码"即"HEAD"。这种方式通常没有问题，因为获取当前时间戳，然后要求update / checkout这个时间戳前的代码，理论上也是可以拿到最新代码的。&nbsp;<br />
<br />
但是，如果hudson所在的服务器和subversion服务器时间不一致，这个机制就会出现问题:&nbsp;<br />
<br />
我们假设subversion服务器的时间是准确的，再假设当时时间是15:10分，开发人员A提交代码，subversion上当前这个最新提交的代码时间戳为15:10:00。然后开发人员A手工激活hudson进行构建。hudson在15:10:20时开始check out代码。如果hudson时间无误，则hudson会发出请求说要求获取时间戳在15:10:20之前的代码，这样这个实际提交时间为15:10:00的新代码就可以如期的被check out。但是如果hudson的时钟有误，由于某些原因导致时钟偏慢2分钟，即在hudson上，"当前时间"为"15:08:20"，则hudson获取代码的请求为:获取时间戳为15:08:20之前的代码，此时时间戳为15:10:00的新代码就无法checkout。&nbsp;<br />
<br />
几分钟之后，疑惑的开发人员A再次激活hudson再次构建，假设此时时间时间是15:15:00，hudson慢两分钟为15:13:00。此时hudson发出请求: 获取时间戳为15:13:00之前的代码, 因此实际提交时间为15:10:00的新代码可以正常checkout，问题又在不知不觉被回避了。&nbsp;<br />
<br />
总结说，hudson 获取代码的机制不是我们直觉中的获取最新代码(即subversion中HEAD checkout)，而是基于时间戳。由于这个方式通常如HEAD般工作，因此我们总是容易误解为是获取最新代码。当hudson的时钟晚于subversion时，悲剧就出现了。&nbsp;<br />
<br />
对这个问题，有几点疑惑：&nbsp;<br />
<br />
1. 不明白为什么hudson不采用最直接最简单最容易被人理解最不容易出误解的HEAD checkout，而要基于时间戳&nbsp;<br />
<br />
2. 这个问题很早就发生了，上面提到的bug 08年就被人提出, "Created: 31/Jan/08 05:37 AM&nbsp;&nbsp; Updated: 01/Jul/10 11:06 AM"，三年了类似的bug被多次提出，但是就是始终没有修复。&nbsp;<br />
<br />
修复的方式很简单，就改一个类的一行代码&nbsp;<br />
<br />
in Class: hudson.scm.SubversionSCM&nbsp;<br />
<br />
line 377:&nbsp;<br />
final SVNRevision revision = SVNRevision.create(timestamp);&nbsp;<br />
replace to:&nbsp;<br />
final SVNRevision revision = SVNRevision.HEAD;&nbsp;<br />
<br />
hudson拒绝修复的理由是什么？</span>
<div><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span></div>
<img src ="http://www.blogjava.net/aoxj/aggbug/333433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoxj/" target="_blank">sky ao</a> 2010-09-29 23:02 <a href="http://www.blogjava.net/aoxj/archive/2010/09/29/333433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>confluence 3.3.1 linux安装笔记</title><link>http://www.blogjava.net/aoxj/archive/2010/09/18/332382.html</link><dc:creator>sky ao</dc:creator><author>sky ao</author><pubDate>Sat, 18 Sep 2010 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/aoxj/archive/2010/09/18/332382.html</guid><wfw:comment>http://www.blogjava.net/aoxj/comments/332382.html</wfw:comment><comments>http://www.blogjava.net/aoxj/archive/2010/09/18/332382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoxj/comments/commentRss/332382.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoxj/services/trackbacks/332382.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最新版本的confluence 3.3.1 linux 安装笔记。&nbsp;&nbsp;<a href='http://www.blogjava.net/aoxj/archive/2010/09/18/332382.html'>阅读全文</a><img src ="http://www.blogjava.net/aoxj/aggbug/332382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoxj/" target="_blank">sky ao</a> 2010-09-18 15:20 <a href="http://www.blogjava.net/aoxj/archive/2010/09/18/332382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fisheye2.3.6 安装笔记</title><link>http://www.blogjava.net/aoxj/archive/2010/09/16/332125.html</link><dc:creator>sky ao</dc:creator><author>sky ao</author><pubDate>Wed, 15 Sep 2010 16:47:00 GMT</pubDate><guid>http://www.blogjava.net/aoxj/archive/2010/09/16/332125.html</guid><wfw:comment>http://www.blogjava.net/aoxj/comments/332125.html</wfw:comment><comments>http://www.blogjava.net/aoxj/archive/2010/09/16/332125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoxj/comments/commentRss/332125.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoxj/services/trackbacks/332125.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     之前安装的fisheye2.2.1，破解不是很好用，最近看到fisheye2.3.6版本有出新的破解方式，特地尝试了一下，成功安装。现在将过程简单分享给大家。&nbsp;&nbsp;<a href='http://www.blogjava.net/aoxj/archive/2010/09/16/332125.html'>阅读全文</a><img src ="http://www.blogjava.net/aoxj/aggbug/332125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoxj/" target="_blank">sky ao</a> 2010-09-16 00:47 <a href="http://www.blogjava.net/aoxj/archive/2010/09/16/332125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sonar 安装配置笔记</title><link>http://www.blogjava.net/aoxj/archive/2010/06/02/322508.html</link><dc:creator>sky ao</dc:creator><author>sky ao</author><pubDate>Tue, 01 Jun 2010 23:47:00 GMT</pubDate><guid>http://www.blogjava.net/aoxj/archive/2010/06/02/322508.html</guid><wfw:comment>http://www.blogjava.net/aoxj/comments/322508.html</wfw:comment><comments>http://www.blogjava.net/aoxj/archive/2010/06/02/322508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoxj/comments/commentRss/322508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoxj/services/trackbacks/322508.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: sonar 安装配置笔记, 基于SUSE SLSE11, mysql.&nbsp;&nbsp;<a href='http://www.blogjava.net/aoxj/archive/2010/06/02/322508.html'>阅读全文</a><img src ="http://www.blogjava.net/aoxj/aggbug/322508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoxj/" target="_blank">sky ao</a> 2010-06-02 07:47 <a href="http://www.blogjava.net/aoxj/archive/2010/06/02/322508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fisheye2.2.1 &amp; Crucible 2.2.1 安装配置笔记</title><link>http://www.blogjava.net/aoxj/archive/2010/04/27/319498.html</link><dc:creator>sky ao</dc:creator><author>sky ao</author><pubDate>Tue, 27 Apr 2010 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/aoxj/archive/2010/04/27/319498.html</guid><wfw:comment>http://www.blogjava.net/aoxj/comments/319498.html</wfw:comment><comments>http://www.blogjava.net/aoxj/archive/2010/04/27/319498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoxj/comments/commentRss/319498.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoxj/services/trackbacks/319498.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: fisheye2.2.1 & Crucible 2.2.1 安装配置笔记。&nbsp;&nbsp;<a href='http://www.blogjava.net/aoxj/archive/2010/04/27/319498.html'>阅读全文</a><img src ="http://www.blogjava.net/aoxj/aggbug/319498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoxj/" target="_blank">sky ao</a> 2010-04-27 16:48 <a href="http://www.blogjava.net/aoxj/archive/2010/04/27/319498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jira4 + resin4 + mysql的linux安装笔记(以失败告终)</title><link>http://www.blogjava.net/aoxj/archive/2010/04/10/317944.html</link><dc:creator>sky ao</dc:creator><author>sky ao</author><pubDate>Sat, 10 Apr 2010 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/aoxj/archive/2010/04/10/317944.html</guid><wfw:comment>http://www.blogjava.net/aoxj/comments/317944.html</wfw:comment><comments>http://www.blogjava.net/aoxj/archive/2010/04/10/317944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoxj/comments/commentRss/317944.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoxj/services/trackbacks/317944.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     这段时间简单的试用了一下jira，非常满意。准备作为个人之后开发的首选缺陷管理工具，但是当时采用的是windows的全集成安装方式，因此考虑在linux上正式的安装一下，同时将数据库换成mysql。<br><br>    虽然最后的结果不大好，不过上面的这个安装过程，已经远比当前google上能找到的资料要多了。如果其他朋友有打算用jira4 + resin4 + mysql的，可以稍微参考，少走弯路。如果最后能安装成功正确使用，希望能告知正确的安装方法，谢谢！&nbsp;&nbsp;<a href='http://www.blogjava.net/aoxj/archive/2010/04/10/317944.html'>阅读全文</a><img src ="http://www.blogjava.net/aoxj/aggbug/317944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoxj/" target="_blank">sky ao</a> 2010-04-10 16:40 <a href="http://www.blogjava.net/aoxj/archive/2010/04/10/317944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jira 4.0.2 windows安装</title><link>http://www.blogjava.net/aoxj/archive/2010/04/03/317377.html</link><dc:creator>sky ao</dc:creator><author>sky ao</author><pubDate>Sat, 03 Apr 2010 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/aoxj/archive/2010/04/03/317377.html</guid><wfw:comment>http://www.blogjava.net/aoxj/comments/317377.html</wfw:comment><comments>http://www.blogjava.net/aoxj/archive/2010/04/03/317377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoxj/comments/commentRss/317377.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoxj/services/trackbacks/317377.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在windows上安装jira 4.0.2的简单过程记录，备忘。&nbsp;&nbsp;<a href='http://www.blogjava.net/aoxj/archive/2010/04/03/317377.html'>阅读全文</a><img src ="http://www.blogjava.net/aoxj/aggbug/317377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoxj/" target="_blank">sky ao</a> 2010-04-03 11:17 <a href="http://www.blogjava.net/aoxj/archive/2010/04/03/317377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>