Как я могу обнаружить ресурсы в банке Java с подстановочным именем?
Вопрос
Я хочу обнаружить все XML-файлы, о которых знает мой ClassLoader, используя шаблон подстановочных знаков.Есть какой-либо способ сделать это?
Решение
Это требует некоторой хитрости, но вот уместный запись в блоге.Сначала вы выясняете URL-адреса банок, затем открываете банку и сканируете ее содержимое.Я думаю, вы обнаружите URL-адреса всех jar-файлов, выполнив поиск `/META-INF/MANIFEST.MF'.Каталоги — другое дело.
Другие советы
Весна ApplicationContext
можно сделать это тривиально:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationConext.xml");
Resource[] xmlResources = context.getResources("classpath:/**/*.xml");
Видеть ResourcePatternResolver#getResources, или Контекст приложения.
List<URL> resources = CPScanner.scanResources(new PackageNameFilter("net.sf.corn.cps.sample"), new ResourceNameFilter("A*.xml"));
поместите фрагмент в свой pom.xml
<dependency>
<groupId>net.sf.corn</groupId>
<artifactId>corn-cps</artifactId>
<version>1.0.1</version>
</dependency>
JAR-файл — это всего лишь еще один ZIP-файл, верно?
Итак, я полагаю, вы могли бы перебирать jar-файлы, используя 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$"));
Ваше здоровье.Кит.
Ну, это не изнутри Java, а
jar -tvf jarname | grep xml$
покажет вам все XML-файлы в банке.