GroovyでRootLoaderによるクラスパスの拡張
Javaプログラムを起動する際にやらなきゃいけない面倒な作業の一つとして、クラスパスを通すことがあります。
Groovyでしたら、動的にクラスパスを追加できますのでとても便利です。
GinA P418より
def loader = this.class.classLoader.rootLoader loader.addURL(new File('xxxxx.jar').toURL()) loader.URLs.each{ println it } evaluate(new File('yyyyy.groovy'))
xxxxx.jarがクラスパスに追加したいjarファイルで必要な分だけ指定します。
yyyyy.groovyが実際に実行したいGroovyスクリプトファイルです。
簡単便利ですね!
2009/05/06追記
もうちょっと便利にしたバージョン。
コマンドライン引数の帳尻を合わせておくのがポイント。
Invoke.groovy
if (!args || !args[0]) { println 'Please specify the script file.' System.exit(0) } // libフォルダにある*.jarファイルをロードする def loader = this.class.classLoader.rootLoader new File('./lib/').listFiles().findAll{ it.name =~ /\.jar$/ }.each{ loader.addURL(it.toURL()) } // コマンドライン引数の帳尻あわせ def script = args[0] args = (args as List).tail() as String[] println '---loading--------------------' loader.URLs.each{ println it } println '---invoke---------------------' println "script: ${script}" println "args : ${args}" println '------------------------------' // 実行 evaluate(new File(script))
実行例
>groovy Invoke.groovy {実行したいスクリプト} {スクリプトに渡すコマンドライン引数}