问题标签 [maven-bundle-plugin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4410 浏览

java - 在 OSGI 中嵌入传递依赖

我有OSGI一个依赖于第 3 方库的包,我不想在容器中部署该库,我宁愿将它嵌入到我的包中。

当然,那个库有它自己的依赖,我也想嵌入它们。

我正在使用Maven Bundle Plugin

结果,3rd-Party嵌入在结果包中,但不是它的传递依赖项,好像<Embed-Transitive>true</Embed-Transitive>没有任何效果。

所以我有一些问题

  • 这是以传递方式嵌入 3rd 方库的正确方法吗?
  • 这是否会处理生成的清单文件(不导入属于 3rd 方库及其依赖项的包)?

谢谢

0 投票
2 回答
1164 浏览

maven - 如何处理 OSGi 中“提供”范围的依赖关系

有很多教程,展示了如何处理 OSGi 项目的依赖关系以及如何将它们转换为捆绑包。经过一天多的研究,我仍然没有找到如何处理具有provided范围的依赖关系。

让我举个例子。我目前正在使用Dropbox(dropbox-core-sdk 3.0),它有两个依赖项 ( com.google.androidand javax.servlet) 和provided范围。当我使用maven-bundle-pluginor等​​技术bnd时,它只下载工件及其传递依赖项。但是,我还需要提供依赖项才能将我的项目导入 OSGi 容器。

我正在使用maven-bundle-plugin,我的pom.xml样子:

即使Embed-Dependency说包含所有内容,jar 中也只有依赖项 + 传递依赖项。但是,我希望提供的范围内的 jar 也在 jar 中。

有没有办法下载provided范围的依赖项。如果没有,如何处理这种情况?

0 投票
1 回答
741 浏览

java - 带有 Maven 捆绑插件的 OSGi 未加载库

我正在开发一个大型应用程序,我们在代理中使用 Mavem 捆绑插件使其变小!我在导入一些需要的库来处理 PDFbox 所需的某种图像(jpeg2000 和 jbig2)时遇到问题。

这是我的pom(部分)

我修复了导入包,我不再有警告了!

> [INFO] --- maven-bundle-plugin:2.3.7:bundle (default-bundle) @ proxy-bundle >!--- [警告] 捆绑 com.criticalsoftware.frontend:proxy-bundle:bundle:2.0。 7 : >!not find com.github.jai-imageio.* [WARNING] Bundle com.criticalsoftware.frontend:proxy-bundle:bundle:2.0.7 : Did >!not find com.levigo 的匹配引用.jbig2.* [警告] Bundle com.criticalsoftware.frontend:proxy-bundle:bundle:2.0.7 : 没有 >!not 找到匹配的 org.apache.pdfbox.cos.*

这是我的 pdfBox 使用这些库的网络,我在 try/catch 块中遇到异常!

}

在 IntelliJ 中调试时,我得到了这个!

org.apache.pdfbox.filter.MissingImageReaderException:无法读取 JPEG2000 图像:未安装 Java 高级成像 (JAI) 图像 I/O 工具

0 投票
1 回答
2764 浏览

java - maven bundle 中无法解析导入包

尝试启动捆绑包时遇到问题。

项目结构:

当我在 Eclipse 中使用 Maven install 命令编译主项目时,它已成功编译。所以,为了测试包,我下载了 felix 分发包。我已成功安装捆绑包,但无法启动。我得到错误依赖无法解决这里是我的捆绑 pom 文件

我收到“ com.test.sub_project_2.util 无法解决”的错误。com.test.sub_project_2 它被编译并且包名称也是正确的,但我仍然不明白为什么我会出错。

0 投票
1 回答
363 浏览

java - 处理 OSGI 和 3rd 方库时的最佳实践

我正在努力寻找一种合理的方法来管理足够大的代码库,更具体地说,如何管理import任何给定包的语句。

问题是,如果您有一个捆绑包,它对其他 3rd 方库有自己的依赖项,并且如果您选择嵌入其中的一些(在我的情况下是这样做的),那么它maven-bundle-plugin还将扫描这些库中的包并将它们添加imported为您的捆绑包(这完全违反直觉)。

解决我的问题是摆脱语句中的通配符*import但这意味着现在您必须手动维护导入列表。

那么你们是如何解决这个问题的呢?我在这里错过了什么吗?

任何建议将不胜感激

0 投票
1 回答
263 浏览

apache-felix - maven-bundle-plugin 具有不同版本的重复包

插件版本:3.3.0

我想知道 maven-bundle-plugin 如何从重复的 Export-Packages 包中解析版本,以下是来自 mvn -X 调试输出,似乎插件正在使用找到的第一个包中的版本。

-------------------------------------------------- ---------------------

[调试] BND 类路径:

-------------------------------------------------- ---------------------

-classpath:\D:\dev\m3repo\io\dropwizard\metrics\metrics-core\3.1.2\metrics-core-3.1.2.jar,\D:\dev\m3repo\com\codahale\metrics\metrics -core\3.0.2\metrics-core-3.0.2.jar

-------------------------------------------------- ---------------------

MANIFEST.MF (io\dropwizard\metrics\metrics-core\3.1.2\metrics-core-3.1.2.jar)

MANIFEST.MF (com\codahale\metrics\metrics-core\3.0.2\metrics-core-3.0.2.jar)

以及我的捆绑包的最终输出 MANIFEST.MF:

com.codahale.metrics 的最终版本是[3.1,4),我想应该是[3.0,4),如果我错了,请纠正我的理解。

谢谢。

0 投票
1 回答
165 浏览

maven - 即使在安装 RDF4J 包之后,OpenDaylight OSGi 也无法找到 RDF4J 类

