2012-03-30 11 views
2

変更できないサードパーティのJavaコードを使用するGroovyスクリプトを作成しています。 このコードは(間違いなく、私は思います)ClassLoader.getSystemClassLoader().getResourceAsStream("/hard/file/path/in/jar/file") とファイルを読むことを期待しています。 java -cp "/path/to/jar/file" ...SystemClassLoaderでのGroovyスクリプトのクラスパスの問題

を使用した場合

すべてがしかし、サードパーティのコードは、我々はすでに書いたGroovyのコードの束と統合するようになりましたので、我々はグルーヴィーからそれを実行してみたかった、Javaからよく合います。

私たちはGroovyスクリプトを書いて、test.groovyを呼び出し、それをgroovy -cp "/path/to/jar/file" test.groovyとして実行しました。

問題は、GroovyがSystem ClassLoaderのjarを直接ロードしないように見えるため、コードがファイルリソースにアクセスできないことです。

確かに、Groovyスクリプト内でThread.currentThread().getContextClassLoader().getResourceAsStream("/hard/file/path/in/jar/file")を使用すると、私はファイルを読むことができますが、ClassLoader.getSystemClassLoader().getResourceAsStream("/hard/file/path/in/jar/file")で読むことはできません。

Groovy ScriptからSystem ClassLoaderのクラスをロードする方法を知っている人は誰ですか(metaclassing getSystemClassloaderのようにコンテキストクラスローダーを返す)

答えて

1

あなたにも、あなたのスクリプトを実行すると、そのようにシステムクラスローダにjarファイルを追加してみてください:

ClassLoader.systemClassLoader.addURL new File('/path/to/jar/file').toURI().toURL() 

PS:私はあなたの質問でClassLoader.getSystemClassLoader()を意味すると仮定ではなく、ためSystem.getSystemClassLoader()

0

Groovyプロセスを開始する前に、あなたのjarファイルを%GROOVY_HOME%\libフォルダに入れてみるか、Groovyコマンドのラッパーを作成して%CLASSPATH%を変更してみてください。

+0

感謝あなたの答えは %GROOVY_HOME%\ lib =>すでに試してみましたが、GroovyClassLoaderによってロードされました。 %CLASSPATH%=> '-cp'オプションとしてGroovyが選んだ – Grooveek

関連する問題