Spring 5.1.2 PathMatchingResourcePatternResolver обнаруживает файлы в корне jar - PullRequest
0 голосов
/ 11 ноября 2018

Я читал весенние документы о classpath * и нашел:

Обратите внимание, что classpath *: в сочетании с шаблонами в стиле Ant будет надежно работать по крайней мере с одним корневым каталогом до запуска шаблона, если только фактические целевые файлы не находятся в файловой системе. Это означает, что шаблон, такой как classpath *: *. Xml, не будет извлекать файлы из корня файлов JAR, а только из корня расширенных каталогов. Это происходит из-за ограничения в методе JDK ClassLoader.getResources (), который возвращает местоположения файловой системы только для переданной пустой строки (указывая потенциальные корни для поиска).

когда я пытался это сделать локально, я был озадачен тем, что он работал с корнем jar, пример:

ресурс test.txt существует в корне test2 (это класс, из которого я запускаю приложение), и в test есть также test.txt, который зависит от test2

Project test2:

    @RunWith(JUnit4.class)
public class TestDriver {
@Test
public void test() throws IOException {

    PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    System.out.println(Arrays.toString(resolver.getResources("classpath*:*test.txt")));
    Enumeration<URL> enumeration= this.getClass().getClassLoader().getResources("");
    int count=0;
    while(enumeration.hasMoreElements()){
       URL url= enumeration.nextElement();
       System.out.println(url.getFile());
        count++;
    }
    System.out.println(count);
}

}

вывод:

[URL [jar: файл: / C: /.../. M2 / репозиторий / com / test / 1.0-SNAPSHOT / test-1.0-SNAPSHOT.jar! /Test.txt]] ---> Вопрос, как этот текстовый файл обнаружен, когда он находится в корне фляги, согласно документам это не должно быть обнаружено

из "this.getClass (). GetClassLoader (). GetResources (" ")" есть только 2 корня (тестовый jar не является их частью):

/ .... / test2 / цель / тест-классы /

/ .... / test2 / цель / классы /

2

1 Ответ

0 голосов
/ 11 ноября 2018

Документ относится к надежности поиска ресурса в этом конкретном случае.
Вы также можете прочитать в конце этой части предупреждения PathMatchingResourcePatternResolver javadoc (выделено мной):

ВНИМАНИЕ: обратите внимание, что "classpath *:" при сочетании с шаблонами в стиле Ant будет надежно работать только по крайней мере с одним корневым каталогом до образец начинается

...

Эта ResourcePatternResolver реализация пытается смягчить ограничение поиска корня jar через самоанализ URLClassLoader и оценка манифеста "java.class.path"; однако без переносимости гарантии.

Похоже, это работает для вашего случая.

...