2008-09-25 4 views

Antwort

5

Es erfordert ein wenig Trickerei, aber hier ist eine relevante blog entry. Sie ermitteln zuerst die URLs der Gläser, öffnen dann das Glas und scannen seinen Inhalt. Ich denke, dass Sie die URLs aller Gläser entdecken würden, indem Sie nach `/META-INF/MANIFEST.MF 'suchen. Verzeichnisse wären eine andere Sache.

+0

Das sieht so aus, als würde es funktionieren, würde aber eine Menge Suchen erfordern, um zu den Dateinamen zu gelangen, die ich möchte. Ich denke, dass es einfacher wird, eine Datei zum Zeitpunkt des Aufbaus zu erstellen, die die Dateien enthält, die ich mir ansehe. Diese neue Datei hätte einen bekannten Namen und könnte mit dem ClassLoader gefunden werden. –

-4

Nun, ist es nicht von innen Java, aber

jar -tvf jarname | grep xml$

zeigt Ihnen alle XMLs in das Glas.

+2

Unfortuneately ich eine Lösung benötigen, die in Java ist. –

7

ein Frühlings-ApplicationContext kann dies trivialerweise tun:

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

Siehe ResourcePatternResolver#getResources oder ApplicationContext.

+0

Im neueren Frühling wird das Muster nicht funktionieren. Das Präfix muss 'classpath *:' sein, um die Ressourcen innerhalb von jars zu finden. Dies zumindest mit einer WAR-Datei und einer JAR-Bibliothek, die XML-Dateien enthält. – Kayaman

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

setzen das Snippet in Ihrem pom.xml

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

Dies scheint eine der einfachsten Lösungen zu sein. Die neueste Version ist 1.1.7 in maven central, Stand vom 20.8.2014. –