How to include resource file into osgi bundle from jar dependency with bnd/maven-bundle-plugin?

匿名 (未验证) 提交于 2019-12-03 01:34:02

问题:

I'm using maven-bundle-plugin (bnd effectively).

It's straightforward to include a resource file from sources.

For example, a resource file (src/main/resources/some.xml) is moved under target directory (target/classes/some.xml) during build time and can be included into the bundle using <Include-Resource> instruction:

<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> 

Let us have a dependency:

<dependency>     <groupId>com.example</groupId>     <artifactId>library</artifactId>     <version>1.0.0</version> </dependency> 

How to reference resource file inside dependent jar?

In other words, how to

  • specify something like this:

    com.example:library:1.0.0:jar/some.xml 
  • instead of this:

    target/classes/some.xml 

so that resource from one of the dependency appeared in output bundle jar?

回答1:

You can use the maven-depencency-plugin to uncompress your dependencie jar and then include the resource in your 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> 

The Include-Resource instructions is supposed to be pom relative, see Include-Resource, you can probably replace targetwith ${project.build.directory}.



回答2:

If you have a file reference to the jar, you can do

-includeresource: @path/to/file.jar!/some.xml

You use the @ prefix to say the resource is in the jar and the !/ syntax from jar urls.

The tricky part will be getting a path to the jar from the project dependencies I suspect.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!