No Programming, No Life

プログラミング関連の話題や雑記

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 {実行したいスクリプト} {スクリプトに渡すコマンドライン引数}