如果我只使用带有 Maven(没有 OSGi 容器)的 RDF4J,我可以利用 RDF4J 提供的所有类。但是当我将 RDF4J 与 OpenDaylight 一起使用时,我使用 RDF4J 类的捆绑包由于不满足要求而无法启动。我正在使用 IntelliJ Idea,并使用 OpenDaylight 原型创建了一个新项目,其中 groupId:org.opendaylight.controller、artifactId:opendaylight-startup-archetype、版本:1.4.0-SNAPSHOT 和存储库:https://nexus.opendaylight。 org/content/repositories/opendaylight.snapshot/archetype-catalog.xml

我的包的组 ID:org.exmaple,工件 ID:rdfTest,版本:1.0-SNAPSHOT,我使用的是 maven 3.3.9

原型编译成功,我可以安装所有功能。(./karaf/target/assembly/bin/karaf 然后通过 feature:install 命令安装功能)

但是当我在 impl 文件夹的 pom.xml 中添加 RDF4J 依赖项时

并在 impl/src/main/java/org/example/impl 的 RdfTestProvider.java 中添加以下内容,该功能不会安装。

我认为问题在于没有安装 RDF4J 包。我尝试了不同的方法来安装它,但都没有奏效(安装第 3 方非 osgi 捆绑包

有什么方法可以将 RDF4J 与 OpenDaylight 一起使用?

0 投票
1 回答
2916 浏览

maven - 覆盖 Maven-Bundle-Plugin 中的 Require-Capability

我的问题与类似,但我使用 Maven 捆绑插件来实现相同的最终结果。

我正在构建一个包含一个persistence.xml文件的包,我发现它会maven-bundle-plugin在清单中自动生成以下标头:

这本身不是问题,但是我正在使用 Karaf,并且我想在我自己的一个功能中部署这个以及其他捆绑包和 Karaf 功能。osgi.service;effective:=active;objectClass=javax.persistence.spi.PersistenceProvider;javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl当我这样做时,它会失败,因为即使我指定了openjpa要同时安装的功能,OSGi 也无法实现该功能。我发现我可以通过更改effective:=active为来解决这个问题resolution:=optional

为了构建我的包,我尝试了以下 Maven 插件配置:

但是,我遇到了与上述链接问题相同的问题,即清单中的重复要求。

我还从上述问题的链接中看到,对 bnd 进行了更改(bnd issue #1364),但这似乎只适用于注释?有没有办法配置 Maven 插件以防止重复需求?

更新#1

我的示例代码可在 GitHub(karaf_features 分支)获得: https ://github.com/jtkb/jpatest/tree/feature/karaf_features

它由 3 个模块组成,但只有 2 个模块对此问题感兴趣,simple并且simple-datasource

simple是“持久性单元”并包含persistence.xml. 它也是生成“尴尬”(但实际要求) <Require-Capability>标头的捆绑包。

simple-datasource为持久性单元提供数据源,并包含要安装的 Karaf 功能simplesimple-datasource捆绑包和所有必需的第 3 方捆绑包(通过 Karaf 功能)。特征 XML 包含:

因此,在 Karaf 中安装我的功能时出现此错误:

执行命令时出错:无法解析 root:缺少要求 [root] osgi.identity;osgi.identity=简单数据源;类型=karaf.feature;版本="[1.0.0.SNAPSHOT,1.0.0.SNAPSHOT]"; filter:="(&(osgi.identity=simple-datasource)(type=karaf.feature)(version>=1.0.0.SNAPSHOT)(version<=1.0.0.SNAPSHOT))"

[原因:无法解析 simple-datasource/1.0.0.SNAPSHOT:缺少要求 [simple-datasource/1.0.0.SNAPSHOT] osgi.identity;osgi.identity=com.javatechnics.jpa.simple;类型=osgi.bundle;版本="[1.0.0.SNAPSHOT,1.0.0.SNAPSHOT]"; 分辨率:=强制

[原因:无法解析 com.javatechnics.jpa.simple/1.0.0.SNAPSHOT:缺少要求 [com.javatechnics.jpa.simple/1.0.0.SNAPSHOT] osgi.service;objectClass=javax.persistence.spi.PersistenceProvider;javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl; 有效:=有效]]

对我来说,这个错误几乎感觉像是一个循环引用问题,但我看不出如何。

检查simple包的标题:

0 投票
1 回答
457 浏览

java - 在 maven-bundle-plugin 中具有相同名称的多个引用

我正在使用 maven-bundle-plugin 3.3.0 和 OSGI R6。

我有以下课程:

运行 mvn clean install 后,maven-bundle-plugin 3.3.0 给了我错误:

你们有谁知道这可能是错的吗?

0 投票
1 回答
540 浏览

osgi - felix maven-bundle-plugin 错误 (&(osgi.wiring.package=com.abc)(version>=xx.0.0)(!(version>=yy.0.0)

我使用 Apache Felix 来实现 osgi bundle 并将其用作嵌入式 Felix 框架来调用 boundle

这是我构建 MANIFEST.MF 的 Maven 插件:

我构建项目,然后像这样在嵌入的 felix 中使用 jar 文件

当我开始boundle时,我遇到了这个异常

线程“主”org.osgi.framework.BundleException 中的异常:无法解析 abc [1](R 1.0):缺少要求 [abc [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=com.google.common.base)(version>=21.0.0)(!(version>=22.0.0))) 未解决的要求:[[abc [1](R 1.0) ] osgi.wiring.package; (&(osgi.wiring.package=com.google.common.base)(version>=21.0.0)(!(version>=22.0.0)))]

我应该怎么做才能解决这个问题?