내 클래스 경로에있는 디렉토리에 리소스 파일 모음이있는 경우 ClassLoader.getResources(location)
을 사용하여 열거 할 수 있습니다.classpath에서 .jar의 리소스를 어떻게 찾습니까?
예를 들어 클래스 경로에 /mydir/myresource.properties
이있는 경우 클래스 로더의 getResources("mydir")
을 호출하고 myresource.properties
이 포함 된 열거 형을 가져올 수 있습니다.
.jar에 정확히 동일한 리소스를 저장할 때 전화를 걸 때 URL 열거에 아무 것도 표시되지 않습니다. 나는 단지 폴더 구조를 그 폴더를 포함하는 jar 파일로 바꿨다. (webapp이기 때문에 jar 파일은 /WEB-INF/lib
에있다.) 또한 getResourceAsStream(location)
을 사용하여 다른 리소스를 개별적으로 얻으려는 전화가 여러 개 있으며 모두 잘 작동합니다.
리소스가 .jar에있을 때 리소스를 열거하는 것과 다른 점은 무엇입니까?
업데이트 - 컨테이너 외부의 동작을 재현했습니다. 다음 코드 조각은 dirProperties
오브젝트의 키가 패키지의 자원 이름으로 설정되지만, 패키지가 .jar 인 경우 Properties.load (InputStream) 메소드 중에 NullPointerException을 발생시킵니다.
Properties dirProperties = new Properties();
dirProperties.load(this.getClass().getClassLoader().getResourceAsStream(location));
컨테이너 (톰캣 5.5)에 동일한 코드도 예외가 발생하지 않습니다하지만 파일이 .JAR에있을 때 빈 속성 객체를 생성합니다.
이전에는 이러한 차이점을 발견 한 적이 없지만 JAR에 패키지 된 경우 주어진 클래스 로더 구현이 리소스를 URL로 표현할 수없는 상황을 상상할 수 있습니다. 그러나 내가 사용 해본 서버 (Jboss/Tomcat) *는 이것을 할 수 있습니다. – skaffman