Я пишу скрипт Groovy, который использует сторонний Java-код, который я не могу изменить.Этот код использует (мне кажется, плохо) ClassLoader.getSystemClassLoader().getResourceAsStream("/hard/file/path/in/jar/file")
и ожидает чтения файла.
Все хорошо с Java при использовании java -cp "/path/to/jar/file" ...
Однако сторонний код теперьчтобы быть интегрированным с кучей кода Groovy, который мы уже написали, поэтому мы хотели запустить его из groovy.
Итак, мы написали скрипт Groovy, пусть он вызывает test.groovy
, и запустили его как groovy -cp "/path/to/jar/file" test.groovy
.
Проблема в том, что код не может получить доступ к файловому ресурсу, так как кажется, что Groovy не загружает свои jar-файлы непосредственно в System ClassLoader.
Для доказательства, с Thread.currentThread().getContextClassLoader().getResourceAsStream("/hard/file/path/in/jar/file")
в скрипте Groovy я могу прочитать файл, но с ClassLoader.getSystemClassLoader().getResourceAsStream("/hard/file/path/in/jar/file")
я не могу.
Итак, кто-нибудь знает, как загрузить класс в System ClassLoader из скрипта Groovy, не начав пытатьсягрязные хаки (например, метаклассирование getSystemClassloader
для возврата контекстного загрузчика классов)?