META-INF/services를 덮어 쓰고 싶습니다. 항아리없이 작동합니까?META-INF를 (예 : JAR이 아닌) 분해 된 클래스 폴더에서 사용할 수 있습니까?
답변
예, META-INF/services
을 jar 파일없이 사용할 수 있습니다. 적어도 그것은 나의 테스트 (Java 6)에 따라 일어나는 일이다.
모든 jar 파일과 클래스 경로에있는 모든 디렉토리의 META-INF
디렉토리는 독립적으로 스캔 할 수 있으므로 기술적으로 이러한 META-INF
파일이 다른 jar 파일에서 파일을 무시하지 않지만 항목을 (로더 메커니즘에 따라 다름) 파일 중 하나 (클래스 로더 중 하나의 리소스)에 다른 파일보다 우선 순위가 있으므로 실제로 항목을 오버로드 할 수 있습니다. 이미 알았 듯이 그 중 하나는 javax.xml.datatype.FactoryFinder
입니다.
고마워요, 부모 클래스 로더의 META-INF/services/javax.xml.transform을 무시하고 있습니다. TransformerFactory, 그 목적을 위해 분명히 그것의 부모 - 마지막 기본적으로, 그래서 그것은 현재 클래스 로더 META-INF 콘텐츠를 재정의하지 않는다는 것에 동의하지만 그것은 부모의 것을 오버 라이딩하는 것처럼 보입니다. javax.xml.datatype.FactoryFinder.findJarServiceProvider –
참조 물론 당신은 당연한 것입니다 :-) 나는 내 대답을 업데이트하려고했습니다 ... 당신은 그 점을 알아야합니다. –
모든 클래스 로더 (적어도 모든 유 용한 클래스 로더)가 순서를 지정합니다. 물건은 한쪽 끝에서 다른 쪽 끝까지 검색됩니다. META-INF 디렉토리를 jar 또는 (비교) 프론트의 디렉토리에 추가하면 거기에있는 파일이 먼저 나옵니다. 마지막에 추가하면 마지막에 파일이 추가됩니다. 클래스 로더가 부모가 먼저 있고 부모가 있다면 물론 첫 번째 샷을 얻습니다.
대답은 '예'인 것처럼 보이지만 내 자신의 질문에 너무 빨리 싫어합니다. 다른 누군가가 명성을 얻게 할 것입니다 ... 이것은 어떤 경우 든 여기에서 대답을 찾을 수 없거나 인터넷 검색으로 찾지 못했습니다 –