<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Read Sean

    Read me, read Sean.
    posts - 508, comments - 655, trackbacks - 9, articles - 4

    隨著項(xiàng)目越來越大,你的ANT腳本變得越來越臃腫,越來越依賴antcontrib來實(shí)現(xiàn)構(gòu)建邏輯?不想放棄對(duì)構(gòu)建過程和產(chǎn)出做精細(xì)的控制?恨不得自己寫ANT Task?

    等一等,在你考慮轉(zhuǎn)向Maven或者真正卷起袖子開始研究ANT Task的API之前,先聽我向你推薦Ruby/JRuby。相信我,也許這才是你真正需要的。

    在我看來構(gòu)建腳本最主要的要求是表達(dá)能力和控制能力,表達(dá)能力是我們應(yīng)該能夠很方便的告訴它我們要它做什么,而控制能力是我們告訴它如何去做,除了必要的 構(gòu)建命令的參數(shù)、依賴關(guān)系之外,它應(yīng)該能夠理解我們其他一些特殊要求。在項(xiàng)目相對(duì)簡單時(shí),ANT的XML格式的"腳本語言"能夠比較好的表達(dá)構(gòu)建者的要 求,至少比純Java的方式更加簡單清晰,于是幾乎從它誕生之日就成為Java領(lǐng)域當(dāng)仁不讓的頭號(hào)構(gòu)建工具。但是ANT也有它不夠用的時(shí)候,尤其在控制能 力上,為了實(shí)現(xiàn)實(shí)際使用中越來越復(fù)雜越來越精細(xì)的對(duì)構(gòu)建過程和產(chǎn)出的要求,ANT的使用者們開始對(duì)ANT進(jìn)行擴(kuò)展,最具影響力的"非官方"擴(kuò)展可能就是 antcontrib了,很多實(shí)際Java項(xiàng)目的構(gòu)建文件中我們都能夠找到它的影子。但是一堆taskdef和之類的夾雜在ANT腳本里,怎么看怎么覺得別扭,也嚴(yán)重影響構(gòu)建腳本的可讀性。

    我發(fā)現(xiàn)我需要的是一個(gè)具有完整功能腳本語言來寫我的構(gòu)建邏輯:一方面它要足夠簡單,我需要清晰的表達(dá)我的意圖,另一方面當(dāng)我需要的時(shí)候它要足夠強(qiáng)大來幫我實(shí)現(xiàn)精細(xì)的控制。我自然而然想到Ruby。

    由于Ruby是一個(gè)功能完整的工具,完全自己寫Ruby腳本來調(diào)用Java自己的構(gòu)建工具如javac、jar等等并非不可能,但是既然已經(jīng)有人做了輪 子,我們拿來用就是了,大不了自己再改裝一下,也少走些彎路。時(shí)下比較流行的解決方案有Buildr、Raven、Rant和Antwrap,它們各有特 點(diǎn),大家可以根據(jù)需要進(jìn)行選擇。

    我最終選了其中最"輕量"的Antwrap,原因嘛,我不想學(xué)新的API,我已經(jīng)熟悉ANT常用的Task,而且我希望盡可能多的自己控制構(gòu)建的過程和產(chǎn) 出。Antwrap最能夠滿足我的需要。而前不久JRuby剛剛發(fā)布了1.0版,這樣一來Ruby和Java的跨界引用變得更加容易,Ruby的實(shí)現(xiàn)自然 就選擇了JRuby。

    安裝JRuby和Antwrap相當(dāng)容易,只要把下載的jruby-bin-1.0.tar.gz/.zip解壓到本地,確保JAVA_HOME和 CLASSPATH的配置,然后gem install Antwrap (選擇Java版) 即可。為了順利加載Antwrap,需要在CLASSPATH中包含ANT的ant.jar和ant-launcher.jar。(當(dāng)然,如果想更加方便 的share你的成果,可以把a(bǔ)nt的文件拷貝到j(luò)ruby目錄下,在jruby的啟動(dòng)腳本加入必要的export/set命令,然后打包,這樣別人只要 從你提供的zip包解壓出來即可使用。)

    為了給大家一個(gè)直觀的感覺,舉個(gè)簡單的例子(貌似BlogJava沒有提供對(duì)Ruby代碼的默認(rèn)支持,大家將就看吧):
    ?1?require?'rubygems'
    ?2?gem?'Antwrap'
    ?3?require?'antwrap'
    ?4?
    ?5?@ant=AntProject.new(:name=>"SampleAntwrapBuild",?:basedir=>".")
    ?6?@cvsroot=":pserver:cvsuser:password@10.10.10.1/cvsrepo/SampleProduct"
    ?7?
    ?8?def?cvscheckout
    ?9?????@ant.cvs(
    10?????????:cvsroot=>"#{@cvsroot}",?
    11?????????:command=>"checkout?-A",?
    12?????????:package=>".",?
    13?????????:dest=>"cvsoriginal",?
    14?????????:compressionlevel=>"9")
    15?end
    16?
    17?def?cvsupdate
    18?????@ant.cvs(
    19?????????:cvsroot=>"#{@cvsroot}",?
    20?????????:command=>"update?-A?-d",?
    21?????????:package=>".",?
    22?????????:dest=>"cvsoriginal",?
    23?????????:compressionlevel=>"9")
    24?end
    25?
    26?def?compile(project_name)
    27?????@ant.javac(
    28?????????:srcdir=>"cvsoriginal/#{project_name}/src",?
    29?????????:destdir=>"cvsoriginal/#{project_name}",?
    30?????????:target=>"1.5",?
    31?????????:encoding=>"GBK")
    32?????@ant.copy(????:todir=>"cvsoriginal/#{project_name}")?do
    33?????????fileset(:dir=>"cvsoriginal/#{project_name}/src")?do
    34?????????????exclude(:name=>"**/*.java")
    35?????????end
    36?????end
    37?????@ant.jar(
    38?????????:destfile=>"build/#{project_name}.jar",?
    39?????????:basedir=>"cvsoriginal/#{project_name}",?
    40?????????:manifest=>"MANIFEST.MF")?do
    41?????????exclude(:name=>"src/**")
    42?????end
    43?end
    44?
    45?#?to?actually?call?your?target
    46?if?ARGV.empty?
    47?????puts?"Usage:?jruby?#{$0}?[target]"
    48?else
    49?????eval?ARGV[0]
    50?end
    51?

    可以看到幾乎都是我們熟悉的ANT Task,只是更加緊湊更加靈活,一旦掌握了最最基本的Ruby語法,用它寫出功能強(qiáng)大的構(gòu)建腳本可以說是分分鐘搞定。


    主站蜘蛛池模板: 全部免费国产潢色一级| 免费国产黄网站在线观看动图| 亚洲av午夜精品一区二区三区| 99久久99久久精品免费观看 | 国语成本人片免费av无码| 免费h视频在线观看| 一区免费在线观看| 国产偷国产偷亚洲清高APP| 亚洲精品二三区伊人久久| 亚洲高清在线观看| 亚洲综合网站色欲色欲| 免费国产a国产片高清网站| 成人毛片免费观看| 永久免费毛片在线播放| 亚洲大片免费观看| 久久久久久国产精品免费无码| 中文字幕视频免费在线观看 | 国产婷婷高清在线观看免费| 亚洲三级高清免费| 亚洲一级免费视频| 24小时免费看片| 69视频免费在线观看| 四虎影视成人永久免费观看视频| 一日本道a高清免费播放| 无码的免费不卡毛片视频| 免费观看四虎精品成人| 香蕉视频免费在线播放| 香港一级毛片免费看| 欧洲乱码伦视频免费国产| 直接进入免费看黄的网站| 深夜A级毛片视频免费| 老司机午夜免费视频| 无码AV动漫精品一区二区免费 | 亚洲精品第一国产综合精品99| 亚洲av麻豆aⅴ无码电影| 国产免费变态视频网址网站| 国产jizzjizz免费视频| gogo全球高清大胆亚洲| 久久精品国产亚洲5555| 亚洲成av人在线视| 亚洲白色白色在线播放|