OSGi (Karaf) 解析与 Maven 依赖关系
OSGi (Karaf) Resolution vs Maven dependencies
在我下面的示例中,OSGi 解析和 Maven 依赖项支持所需的步骤似乎存在差异/重复。
我有一个依赖于外部第 3 方 jar 的 jar,在本例中为 time4j。
<dependency>
<groupId>net.time4j</groupId>
<artifactId>time4j-core</artifactId>
<version>4.16</version>
</dependency>
然后我可以通过导入包和 运行ning 等在本地 运行 我的简单 jar
当导入 OSGi 时,我必须确保首先导入这个 jar,通常使用 PAX Wrap Url。
这对于 1 个 jar 依赖是可以的,但是当有多个依赖时呢?我可以使用 features.xml 文件来收集这些罐子,但为什么呢?我已经在我的 pom.xml 中指定了它们。
似乎应该有一种方法让 OSGi / Karaf 读取 pom.xml 依赖项并在需要时使用 PAX Wrap url 将它们导入到容器中。
我是不是漏掉了什么?
抱歉,您的期望与现实不符。
首先,Maven 依赖项是构建时依赖项。这就是为什么你声明你知道在运行时可用的依赖项
<scope>provided</scope>
OSGi 和 Karaf 都不能对你的构建时间依赖做任何事情。
但是 使用 OSGi,您可以确保构建依赖项在运行时也可用,并且不会干扰可能可用的其他库。
这就是为什么您需要申报您的进出口等。
Karaf 确实可以帮助您处理某些依赖项,例如功能文件。
如果您有一个功能定义 maven 项目,那么所有 compile 范围依赖项都可以包含在一个功能文件中。
BUT,OSGi 解析器只查看当前可用的包,仅此而已,与 Maven 没有任何联系,如果你想要某种 automagic 解决外部依赖你需要确保你有
a) 启用 OBR 解析器(这取决于您使用的 karaf 版本,4.x 它已经包含在内)和
b) 手头有一个 OBR 存储库,在这种情况下,Karaf Cave 将是要寻找的项目,因为它可以像代理一样驻留在 Maven 存储库之上。
在我下面的示例中,OSGi 解析和 Maven 依赖项支持所需的步骤似乎存在差异/重复。
我有一个依赖于外部第 3 方 jar 的 jar,在本例中为 time4j。
<dependency>
<groupId>net.time4j</groupId>
<artifactId>time4j-core</artifactId>
<version>4.16</version>
</dependency>
然后我可以通过导入包和 运行ning 等在本地 运行 我的简单 jar
当导入 OSGi 时,我必须确保首先导入这个 jar,通常使用 PAX Wrap Url。
这对于 1 个 jar 依赖是可以的,但是当有多个依赖时呢?我可以使用 features.xml 文件来收集这些罐子,但为什么呢?我已经在我的 pom.xml 中指定了它们。
似乎应该有一种方法让 OSGi / Karaf 读取 pom.xml 依赖项并在需要时使用 PAX Wrap url 将它们导入到容器中。
我是不是漏掉了什么?
抱歉,您的期望与现实不符。 首先,Maven 依赖项是构建时依赖项。这就是为什么你声明你知道在运行时可用的依赖项
<scope>provided</scope>
OSGi 和 Karaf 都不能对你的构建时间依赖做任何事情。 但是 使用 OSGi,您可以确保构建依赖项在运行时也可用,并且不会干扰可能可用的其他库。
这就是为什么您需要申报您的进出口等。
Karaf 确实可以帮助您处理某些依赖项,例如功能文件。 如果您有一个功能定义 maven 项目,那么所有 compile 范围依赖项都可以包含在一个功能文件中。
BUT,OSGi 解析器只查看当前可用的包,仅此而已,与 Maven 没有任何联系,如果你想要某种 automagic 解决外部依赖你需要确保你有
a) 启用 OBR 解析器(这取决于您使用的 karaf 版本,4.x 它已经包含在内)和
b) 手头有一个 OBR 存储库,在这种情况下,Karaf Cave 将是要寻找的项目,因为它可以像代理一样驻留在 Maven 存储库之上。