我在寫一個Groovy腳本,它使用了第三方Java代碼,我無法更改。 此代碼使用(很糟糕,我認爲)ClassLoader.getSystemClassLoader().getResourceAsStream("/hard/file/path/in/jar/file")
並期望讀取文件。Groovy腳本類路徑與SystemClassLoader問題
一切使用時java -cp "/path/to/jar/file" ...
不過,現在的第三方代碼是用一堆我們已經編寫Groovy代碼進行整合,所以我們想從常規運行它從Java順利。
因此,我們編寫了一個Groovy腳本,讓它調用test.groovy
,並將其作爲groovy -cp "/path/to/jar/file" test.groovy
運行。
問題是,代碼無法訪問文件資源,因爲它似乎Groovy不直接加載它在System ClassLoader中的罐子。
爲了證明,在Groovy腳本中使用Thread.currentThread().getContextClassLoader().getResourceAsStream("/hard/file/path/in/jar/file")
,我可以讀取該文件,但是使用ClassLoader.getSystemClassLoader().getResourceAsStream("/hard/file/path/in/jar/file")
,我不能。
那麼,有沒有人知道如何從Groovy腳本加載系統類加載器中的類,而不開始嘗試一些骯髒的黑客(如元類getSystemClassloader
返回上下文類加載器)?
感謝您的回答 %GROOVY_HOME%\ lib =>已經嘗試過,但由Groovy加載GroovyClassLoader %CLASSPATH%=>由Groovy選爲'-cp'選項 – Grooveek 2012-03-30 09:15:23