変更できないサードパーティの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
のようにコンテキストクラスローダーを返す)
感謝あなたの答えは %GROOVY_HOME%\ lib =>すでに試してみましたが、GroovyClassLoaderによってロードされました。 %CLASSPATH%=> '-cp'オプションとしてGroovyが選んだ – Grooveek