Я использую систему Java9 Module (работает на openjdk11)
У меня есть
- мигрировал с Java8, и код содержал классы, которые использовали механизм ServiceLoader.
модульный тест для этого класса, который пытается загрузить две реализации службы тестирования
реализации теста перечислены в файле META-INF / services
src/main/example/Service.java
public interface Service {
public static List<Service> loadServices(){
return StreamSupport.stream(ServiceLoader.load(Service.class).spliterator(),false)
.collect(Collectors.toList());
}
}
и
src/main/module-info.java
module example {
uses example.Service;
exports example;
}
и у меня есть такой тестовый модуль
src/main/example/ServiceTest.java
public ServiceTest {
@Test
void loadServices_should_find_TestServices{
List<Service> services = Service.loadServices();
assertEquals(2, services.size());
}
}
и у меня есть две службы тестирования в источнике теста:
src/main/example/TestService1.java
public TestService1 implements Service {}
src/main/example/TestService2.java
public TestService2 implements Service {}
src/test/resources/META-INF/services/example.Service
example.TestService1
example.TestService2
Я использую плагин maven-surefire-3.0.0-M3 без какой-либо конкретной конфигурации
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
, который корректно исправляет пример модуля (из файла surefireargs)
--patch-module example="D:\\git\\example\\target\\test-classes"
Когда я выполняю тест непосредственно в IntelliJ, тест успешно запускается, обнаруживаются две службы.
Тем не менее, когда я собираю модуль в maven, и тест выполняется безошибочно, он не находит сервисы и тест не пройден.
Как мне настроить верный запуск, чтобы найти TestServices, находящиеся в источниках тестирования? Я не могу определить объявление «обеспечивает ...» в информации модуля, поскольку они являются тестовыми сервисами. Что я делаю неправильно?