回答你的问题:你可以将所有依赖包放入 $KARAF_HOME/deploy 文件夹中,Karaf 将为你部署它们。
然而,这不是很方便,因为它是一个手动过程并且不是由 Maven 驱动的。相反,看看卡拉夫的概念特征存储库。您可以使用Karaf Maven 插件为您的捆绑包及其(传递)依赖项创建功能存储库。如果您需要将应用程序作为单个工件发布,则可以使用相同的插件来创建 KAR 存档,这是一个 zip 文件,其中包含功能存储库和独立部署单元中所需的依赖项。
首先将模板 feature.xml 文件放入src/main/feature
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.3.0 http://karaf.apache.org/xmlns/features/v1.3.0"
name="My feature">
<feature name="${project.artifactId}" version="${project.version}" description="Describe feature here">
<!-- Add "self" to the list of dependencies -->
<bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
</feature>
</features>
然后设置插件以根据您的 Maven 依赖项填充功能模板:
<plugin>
<groupId>org.apache.karaf.tooling</groupId>
<artifactId>karaf-maven-plugin</artifactId>
<configuration>
<includeTransitiveDependency>true</includeTransitiveDependency>
</configuration>
<executions>
<execution>
<id>generate-features-descriptor</id>
<goals>
<goal>features-generate-descriptor</goal>
</goals>
</execution>
</executions>
</plugin>
构建项目将在本地 Maven 存储库中与捆绑包一起创建一个额外的 Maven 工件:xxx-features.xml
您可以使用以下命令让本地 Karaf 知道您的功能存储库feature:repo-add
命令。然后添加您的功能feature:install
命令。这将启动您的包及其所有声明的(可传递的)Maven 依赖项。
EDIT:
正如您在评论中提到的,您的一些(全部?)依赖项是普通 JAR,而不是 OSGi 捆绑包,可能您的情况会更好嵌入使用 maven-bundle-plugin 将这些非 OSGi 依赖项放入您自己的包中。但这可能相当乏味。大多数非 OSGi JAR 都有包导入,这些包导入要么在运行时根本不使用,要么不在您的特定使用场景中使用。为了避免将 OSGi 依赖项列表扩展到传递性 Maven 依赖项列表之外,您必须防止将这些“继承”包添加到您自己的包的 MANIFEST 中的包导入列表中。例如,我有一个使用 httl 模板库的包,它又依赖于 Javassist。 OSGi 包也不是。因此,我嵌入了两者并禁止导入在 httl 或 javassist 代码中声明但在运行时不需要的包的导入:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Embed-Dependency>*;scope=compile|runtime;inline=false;artifactId=httl|javassist</Embed-Dependency>
<Embed-Transitive>false</Embed-Transitive>
<Import-Package>
!com.alibaba.*,
!com.thoughtworks.*,
!javassist.*,
!net.htmlparser.*,
!org.apache.commons.logging.*,
!org.codehaus.jackson.*,
!org.joda.convert.*,
!com.sun.jdi.*,
!javax.servlet.*,
*
</Import-Package>
</instructions>
</configuration>
</plugin>