Como posso descobrir recursos em uma jarra de Java com um nome curinga?
Pergunta
Eu quero descobrir todos os arquivos XML que meu ClassLoader está ciente do uso de um padrão de curinga. Existe alguma maneira de fazer isso?
Solução
Ela exige um pouco de artifícios, mas aqui está um relevante blog . Você primeiro descobrir as URLs dos frascos, em seguida, abrir o frasco e digitalizar seu conteúdo. Eu acho que você iria descobrir as URLs de todos os frascos, procurando por `/META-INF/MANIFEST.MF'. Diretórios seria outra questão.
Outras dicas
A Primavera ApplicationContext
pode fazer isso trivialmente:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationConext.xml");
Resource[] xmlResources = context.getResources("classpath:/**/*.xml");
Veja ResourcePatternResolver # getResources , ou ApplicationContext .
List<URL> resources = CPScanner.scanResources(new PackageNameFilter("net.sf.corn.cps.sample"), new ResourceNameFilter("A*.xml"));
colocar o trecho em seu pom.xml
<dependency>
<groupId>net.sf.corn</groupId>
<artifactId>corn-cps</artifactId>
<version>1.0.1</version>
</dependency>
Um arquivo JAR é apenas mais um arquivo ZIP, certo?
Então, eu suponho que você poderia interagir os arquivos jar usando http://java.sun.com/javase/6/docs/api/java/util/zip/ZipInputStream.html
Estou pensando em algo como:
ZipSearcher searcher = new ZipSearcher(new ZipInputStream(new FileInputStream("my.jar")));
List xmlFilenames = searcher.search(new RegexFilenameFilter(".xml$"));
Saúde. Keith.
Bem, não é de dentro Java, mas
jar -tvf jarname | grep xml$
irá mostrar-lhe todos os XMLs na jarra.