我有一个OSGi项目,它包含一个带编译范围的sesame-runtime-osgi依赖项。
<dependency>
<groupId>org.openrdf.sesame</groupId>
<artifactId>sesame-runtime-osgi</artifactId>
<version>${sesame.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
sesame-runtime-osgi工件包含多个运行时依赖项。例如:
+- org.openrdf.sesame:sesame-runtime-osgi:jar:2.7.13:compile
| +- org.openrdf.sesame:sesame-http-client:jar:2.7.13:compile
| | +- org.openrdf.sesame:sesame-http-protocol:jar:2.7.13:compile
| | | \- org.openrdf.sesame:sesame-rio-ntriples:jar:2.7.6:compile
| | | \- commons-io:commons-io:jar:2.1:compile
| | +- org.openrdf.sesame:sesame-query:jar:2.7.13:compile
.
.
.
| | \- commons-codec:commons-codec:jar:1.4:runtime
| \- org.openrdf.sesame:sesame-http-server-spring:jar:2.7.13:compile
| +- org.openrdf.sesame:sesame-runtime:jar:2.7.6:compile
| | +- org.openrdf.sesame:sesame-repository-manager:jar:2.7.13:compile
.
.
.
| | +- org.openrdf.sesame:sesame-queryresultio-sparqljson:jar:2.7.13:runtime
| | | \- com.fasterxml.jackson.core:jackson-core:jar:2.2.2:runtime
| | +- org.openrdf.sesame:sesame-queryresultio-text:jar:2.7.13:runtime
| | | \- net.sf.opencsv:opencsv:jar:2.0:runtime
.
.
.
| \- cglib:cglib:jar:2.2:compile
| \- asm:asm:jar:3.1:compile
您会注意到“net.sf.opencsv:opencsv:jar:2.0”是运行时依赖项,因此它不包含在karaf-maven-plugin生成的feature.xml中。不幸的是,运行时所需的包是包含在sesame-runtime-osgi Manifest中的“Import-Packages”指令中:
Import-Package: au.com.bytecode.opencsv
所以除非我自己手动包装和部署运行时依赖项,否则Karaf无法部署该功能。显然我不想这样做。
有没有办法在feature.xml生成中包含运行时范围的依赖项?
由于
答案 0 :(得分:1)
如果您使用标准的Karaf mojo生成features.xml,那么您可以在src / main / features / features.xml中创建一个功能模板文件 您在该模板中放置的内容将显示在最终生成的features.xml中 因此,如果绝对必要,您可以在模板中硬编码运行时依赖项。
您可以在pom中手动指定每个传递依赖项。这大概也可以起作用吗?
答案 1 :(得分:0)
为了跟进理查德的回答,模板文件应该位于
中src/main/feature/feature.xml
不是
src/main/features/features.xml
在feature.xml模板文件中,您可以包含将与生成的项目合并的依赖项包和功能。例如。
<?xml version="1.0" encoding="UTF-8"?>
<features name="${project.artifactId}-${project.version}">
<feature name="${project.artifactId}" description="${project.name}" version="${project.version}">
<bundle>mvn:net.sf.opencsv/opencsv/2.0</bundle>
</feature>
</features>