0
寮曡█ Thomas Carlyle璇達細“浜虹被鏄嬌鐢ㄥ伐鍏風殑鍔ㄧ墿銆傛病鏈夊伐鍏鳳紝浜轟粈涔堥兘涓嶆槸錛涙湁浜嗗伐鍏鳳紝浜烘棤鎵涓嶈兘銆?#8221;閲戣瀺瀹朵滑鍒涢犱簡澶嶆潅鐨勯噾铻嶅伐鍏鳳紝騫跺埄鐢ㄨ繖浜涘伐鍏峰埗閫犱簡璐㈠瘜紲炶瘽錛屽埗閫犱簡钁楀悕鐨勮法鍥藉叕鍙革紝涔熷埗閫犱簡涓栫晫鑼冨洿鐨勫嵄鏈恒傝蔣浠剁簿鑻變滑涓轟簡璁╄嚜宸辯殑宸ヤ綔鏁堢巼鏇撮珮錛屾湁鏇村鏃墮棿鍘誨仛鎯沖仛鐨勪簨錛屼篃鍒涢犱簡鍚勫紡鍚勬牱鐨勫伐鍏楓傛寔緇泦鎴愬凡緇忎笉鏄竴涓柊姒傚康錛屽湪榪欎釜姒傚康鍙戝睍鐨勫崄澶氬勾闂達紝鍑虹幇浜嗘敮鎸佽繖涓姒傚康鐨勪紬澶氬伐鍏楓傝繖浜涘伐鍏風殑緇勫悎浣跨敤錛屼負杞歡寮鍙戞彁渚涗簡寮哄ぇ鐨勬敮鎸併?/p> 鎸佺畫闆嗘垚宸ュ叿鐨勫垎綾誨拰鍔熻兘 涓鑸潵璇達紝鎸佺畫闆嗘垚宸ュ叿鍙互鍒嗘垚涓ゅぇ綾伙細鑷姩鍖栨瀯寤哄伐鍏峰拰鏋勫緩璁″垝瀹夋帓宸ュ叿銆?/p> 鑷姩鍖栨瀯寤哄伐鍏鋒湁榪欐牱涓浜涘熀鏈姛鑳斤細浠g爜緙栬瘧銆佺粍浠舵墦鍖呫佺▼搴忔墽琛屽拰鏂囦歡鎿嶄綔銆傜紪璇戞簮浠g爜鏄瀯寤虹殑涓昏宸ヤ綔涔嬩竴錛屼負浜嗘彁楂樻晥鐜囷紝緙栬瘧搴旇鏍規嵁鐩稿簲鐨勬簮浠g爜鏄惁鍙戠敓鏀瑰彉鑰屾湁鏉′歡鍦版墽琛屻傜粍浠舵墦鍖呮槸灝嗙紪璇戠殑緇撴灉鍜屽叾浠栭渶瑕佸寘鍚殑鏂囦歡緇勭粐鍦ㄤ竴璧鳳紝褰㈡垚鍙互閮ㄧ講鐨勭粍浠躲傛瀯寤哄伐鍏峰簲璇ョ煡閬撲綍鏃墮渶瑕侀噸鏂版墦鍖呫傜▼搴忔墽琛屾槸鎸囨瀯寤哄伐鍏瘋兘澶熷湪瀹冩敮鎸佺殑騫沖彴涓婏紝璋冪敤鎵鏈夋彁渚涘懡浠よ鎺ュ彛鐨勭▼搴忋傛瀯寤哄伐鍏峰簲璇ユ敮鎸佸垱寤恒佹嫹璐濄佸垹闄ゆ枃浠跺拰鐩綍絳夋搷浣溿?/p> 鏌愪簺鑷姩鍖栨瀯寤哄伐鍏瘋繕鏈変竴浜涙墿灞曞姛鑳斤細鎵ц寮鍙戣呮祴璇曘佺増鏈帶鍒跺伐鍏烽泦鎴愩佹枃妗i泦鎴愩侀儴緗插姛鑳姐佷唬鐮佸搧璐ㄥ垎鏋愩佹敮鎸佹墿灞曘佸騫沖彴鏋勫緩銆佸姞閫熸瀯寤恒傝櫧鐒舵瀯寤哄伐鍏峰彲浠ラ氳繃鍛戒護琛屾墽琛岀殑鏂瑰紡鏉ラ泦鎴愭瀯寤哄伐鍏峰拰嫻嬭瘯宸ュ叿錛屼絾濡傛灉瀹冩彁渚涙洿鐩存帴鐨勯泦鎴愭柟寮忥紝寮鍙戣呭氨鏇寸渷鍔涖傚悓鏍鳳紝濡傛灉鏋勫緩宸ュ叿鑳藉鐩存帴涓庣増鏈帶鍒跺伐鍏烽泦鎴愶紝寮鍙戣呬篃浼氳寰楁洿鏂逛究銆傛枃妗i泦鎴愭槸鎸囨瀯寤哄伐鍏瘋兘澶熻嚜鍔ㄤ粠婧愪唬鐮佷腑鎶藉彇騫剁敓鎴怉PI鏂囨。銆傛瀯寤哄伐鍏瘋繕鍙互灝嗘墦鍖呭ソ鐨勭粍浠惰嚜鍔ㄩ儴緗插埌鐩爣嫻嬭瘯鐜涓幓銆傛瀯寤哄伐鍏蜂竴鑸氳繃涓浜涚涓夋柟鎻掍歡錛屾敮鎸佸浠g爜鍝佽川榪涜鍒嗘瀽銆傝屾彁渚涙彃浠舵帴鍙o紝鏄瀯寤哄伐鍏峰疄鐜板彲鎵╁睍鎬х殑閫氱敤鏂瑰紡銆傚鏋滄偍寮鍙戠殑杞歡闇瑕佸湪澶氫釜騫沖彴涓婃瀯寤哄茍嫻嬭瘯錛岄偅涔堟瀯寤哄伐鍏峰澶氬鉤鍙扮殑鏀寔灝變細甯︽潵鏋佸ぇ鐨勬柟渚褲傚浜庤緝澶х殑浠g爜闆嗭紝涓嬈℃瀯寤哄彲鑳介渶瑕佸ソ鍑犱釜灝忔椂錛岃繖涓烘寔緇泦鎴愬甫鏉ヤ簡涓浜涙寫鎴樸傛湁鐨勬瀯寤哄伐鍏鋒敮鎸佸姞閫熸瀯寤猴紝鍗沖湪澶氫釜鏋勫緩鏈嶅姟鍣ㄧ殑澶氫釜澶勭悊鍣ㄤ笂榪涜鍒嗗竷寮忔瀯寤恒?/p> 甯歌鐨勮嚜鍔ㄥ寲鏋勫緩宸ュ叿鍖呮嫭Ant銆丯Ant銆丮SBuild銆乵ake銆丮aven銆丷ake絳夈?/p> 鏋勫緩璁″垝瀹夋帓宸ュ叿鏈夎繖鏍蜂竴浜涘熀鏈姛鑳斤細鏋勫緩鎵ц銆佺増鏈帶鍒墮泦鎴愩佹瀯寤哄伐鍏烽泦鎴愩佹彁渚涘弽棣堛佷負鏋勫緩鎵撲笂鏍囩銆傛瀯寤鴻鍒掑畨鎺掑伐鍏風殑鏍稿績鍔熻兘灝辨槸鍦ㄧ壒瀹氭椂闂存墽琛岃嚜鍔ㄥ寲鐨勬瀯寤猴紝榪欏彲浠ラ氳繃杞鐗堟湰鎺у埗搴撱佽鍒掗┍鍔ㄦ垨浜嬩歡閫氱煡絳夋柟寮忔潵瀹炵幇銆傚ぇ閮ㄥ垎鏋勫緩璁″垝瀹夋帓宸ュ叿閮芥敮鎸佸ぇ澶氭暟嫻佽鐨勭増鏈帶鍒剁郴緇燂紝涔熸敮鎸佸ぇ澶氭暟嫻佽鐨勬瀯寤哄伐鍏楓傛瀯寤鴻鍒掑畨鎺掑伐鍏瘋嚦灝戞敮鎸侀氳繃鐢靛瓙閭歡鎻愪緵鍙嶉淇℃伅錛屾湁涓浜涘伐鍏峰彲浠ラ氳繃鍗蟲椂娑堟伅銆佹墜鏈虹煭淇℃垨鍏朵粬璁懼鏉ユ彁渚涘弽棣堛傚ぇ澶氭暟鏋勫緩璁″垝瀹夋帓宸ュ叿浼氭彁渚涙煇縐嶇被鍨嬬殑鍗囧簭璁℃暟錛屼綔涓烘瀯寤虹増鏈殑鏍囩銆?/p> 鏌愪簺鏋勫緩璁″垝瀹夋帓宸ュ叿榪樻湁涓浜涙墿灞曞姛鑳斤細鏀寔欏圭洰闂翠緷璧栧叧緋匯佹彁渚涚敤鎴風晫闈€佸埗鍝佸彂甯冦佸畨鍏ㄣ傚鏋滈」鐩棿瀛樺湪渚濊禆鍏崇郴錛屾偍鍙兘甯屾湜鍦ㄨ渚濊禆鐨勯」鐩噸鏂版瀯寤烘椂錛岄噸鏂版瀯寤轟緷璧栦簬瀹冪殑欏圭洰銆傝璁¤壇濂界殑鐢ㄦ埛鐣岄潰浼氬湪宸ヤ綔鏃朵負鎮ㄨ妭綰︽椂闂淬傚埗鍝佸彂甯冩槸鎸囬櫎浜嗗緱鍒板彲閮ㄧ講鐨勭粍浠朵箣澶栵紝涓浜涙垚鐔熺殑鏌愪簺鏋勫緩璁″垝瀹夋帓宸ュ叿鍙互灝嗘枃妗c佹祴璇曠粨鏋溿佸搧璐ㄥ垎鏋愮粨鏋勫拰鍏朵粬嫻嬮噺鎸囨爣鏁版嵁鏍煎紡鍖栵紝渚夸簬鏌ョ湅銆傛湁涓浜涘伐鍏鋒彁渚涗簡韜喚璁よ瘉鍜屾巿鏉冪瓑瀹夊叏鏂歸潰鐨勫姛鑳斤紝鍏佽鎮ㄦ寚瀹氳皝鑳芥煡鐪嬬粨鏋滃拰淇敼閰嶇疆銆?/p> 甯歌鐨勬瀯寤鴻鍒掑畨鎺掑伐鍏峰寘鎷珹nthillPro銆丆ontinuum銆丆ruiseControl銆丆ruiseControl.NET銆丏raco.NET銆丩untbuild銆丠udson絳夈?/p> 涓嬮潰浠嬬粛涓や釜棰囧叿浠h〃鎬х殑宸ュ叿錛欰nt鍜孒udson銆?/p> Ant Ant鏄疛ava鏋勫緩宸ュ叿鐨勪簨瀹炴爣鍑嗭紝涓鑸緩璁紝涓嶈欏圭洰鍥㈤槦鎴愬憳浣跨敤鍝闆嗘垚寮鍙戠幆澧冿紝欏圭洰閮借鏈変竴涓彲浠ヨ劚紱籌DE鎵ц鐨凙nt鑴氭湰銆侫nt閲囩敤鎻掍歡寮忕殑璁捐緇撴瀯錛岄氳繃涓嶅悓鐨勬彃浠舵潵瀹炵幇鍚勭浠誨姟錛屽叾浠誨姟鍒嗙被濡傝〃1鎵紺恒?/p> Archive Tasks 浠ヤ笂浠嬬粛鐨勫彧鏄疉nt鍙戣鐗堟墍甯︾殑涓浜涗換鍔°傜敱浜嶢nt閲囩敤鐨勬槸鎻掍歡緇撴瀯錛屾墍浠ュ紑鍙戣呭彲浠ュ紑鍙戣嚜宸遍渶瑕佺殑Ant浠誨姟錛屾敮鎸佸悇縐嶅伐鍏鳳紝濡侳indBugs銆乀estNG絳夊叾浠栦唬鐮佹鏌ュ伐鍏峰拰嫻嬭瘯宸ュ叿銆傛棭鏈熺殑Ant娌℃湁寰堝ソ鐨勪緷璧栧叧緋繪敮鎸侊紝鍚庢潵鍒欓氳繃Ivy寮ヨˉ浜嗚繖涓緙虹偣銆?/p> 鍏抽敭鏄疉nt涓烘垜浠彁渚涗簡涓涓法騫沖彴鐨凧ava鏋勫緩宸ュ叿錛屼負鎸佺畫闆嗘垚鎻愪緵浜嗘牴鏈殑鏀寔銆傚浜嶫ava寮鍙戣呮潵璇達紝濡傛灉涓嶆兂閲囩敤Ant錛屼篃鍙互鑰冭檻閲囩敤Maven銆?/p> Hudson Hudson鏄竴涓紑鏀炬簮浠g爜鐨凜I鏈嶅姟鍣紝鍙楀埌涓栫晫鍚勫湴鍚勭瑙勬ā鍜岀被鍨嬬殑寮鍙戝洟闃熺殑嬈㈣繋銆傚叧閿槸鍥犱負瀹冮潪甯告槗浜庡畨瑁呭拰浣跨敤錛屾彁渚涗簡鐏墊椿鐨勯厤緗柟寮忓拰澶嶆潅鐨勫姛鑳斤紝鍚屾椂鏀寔Java欏圭洰鍜岄潪Java欏圭洰錛岀敱寮哄ぇ鐨凥udson紺懼尯鎻愪緵鎶鏈敮鎸併?/p> 綆鑰岃█涔嬶紝Hudson涓嶄粎浠呮槸涓涓狢I鏈嶅姟鍣紝瀹冪殑鍙墿灞曟灦鏋勪嬌瀹冧笉浠呮槸涓涓瀯寤虹鐞嗙郴緇燂紝涔熸垚涓轟竴涓氱敤鐨勫紑鍙戠敓鍛藉懆鏈熺鐞嗙郴緇燂紝璁╁紑鍙戣呰兘澶熷畬鎴愭彁鍗囧熀綰褲佹墦鏍囩銆佹墽琛屽伐浣滄祦銆佹牴鎹緷璧栧叧緋昏拷韙彉鏇淬佺洃瑙嗗茍鍥劇ず嫻嬭瘯緇撴灉銆佹煡鐪嬩唬鐮佽鐩栫巼鍜岃繚鍙嶇紪鐮佹爣鍑嗙殑鎯呭喌絳変換鍔°?/p> Hudson鏄渶媧昏穬錛屾垚闀挎渶蹇殑寮婧愮ぞ鍖轟箣涓錛岀洰鍓嶆瘡鍛ㄤ笅杞借揪4000嬈★紝鏈夎秴榪?涓囦釜鍦ㄥ伐浣滅殑瀹夎瀹炰緥銆傚畠鐨勫紑鍙戣呰秴榪?60浜猴紝璐$尞鐨勫伐浣滈噺瓚呰繃137浜哄勾錛岀洰鍓嶅凡鍙戝竷浜嗚秴榪?00涓彂琛岀増鏈侶udson瀹為檯涓婃槸鐜板湪涓栫晫涓婃渶鍙楁榪庣殑寮婧怌I鏈嶅姟鍣ㄣ?/p> 鍥?鏄疉pache杞歡鍩洪噾浼氳繍琛孒udson鐨勫睆騫曟埅鍥撅紝鎮ㄥ彲浠ュ湪http://wiki.hudson-ci.org/display/HUDSON/Meet+Hudson 鐪嬪埌鏇村Hudson鐨勪嬌鐢ㄦ渚嬨?/p> 鍥?. Apache榪愯鐨凥udson Huddon鐨勪富瑕佷紭鐐瑰寘鎷細 鏄撲簬瀹夎銆傚彧瑕佹墽琛?#8220;java –jar hudson.war”錛屾垨鑰呭皢hudson.war閮ㄧ講鍒板簲鐢ㄦ湇鍔″櫒涓婂氨鍙互浜嗭紝涓嶉渶瑕佸叾浠栫殑瀹夎宸ヤ綔錛屼篃涓嶉渶瑕佸緩绔嬫暟鎹簱銆? 鍥?. Hudson鏀寔鐨勫垎甯冨紡鏋勫緩 Hudson閫氳繃澶ч噺鐨勬彃浠舵潵瀹炵幇鍏朵赴瀵岀殑鍔熻兘錛岃繖浜涙彃浠跺ぇ鑷村彲浠ュ垎涓轟互涓嬪嚑綾伙細 SCM銆侶udson緙虹渷鏀寔CVS鍜孲ubversion錛岄氳繃瀹夎鎻掍歡鏀寔Accurev銆丅itkeeper銆丆learCase銆丟it銆丮ercurial銆丳erforce銆丼tarTeam銆丼ynergy絳? 鍥?. Sonar Dashboard 緇撴潫璇?/p> 宸ユ鍠勫叾浜嬶紝蹇呭厛鍒╁叾鍣ㄣ備漢鏄伐鍏風殑涓誨銆侫 fool with a tool is still a fool錛堝偦瀛愭嬁鐫宸ュ叿榪樻槸鍌誨瓙錛夈備漢浠繪槸鍦ㄥ涔犲伐鍏楓佷嬌鐢ㄥ伐鍏楓佸垱閫犳洿濂界殑宸ュ叿錛屼互鏈熸彁楂樺伐浣滅殑鏁堢巼鍜屽搧璐ㄣ備漢瑕佹湁鏅烘収錛屽伐鍏瘋鍏堣繘銆?br /> |
<?xml version="1.0" encoding="UTF-8" ?>
<project name="framework-client" default="sonar" basedir=".">
<property name="project.name" value="framework-client"/>
<property name="src.dir" value="${basedir}/src/main/java" />
<property name="lib.dir" value="${basedir}/lib"/>
<!-- Out-of-the-box those parameters are optional -->
<!-- EXAMPLE FOR MYSQL
<property name="sonar.jdbc.url"
value="jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8" />
<property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver" />
<property name="sonar.jdbc.username" value="sonar" />
<property name="sonar.jdbc.password" value="sonar" />
-->
<!-- SERVER ON A REMOTE HOST -->
<!--
<property key="sonar.host.url" value="http://myserver:1234" />
-->
<!-- Define the Sonar task if this hasn't been done in a common script -->
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<classpath>
<pathelement location="${lib.dir}/sonar-ant-task-1.1.jar"/>
</classpath>
</taskdef>
<!-- Add the target -->
<target name="sonar">
<!-- list of mandatories Sonar properties -->
<property name="sonar.sources" value="${src.dir}" />
<property name="sonar.projectKey" value="org.example:${project.name}" />
<!-- list of optional Sonar properties -->
<!--
<property key="sonar.projectName" value="this value overrides the name defined in Ant root node" />
<property key="sonar.binaries" value="list of directories which contain for example the Java bytecode" />
<property key="sonar.tests" value="list of test source directories separated by a comma" />
<property key="sonar.libraries" value="list of paths to libraries separated by a comma (These libraries are for example used by the Sonar Findbugs plugin)" />
-->
<sonar:sonar key="${sonar.projectKey}" version="0.9" xmlns:sonar="antlib:org.sonar.ant"/>
</target>
</project>
5銆佽繍琛宎nt鑴氭湰錛岀湅鍒癰uild successfully鐨勬彁紺哄悗錛屽氨鍙互璁塊棶錛?a href="http://localhost:9000/">http://localhost:9000/鏉ユ煡鐪嬩唬鐮佽川閲忓鏌ョ粨鏋滀簡銆?br />
涓婅堪鏄嬌鐢⊿onar鍜宎nt鏈綆鍗曠殑姝ラ錛岀敤浜哠onar鑷甫鐨勫祵鍏ュ紡鏁版嵁搴揇erby錛屼互鍙妔tandalone鐨勫簲鐢ㄦ湇鍔″櫒錛屽綋鐒朵篃鏀寔浣跨敤鍏跺畠鏁版嵁搴擄紝姣斿錛歮ysql錛屽彧瑕佷慨鏀逛竴涓媠onar.properties鐨勯厤緗枃浠訛紝浠ュ強鍦╝nt鑴氭湰涓厤緗竴涓嬭繛鎺ユ暟鎹簱鐨勬柟寮忋傚彟澶栦篃鍙互浣跨敤tomcat銆乯boss絳夊簲鐢ㄦ湇鍔″櫒鏉ュ彂甯僑onar搴旂敤錛屽彧瑕佽繍琛屼竴涓婼onar鑷甫鐨勪竴涓剼鏈細build-war.bat灝卞彲浠ヤ簡錛岃繖閲屼笉鍐嶈榪般?br />