¿Cómo puedo descubrir recursos en un jar Java con un nombre comodín?
Pregunta
Quiero descubrir todos los archivos xml que mi ClassLoader conoce utilizando un patrón comodín. ¿Hay alguna manera de hacer esto?
Solución
Requiere un pequeño truco, pero aquí hay un entrada del blog . Primero averigua las URL de los frascos, luego abre el frasco y escanea su contenido. Creo que descubrirías las URL de todos los archivos jar buscando "/META-INF/MANIFEST.MF". Los directorios serían otro asunto.
Otros consejos
Un Spring ApplicationContext
puede hacer esto trivialmente:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationConext.xml");
Resource[] xmlResources = context.getResources("classpath:/**/*.xml");
Consulte ResourcePatternResolver # getResources , o ApplicationContext .
List<URL> resources = CPScanner.scanResources(new PackageNameFilter("net.sf.corn.cps.sample"), new ResourceNameFilter("A*.xml"));
ponga el fragmento en su pom.xml
<dependency>
<groupId>net.sf.corn</groupId>
<artifactId>corn-cps</artifactId>
<version>1.0.1</version>
</dependency>
Un archivo JAR es solo otro archivo ZIP, ¿verdad?
Supongo que puedes iterar los archivos jar utilizando http://java.sun.com/javase/6/docs/api/java/util/zip/ZipInputStream.html
Estoy pensando en algo como:
ZipSearcher buscador = nuevo ZipSearcher (nuevo ZipInputStream (nuevo FileInputStream (" my.jar ")));
List xmlFilenames = searcher.search (nuevo RegexFilenameFilter (" .xml $ "));
Saludos. Keith.
Bueno, no es desde Java, sino
le mostrará todos los XML en el jar.