当前位置: 首页 > 知识库问答 >
问题:

OSGi(Karaf)解析与Maven依赖关系

羊渝
2023-03-14

在下面的示例中,OSGi解析和Maven依赖支持中所需的步骤似乎存在差异/重复。

我有一个jar,它依赖于外部第三方jar,在本例中时间为4J。

<dependency>
  <groupId>net.time4j</groupId>
  <artifactId>time4j-core</artifactId>
  <version>4.16</version>
</dependency>

然后,我可以通过导入包并运行等方式在本地运行我的简单jar。

当导入OSGi时,我必须确保首先导入这个jar,通常使用PAX包装URL。

这对于一个jar依赖关系是可以的,但是当有多个依赖关系时又如何。我可以使用features.xml文件来收集这些JAR,但为什么呢?我已经在pom.xml中指定了它们。

看来应该有一种方法让OSGi/Karaf读取pom.xml依赖项,并在需要时使用PAX包装url将这些依赖项导入到容器中。

我漏了什么吗?

共有1个答案

齐建白
2023-03-14

对不起,但你的期望与现实不同步。首先,Maven依赖关系是构建时依赖关系。这就是为什么您要声明您知道在运行时中可用的依赖项(如所提供的)

<scope>provided</scope>

OSGi和Karaf都不能对构建时依赖关系做任何事情。但是使用OSGi,您可以确保您的构建依赖项在您的运行时中也是可用的,并且不会干扰可能可用的其他库。

这就是为什么你需要报关你的进口和出口等。

但是,OSGi解析器只查看当前可用的bundle,没有任何与maven的连接,如果您希望有某种外部依赖的自动解析,您需要确保
a)启用了OBR解析器(这取决于您正在使用的karaf版本,它已经包含了4.x)和
b)手边有一个OBR存储库,在这种情况下,karaf Cave将是需要寻找的项目,因为它可以像一个代理一样驻留在maven存储库之上。

 类似资料:
  • 我正在创建一个新的Karaf特性,它将包含几个包(jclouds)。我还有一个maven“superproject”(jclouds-all),它包含我需要的所有模块/包。 在定义特性时,是否可以只指定一个SuperProject的bundle,并自动解析所有具体的bundle,或者我需要在特性中列出所有的bundle?

  • 问题内容: 假设我有四个项目: 项目A(依赖于B和D) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下,如果我运行项目A,则Maven将正确地解决对D的依赖关系。如果我理解正确,则Maven始终以最短的路径获取依赖关系。由于D是A的直接依赖项,因此将使用B内指定的D而不是D。 但是现在假设这种结构: 项目A(依赖于B和C) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下

  • 我已经在pom中配置了本地maven存储库。xml。当我构建项目时,它会显示依赖项下载错误(请参阅下面的日志)。Maven正在尝试从我的本地Maven存储库下载所有依赖项。 日志 这是我的pom。xml文件 本地存储库是http://XXX。XXX。XX。XXX:8081/artifactory/libs本地发布 xml。背景

  • 我是OSGI新手(抱歉),在尝试部署我的包和相关依赖项时遇到了一些问题。 这是我的POM: 然后我使用Maven命令捆绑它: mvn org . Apache . Felix:maven-bundle-plugin:bundle all 这是成功的,并生成我的包以及3个依赖包: net.sf.ehcache_2.10.0.jar org.apache.commons.lang3_3.4.0.jar

  • 我有一些OSGi包(简单的OSGi,没有eclipse依赖项)和一个maven构建,使用pax runner在Knopflerfish服务器中启动它们。 maven构建和启动包工作得非常好,但是只能通过Pax runner(< code > mvn Pax:provision )。 为了调试捆绑包,最好直接从eclipse中启动它们,否则我的断点不会触发(似乎很明显,因为pax:provision