2008-09-25 14 views

Respuesta

5

Requiere un pequeño truco, pero aquí hay un relevante blog entry. Primero averigua las URL de los jar, luego abre el jar y escanea sus contenidos. Creo que descubrirá las URL de todos los archivos jar buscando `/META-INF/MANIFEST.MF '. Los directorios serían otra cosa.

+0

Parece que funcionaría pero implicaría una buena cantidad de búsqueda para obtener los nombres de archivo que quiero. Estoy pensando que será más fácil crear un archivo en tiempo de compilación que contenga los archivos que estoy viendo. Este nuevo archivo tendría un nombre conocido y se podría encontrar utilizando el ClassLoader. –

-4

Bueno, no es desde dentro de Java, pero

jar -tvf jarname | grep xml$

le mostrará todas las XMLs en el frasco.

+2

Unfortuneately Necesito una solución que está dentro de Java. –

1

Un archivo JAR es simplemente otro archivo ZIP, ¿verdad?

Así que supongo que se podría repetir el tarro-archivos usando http://java.sun.com/javase/6/docs/api/java/util/zip/ZipInputStream.html

Estoy pensando en algo como:

ZipSearcher searcher = new ZipSearcher(new ZipInputStream(new FileInputStream("my.jar"))); List xmlFilenames = searcher.search(new RegexFilenameFilter(".xml$"));

Saludos. Keith.

7

Una primavera ApplicationContext puede hacer esto trivialmente:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationConext.xml"); 
Resource[] xmlResources = context.getResources("classpath:/**/*.xml"); 

Ver ResourcePatternResolver#getResources o ApplicationContext.

+0

En primavera más reciente, el patrón no funcionará. El prefijo debe ser 'classpath *:' para encontrar los recursos dentro de jar. Esto al menos con un archivo war y una biblioteca jar que contiene archivos xml. – Kayaman

6
List<URL> resources = CPScanner.scanResources(new PackageNameFilter("net.sf.corn.cps.sample"), new ResourceNameFilter("A*.xml")); 

colocará el fragmento en su pom.xml

<dependency> 
    <groupId>net.sf.corn</groupId> 
    <artifactId>corn-cps</artifactId> 
    <version>1.0.1</version> 
</dependency> 
+0

Esta parece ser una de las soluciones más fáciles. La última versión es 1.1.7 en maven central, desde el 8-20-2014. –

Cuestiones relacionadas