Как указать функцию для paxexam вместо артефакта maven?

Я работаю над большой кодовой базой, сборка которой создает пакеты 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, а имя функции просто указывает на все объявленные функции?


person David M. Karr    schedule 24.10.2017    source источник


Ответы (1)


Вы не можете, вам всегда нужно указывать Maven GAV. Итак, что вам нужно сделать, это: заменить существующий блок определения функций на этот.

features(
  maven()
    .groupId("com.att.detsusl")
    .artifactId("usl-servicefactory-impl")
    .type("xml")
    .classifier("features").versionAsInProject(), "usl-all"
)
person Achim Nierbeck    schedule 25.10.2017