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
so that resource from one of the dependency appeared in output bundle jar?
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}.
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.