와일드 카드 이름의 Java 항아리에서 자원을 어떻게 발견 할 수 있습니까?
문제
내 클래스 로더가 와일드 카드 패턴을 사용하는 것을 알고있는 모든 XML 파일을 발견하고 싶습니다. 이것을 할 방법이 있습니까?
해결책
약간의 속임수가 필요하지만 여기에 관련성이 있습니다. 블로그 항목. 먼저 항아리의 URL을 알아 내고 항아리를 열고 내용물을 스캔합니다. 나는 당신이 '/meta-inf/manifest.mf'를 찾아 모든 항아리의 URL을 발견 할 것이라고 생각합니다. 디렉토리는 또 다른 문제가 될 것입니다.
다른 팁
용수철 ApplicationContext
이 작업을 사소하게 할 수 있습니다.
ApplicationContext context = new ClassPathXmlApplicationContext("applicationConext.xml");
Resource[] xmlResources = context.getResources("classpath:/**/*.xml");
보다 ResourcePatternResolver#getResources, 또는 ApplicationContext.
List<URL> resources = CPScanner.scanResources(new PackageNameFilter("net.sf.corn.cps.sample"), new ResourceNameFilter("A*.xml"));
Snippet을 pom.xml에 넣으십시오
<dependency>
<groupId>net.sf.corn</groupId>
<artifactId>corn-cps</artifactId>
<version>1.0.1</version>
</dependency>
Jar-File은 또 다른 지퍼 파일입니다.
그래서 나는 당신이 사용하는 Jar-Files를 반복 할 수 있다고 생각합니다 http://java.sun.com/javase/6/docs/api/java/util/zip/zipinputstream.html
나는 다음과 같은 생각을 생각하고있다.
ZipSearcher searcher = new ZipSearcher(new ZipInputStream(new FileInputStream("my.jar")));
List xmlFilenames = searcher.search(new RegexFilenameFilter(".xml$"));
건배. 키이스.
글쎄, 그것은 자바 내에서 온 것이 아니라
jar -tvf jarname | grep xml$
항아리의 모든 XML을 보여줄 것입니다.