例如,我最近需要用 Groovy 存取遠端的 SVN Repository,如果不考慮直接用 shell 執行 svn 指令(若這麼做就不夠 pure java 了),一般的作法是自行參考 SVNKIT 這個 library;但是,身為想要準時收工下班的開發人員,光是看到 SVNKIT 的 architecture diagram 頭就暈了。
所以我先找到 svnant 這個 SVN Ant Task,它可以用 Ant 的 build.xml 定義 svn 版本控制系統的操作。範例:
<svn username="guest" password="">
<checkout url="http://subclipse.tigris.org/svn/subclipse/trunk/svnant/" revision="HEAD" destPath="svnant" />
</svn>
不過,這畢竟是 XML 的寫法,不容易整合到程式裡面(如果要用 shell 去跑 ant 就等於多繞了一圈,不如直接跑 svn 指令)。
所以,我考慮用 Groovy + AntBuilder 來解決,測試之後相當順利。
@GrabConfig(systemClassLoader=true)@GrabResolver(name='monkproject', root='http://www.monkproject.org/maven2/')@Grab(group='org.tmatesoft.svnkit', module='svnkit', version='1.3.5')@Grab(group='org.tmatesoft.svnkit', module='svnkit-javahl', version='1.3.5')@Grab(group='org.monkproject', module='svnant', version='1.1.0-rc2')@Grab(group='org.monkproject', module='svnClientAdapter', version='1.1.0-rc2')def ant = new AntBuilder()ant.typedef(resource: 'org/tigris/subversion/svnant/svnantlib.xml')ant.svn(username: 'guest', password: 'password') {checkout(url: 'http://svn.apache.org/repos/asf/spamassassin/trunk', destPath: './test-svn')}
這支程式用到了 svnant + svnClientAdapter + svnkit + svnkit-javahl 四個套件,所以前面的 @Grab 動作都是為了取得這些 .jar 套件檔案。其中 svnant + svnClientAdapter 好死不死 Grab 預設的 maven2 repository 並沒有提供,所以借來了 monkproject 這個專案的 maven2 網址暫時擋一下。
若把 @Grab 相關的 @Annotation 拿掉,其實真正的程式碼不過才 5 行而已,誰說 Java 程式一定要寫得落落長呢?趕快來玩 Groovy 吧... Groovy Taiwan 歡迎您!
沒有留言:
張貼留言