Я работаю над большой кодовой базой, сборка которой создает пакеты OSGi, которые загружаются в Karaf. У нас есть куча тестов PaxExam. Все эти существующие тесты загружают функции с помощью своего maven GAV.
Я хотел бы написать тест, единственной целью которого является проверка загрузки всех необходимых пакетов. Сам тестовый метод может быть пустым.
Я хотел бы указать функцию для загрузки только по имени функции, а не по артефакту maven, связанному с этой функцией.
Например, вот существующий блок параметров конфигурации, похожий на все остальные блоки в других тестах:
@Configuration
public Option[] config() {
return new Option[] {
karafDistributionConfiguration()
.frameworkUrl(maven().groupId("org.apache.karaf").artifactId("apache-karaf").type("zip")
.versionAsInProject())
.useDeployFolder(false).unpackDirectory(new File("target/paxexam/unpack/")),
systemProperty("sl.config.dir").value("${karaf.etc}"),
features(maven().groupId("com.att.detsusl").artifactId("usl-servicefactory-impl").type("xml")
.classifier("features").versionAsInProject(), "webconsole", "usl-servicefactory"),
logLevel(LogLevelOption.LogLevel.WARN),
when(Boolean.parseBoolean(System.getProperty("debug"))).useOptions(KarafDistributionOption.debugConfiguration("5005", true)),
keepRuntimeFolder()
};
}
Вот тело соответствующего файла functions.xml:
<feature name='usl-all'>
<feature>usl-servicefactory</feature>
</feature>
Как я могу преобразовать предыдущий блок параметров конфигурации, чтобы он указывал функцию «usl-all», без необходимости указывать Maven GAV?
Обновление:
К сожалению, я не могу написать тест, который просто проверяет, загружается ли определенная функция, не проходя этот неочевидный маршрут.
Тем не менее, я полагаю, что это лучшее, что я могу сделать, за исключением другой проблемы, с которой я здесь столкнулся.
Предоставленное решение на самом деле не работает, потому что POM для этого пакета не определяет этот артефакт как зависимость, поэтому «versionAsInProject()» по существу терпит неудачу. Цель пакета — просто объявить функцию и функцию, которую она включает, которая поступает из другого пакета, который объявляет этот артефакт как зависимость.
Мое намерение состояло в том, чтобы написать тест в пакете, который объявляет содержащую функцию, даже если он не имеет никаких зависимостей от maven или создает какие-либо артефакты, кроме объявления функции.
Я попытался просто жестко закодировать строку версии, аля «версия («...»)», чтобы предоставить версию, которую предоставила бы «версияAsInProject()». Это работает, но это неприемлемое решение.
Затем я попытался использовать GA самого модуля POM вместе с «versionAsInProject()». Это на самом деле работает, но мне действительно нужно понять, что это на самом деле делает. Упомянутый GA и имя функции не имеют большого отношения друг к другу. Основная идея заключается в том, что вообще не имеет значения, какой GA упоминается, если он существует где-то в POM, а имя функции просто указывает на все объявленные функции?