Как мне указать функцию для paxexam вместо артефакта maven?
Я работаю над большой кодовой базой, сборка которой создает пакеты OSGi, которые загружаются в Karaf. У нас есть куча тестов PaxExam. Все эти существующие тесты загружают функции их maven GAV.
Я хотел бы написать тест, единственной целью которого является проверка загрузки всех необходимых пакетов. Сам метод теста может быть пустым.
Я хотел бы указать функцию для загрузки только по имени функции, а не по артефакту maven, связанному с этой функцией.
Например, вот существующий блок Option config, который похож на все другие блоки в других тестах:
@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()
};
}
Вот тело соответствующего файла features.xml:
<feature name='usl-all'>
<feature>usl-servicefactory</feature>
</feature>
Как можно изменить предыдущий блок параметров конфигурации, чтобы он указывал функцию "usl-all" без указания Maven GAV?
Обновление:
К сожалению, я не могу написать тест, который просто проверяет, загружается ли конкретная функция, не пройдя этот неочевидный маршрут.
Тем не менее, я полагаю, что это лучшее, что я могу сделать, за исключением другой проблемы, с которой я здесь сталкиваюсь.
Предоставленное решение на самом деле не работает, потому что POM для этого комплекта не указывает этот артефакт как зависимость, поэтому "versionAsInProject()" по существу не работает. Цель пакета - просто объявить функцию и включенную в нее функцию, которая поступает из другого пакета, который объявляет этот артефакт как зависимость.
Я намеревался написать тест в комплекте, который объявляет содержащую функцию, даже если он не имеет никаких зависимостей maven или создает какой-либо артефакт, кроме объявления функции.
Я попытался просто жестко закодировать строку версии, ala 'version("...")', чтобы предоставить версию, которую предоставила бы "versionAsInProject()". Это работает, но это не приемлемое решение.
Поэтому я попытался использовать GA самого модуля POM вместе с "versionAsInProject()". Это на самом деле работает, но мне действительно нужно понять, что это на самом деле делает. Указанный GA и имя объекта не имеют ничего общего друг с другом. Является ли основная идея, что вообще не имеет значения, на какую GA ссылаются, если она где-то существует в POM, а имя функции просто смотрит на все объявленные функции?
1 ответ
Вы не можете, вам всегда нужно указывать Maven GAV. Так что вам нужно сделать: заменить существующий блок определения функций на этот.
features(
maven()
.groupId("com.att.detsusl")
.artifactId("usl-servicefactory-impl")
.type("xml")
.classifier("features").versionAsInProject(), "usl-all"
)