Я читал весенние документы о 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