Как включить файл ресурсов в комплект osgi из зависимости jar с помощью bnd/maven-bundle-plugin?
Я использую maven-bundle-plugin
(bnd
эффективно).
Это просто, чтобы включить файл ресурсов из источников.
Например, файл ресурса (src/main/resources/some.xml
) перемещен под target
каталог (target/classes/some.xml
) во время сборки и может быть включен в комплект с помощью <Include-Resource>
инструкция:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.0.1</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Include-Resource>
some.xml=target/classes/some.xml,
</Include-Resource>
</instructions>
</configuration>
</plugin>
Давайте иметь зависимость:
<dependency>
<groupId>com.example</groupId>
<artifactId>library</artifactId>
<version>1.0.0</version>
</dependency>
Как ссылаться на файл ресурса внутри зависимого jar
?
Другими словами, как
укажите что-то вроде этого:
com.example:library:1.0.0:jar/some.xml
вместо этого:
target/classes/some.xml
так что ресурс из одной зависимости появился в выходном пакете jar
?
2 ответа
Вы можете использовать maven-depencency-plugin
распаковать вашу зависимую банку и затем включить ресурс в вашу банку.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<markersDirectory>${project.build.directory}/dependencies/dependency-maven-plugin-markers</markersDirectory>
<artifactItems>
<artifactItem>
<groupId>DEPENDENCY_GROUPID</groupId>
<artifactId>DEPENDENCY_ARTIFACTID</artifactId>
<type>OPTIONAL_DEPENCENCY_TYPE</type>
<outputDirectory>${project.build.directory}/dependencies/DEPENDENCY_ARTIFACTID</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
...
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
...
<instructions>
...
<Include-Resource>target/dependencies/DEPENDENCY_ARTIFACTID/some.xml</Bundle-Activator>
</instructions>
</configuration>
</plugin>
Include-Resource
инструкции должны быть относительными, см. Include-Resource, вы можете заменить target
с ${project.build.directory}
,
Если у вас есть ссылка на файл в банке, вы можете сделать
-includeresource: @path/to/file.jar!/some.xml
Вы используете @
Префикс, чтобы сказать, что ресурс находится в банке, а !/
Синтаксис из банок URL.
Сложнее всего будет найти путь к банке из зависимостей проекта, которые я подозреваю.