Apache OSGI Karaf's functions-maven-plugin:create-kar завершается сбоем в пакете features.xml с использованием синтаксиса PAX wrap/bnd

Проблемная строка - первый пакет в этом фрагменте функций

<feature name="stuff-common-security">
    <bundle>wrap:mvn:org.springframework/ldap/1.3.0.RELEASE,mvn:com.mycompany.stuff/stuff-common-security/1.0-SNAPSHOT/bnd/spring-ldap</bundle>
    <bundle>mvn:org.springframework.security/spring-security-core/3.1.0.RELEASE</bundle>
    <bundle>mvn:org.springframework.security/spring-security-ldap/3.1.0.RELEASE</bundle>
    <bundle>mvn:com.mycompany.stuff/stuff-common-security/1.0-SNAPSHOT</bundle>
</feature>

Цель create-kar не выполняется с этой ошибкой:

[ERROR] Failed to execute goal org.apache.karaf.tooling:features-maven-plugin:2.2.9:create-kar (create-kar) on project stuff-demo:
 Failed to create kar archive: 
 Could not find artifact org.springframework:ldap:stuff-common-security:1.0-SNAPSHOT:1.3.0.RELEASE,mvn:com.mycompany.stuff 
in maven.mycompany.com (http://maven.mycompany.com/artifactory/libs-release-local)
[ERROR]
[ERROR] Try downloading the file manually from the project website.
[ERROR]
[ERROR] Then, install it using the command:
[ERROR] mvn install:install-file -DgroupId=org.springframework -DartifactId=ldap 
       -Dversion=1.3.0.RELEASE,mvn:com.mycompany.stuff -Dclassifier=1.0-SNAPSHOT 
       -Dpackaging=stuff-common-security -Dfile=/path/to/file

Кажется, что он неправильно обрабатывает текст элемента пакета и рассматривает оболочку как часть номера версии.

<bundle>wrap:mvn:org.springframework/ldap/1.3.0.RELEASE,mvn:com.mycompany.stuff/stuff-common-security/1.0-SNAPSHOT/bnd/spring-ldap</bundle>

Сам Караф доволен этим синтаксисом связки, поэтому я не думаю, что допустил ошибку.

Есть ли альтернативный способ выразить это, чтобы я не получил эту ошибку от create-kar?

1 ответ

Решение

Попробуйте экранировать запятую с помощью "\" или использовать раздел CDATA (у меня были некоторые проблемы с экранированием, отмеченные в списке рассылки):

<bundle><![CDATA[
wrap:mvn:org.springframework/ldap/1.3.0.RELEASE,mvn:com.mycompany.stuff/stuff-common-security/1.0-SNAPSHOT/bnd/spring-ldap
]]></bundle>

Если это не сработает - я подозреваю, что плагин не использует фактические обработчики URL, а просто удаляет wrap протокол, поэтому предложил бы подать ошибку

Поскольку вы используете классификаторы, вы можете просто встроить в pom для stuff-common-security но это может сделать вашу сборку слишком волосатой =]

Если это так, создайте модуль maven только с этими двумя модулями в качестве зависимостей, а затем используйте встраиваемые зависимости BND/maven-bundle-plugin для их объединения.

Другие вопросы по тегам