변경할 수없는 타사 Java 코드를 사용하는 Groovy 스크립트를 작성하고 있습니다. 이 코드는 (나쁘다고 생각합니다.) ClassLoader.getSystemClassLoader().getResourceAsStream("/hard/file/path/in/jar/file")
이며 파일을 읽을 예정입니다. 타사 코드는 우리가 이미 작성한 그루비 코드의 무리와 함께 통합 할 지금, 그러나SystemClassLoader를 사용한 Groovy 스크립트 클래스 경로 문제
java -cp "/path/to/jar/file" ...
를 사용하여, 그래서 우리는 끝내에서 실행하고 싶어 할 때
모든 자바에서 잘 어울린다.
우리는 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 Script에서 System ClassLoader의 클래스를로드하는 방법을 알고 있습니까 (예 : getSystemClassloader
컨텍스트 클래스 로더를 반환하는 등).
덕분에, 당신은 당신의 질문에
ClassLoader.getSystemClassLoader()
을 의미 가정 귀하의 답변은 % GROOVY_HOME % \ lib => 이미 시도되었지만 Groovy에 의해'-cp' 옵션으로 선택된 GroovyClassLoader % CLASSPATH % =>에 의해로드되었습니다. – Grooveek