如何使用 bnd/maven-bundle-plugin 从 jar 依赖项将资源文件包含到 osgi 包中?
How to include resource file into osgi bundle from jar dependency with 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
?
您可以使用 maven-dependency-plugin
解压缩依赖项 jar,然后将资源包含在您的 jar 中。
<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
指令应该是 pom 相关的,参见 Include-Resource,您可以将 target
替换为 ${project.build.directory}
。
如果您有对 jar 的文件引用,您可以这样做
-includeresource: @path/to/file.jar!/some.xml
您使用 @
前缀表示资源在 jar 中,并使用来自 jar url 的 !/
语法。
棘手的部分是从我怀疑的项目依赖项中获取 jar 的路径。
我正在使用 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
?
您可以使用 maven-dependency-plugin
解压缩依赖项 jar,然后将资源包含在您的 jar 中。
<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
指令应该是 pom 相关的,参见 Include-Resource,您可以将 target
替换为 ${project.build.directory}
。
如果您有对 jar 的文件引用,您可以这样做
-includeresource: @path/to/file.jar!/some.xml
您使用 @
前缀表示资源在 jar 中,并使用来自 jar url 的 !/
语法。
棘手的部分是从我怀疑的项目依赖项中获取 jar 的路径。