问题标签 [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.
java - 在 OSGI 中嵌入传递依赖
我有OSGI
一个依赖于第 3 方库的包,我不想在容器中部署该库,我宁愿将它嵌入到我的包中。
当然,那个库有它自己的依赖,我也想嵌入它们。
我正在使用Maven Bundle Plugin
:
结果,3rd-Party
嵌入在结果包中,但不是它的传递依赖项,好像<Embed-Transitive>true</Embed-Transitive>
没有任何效果。
所以我有一些问题
- 这是以传递方式嵌入 3rd 方库的正确方法吗?
- 这是否会处理生成的清单文件(不导入属于 3rd 方库及其依赖项的包)?
谢谢
maven - 如何处理 OSGi 中“提供”范围的依赖关系
有很多教程,展示了如何处理 OSGi 项目的依赖关系以及如何将它们转换为捆绑包。经过一天多的研究,我仍然没有找到如何处理具有provided
范围的依赖关系。
让我举个例子。我目前正在使用Dropbox
(dropbox-core-sdk 3.0),它有两个依赖项 ( com.google.android
and javax.servlet
) 和provided
范围。当我使用maven-bundle-plugin
or等技术bnd
时,它只下载工件及其传递依赖项。但是,我还需要提供依赖项才能将我的项目导入 OSGi 容器。
我正在使用maven-bundle-plugin
,我的pom.xml
样子:
即使Embed-Dependency
说包含所有内容,jar 中也只有依赖项 + 传递依赖项。但是,我希望提供的范围内的 jar 也在 jar 中。
有没有办法下载provided
范围的依赖项。如果没有,如何处理这种情况?
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 工具
java - maven bundle 中无法解析导入包
尝试启动捆绑包时遇到问题。
项目结构:
当我在 Eclipse 中使用 Maven install 命令编译主项目时,它已成功编译。所以,为了测试包,我下载了 felix 分发包。我已成功安装捆绑包,但无法启动。我得到错误依赖无法解决这里是我的捆绑 pom 文件
我收到“ com.test.sub_project_2.util 无法解决”的错误。com.test.sub_project_2 它被编译并且包名称也是正确的,但我仍然不明白为什么我会出错。
java - 处理 OSGI 和 3rd 方库时的最佳实践
我正在努力寻找一种合理的方法来管理足够大的代码库,更具体地说,如何管理import
任何给定包的语句。
问题是,如果您有一个捆绑包,它对其他 3rd 方库有自己的依赖项,并且如果您选择嵌入其中的一些(在我的情况下是这样做的),那么它maven-bundle-plugin
还将扫描这些库中的包并将它们添加imported
为您的捆绑包(这完全违反直觉)。
解决我的问题是摆脱语句中的通配符*
,import
但这意味着现在您必须手动维护导入列表。
那么你们是如何解决这个问题的呢?我在这里错过了什么吗?
任何建议将不胜感激
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),如果我错了,请纠正我的理解。
谢谢。
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 一起使用?
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 功能simple
、simple-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
包的标题:
java - 在 maven-bundle-plugin 中具有相同名称的多个引用
我正在使用 maven-bundle-plugin 3.3.0 和 OSGI R6。
我有以下课程:
运行 mvn clean install 后,maven-bundle-plugin 3.3.0 给了我错误:
你们有谁知道这可能是错的吗?
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)))]
我应该怎么做才能解决这个问题?