我在写一个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