아직로드되지 않은 두 번째 JAR에서 리소스 (일반 텍스트 파일)를로드하려고합니다. 이 리소스에는 사용할 두 번째 항아리에 클래스를 나타내는 문자열이 포함됩니다.로드되지 않은 다른 JAR에서 리소스로드
이 리소스를로드하는 올바른 방법을 찾는 데 문제가 있습니다. 이전의 비슷한 질문을 통해 훨씬 더 많은 것을 얻지 못했습니다. 여기에 내가 함께 일하고 있어요 무엇 :
public void readResource() {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
}
내가 (A WebappClassLoader되는 것을 포기 끝나는)이 클래스 로더에서 볼 수있는 디렉토리에있는 항아리의 목록이 있습니다 :
jarNames: [com.mysql.jdbc.jar, productivity-common.jar]
jarPath: /WEB-INF/lib
내가하려고 클래스 로더를 사용하여 파일을로드, 나는 NullPointerException이 받고 있어요 :
String path = loader.getResource("com/productivity/common/META-INF/providers/hello.txt").getPath();
이 작동 할 경우, 내 다음 단계는 InputStream를 사용하여이 파일의 값을 읽고, 새로운을 만들려고 할 것이다 동일한 두 번째 항아리에서 해당 값과 일치하는 클래스의 인스턴스입니다. 내가 읽고있는 것으로부터, 나는 그 클래스에 대한 경로를 사용하고 Class.forName ("value"). newInstance()를 사용 하겠지만, 나도 당연하다고 확신하지는 않는다.
도움을 주시면 감사하겠습니다. 나는 ClassLoader가 어떻게 작동하는지 배우고 (도움이되는 간단한) 프로젝트를 작성하려고 노력 중이다.
파일 경로가 동일합니까? jar 파일에서 com/test/abc.properties를 의미합니까? – kamoor
내 파일은 하나의 항아리에만 있습니다. 첫 번째 jar 패키지는 리소스가없는 com.test.forecaster입니다. 이것은 Tomcat 호출을 통해 webapp에 연결되는 주요 항아리입니다. 두 번째 항아리는 src/main/resources/META-INF/providers/hello.txt가 들어있는 com.productivity.common입니다. – giraffee
아래 질문에 답했습니다. 까다로운 부분은 getResources에서 올바른 디렉토리 구조를 제공하는 것입니다. jar 파일을 열고 경로를 찾으십시오. 여기서 나의 가정은 "META-INF/providers/hello.txt"입니다. – kamoor