- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的 OSGi 项目使用 Felix Framework,但我遇到了有关第三方依赖项的严重问题。
我正在使用 eclipse 和 maven-bundle-plugin 从源生成我的包,并从 POM.XML 文件生成 MANIFEST.MF。到目前为止,一切都很好。然而,当我的 bundle 中有一些第三方依赖项时,我发现自己正在寻找无限的 JAR 列表(通常不是 bundle ),并将它们放入我的/bundle Felix 目录中,直到不再缺少任何依赖项。
我将此过程称为“下载 Internet 以使我的 OSGi 应用程序正常工作”。
我做错了什么?当然,我一定做错了一些事情,因为我无法想象任何人有一个依赖于 B 的 bundle A,然后依赖于 C 和 D,然后这两个将依赖于其他几个等等......去寻找所有这些依赖项手动使用 google 或 Maven Central!这太疯狂了!
自动化此操作的正确方法是什么?我希望有两种解决方案之一:
1) 能够创建一个包含所有嵌入依赖项的大型 JAR 文件,但仅导出我想要的包,并且,当然,不导入任何包。
2)(我的首选解决方案)有一种方法可以将所有依赖项放入单独的 JAR 文件中,我可以将其简单地粘贴到/bundle 目录中。
3)(更优选)有一种方法可以使用第三方 JAR,而无需将 8GB 依赖项下载到我的项目中。
我找到了可以做到这一点的工具,但仅适用于直接(一级)依赖项,将传递依赖项留给我手动解决。
这个问题很严重。缺乏这样的工具阻碍了 OSGi 的使用。我已经搜索,搜索和搜索了,我遇到了所有101个解决方案,例如PAX,BNDTOOLS和 friend ,但似乎他们 解决了这个问题……
请帮助我。 如果可以的话,请提供一个活生生的例子,世界各地像我这样的人都将从这个问题的解决方案中受益。
谢谢!
编辑:我附加了一个示例项目,我在其中尝试使用 JScience,但生成的 JAR 包不断要求我进行新的导入,即它不是独立的。
示例链接:https://www.dropbox.com/s/svo3nu3vawvv2xn/RequireJscienceExample.zip?dl=0
我通常尝试使用 Eclipse 将第 3 方 JAR 转换为 bundle ,但它们总是必须导入我没有的包,因此正如您所说,这是一个无休止的情况。
我找不到任何有关 maven-bundle-plugin 标签 Conditional_Package 的文档。然而,相关搜索显示了我之前尝试过但没有成功的内联选项。
我创建了一个基本项目,其中有一个使用 JScience 库的类,在其 POM.XML 中我有以下内容:
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId};singleton:=true
</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Export-Package>shared.properties.api, shared.properties.base
</Export-Package>
<Embed-Dependency>!org.osgi.*;scope=compile|runtime;inline=true</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
</plugins>
我是说 maven 内联所有不是来自 osgi 框架本身的包。看看生成的 JAR,它看起来相当不错,我现在只嵌入了包而不是整个 JAR(但是在我看来,我不需要所有这些内联包,因为我只使用其中两个)。此外,如果我打开 MANIFEST.MF 文件,我可以看到这个有问题的行:
Manifest-Version: 1.0
Bnd-LastModified: 1414164534170
Build-Jdk: 1.6.0_65
Built-By: Pedro
Bundle-ManifestVersion: 2
Bundle-Name: RequireJscienceExample
Bundle-SymbolicName: RequireJscienceExample;singleton:=true
Bundle-Version: 0.0.1.SNAPSHOT
Created-By: Apache Maven Bundle Plugin
Embed-Dependency: !org.osgi.*;scope=compile|runtime;inline=true
Embed-Transitive: true
Import-Package: org.joda.convert,org.xml.sax <------ Problem...
Tool: Bnd-1.50.0
说我缺少 org.joda.convert 和 org.xml.sax。
令我惊讶的是,我们正在谈论一个声明与 OSGi 兼容的库(JScience): http://jscience.org/
我错过了什么?我真的不能不使用 JScience。而且我之前拒绝过几个第 3 方库,这会节省我的开发时间,因为这些 OSGi 3 方集成困难。
最佳答案
为什么不直接让 Maven 来解决传递依赖并为您下载它们。
一旦您将它们添加到 pom.xml 中,像 Eclipse(实际上是 m2e 插件)这样的 IDE 就已经可以解析、下载并显示结果 jar。 (您也可以从命令行使用 mvn dependency:tree
)
然后检查并排除
不需要的,例如可选或已由其他 bundle 导出的包。
是的,使用provided
范围,例如对于org.osgi.*
<Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
关于apache-felix - OSGi 和传递依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26549625/
我是 OSGi 的新手,开始使用 felix。我目前非常精通捆绑包、服务等的概念。我有一个要求,可以将 Felix 嵌入到 Tomcat 中,我尝试使用谷歌搜索,但无法找到适合我的目的的相关解决方案。
如果我检测到我在开发环境中运行,我想自动调用 Karaf“dev:watch”命令。我考虑过将 dev:watch * 直接添加到 etc/shell.init.script 但我不希望它无条件运行。
我有一个捆绑组件, package ipojo; import ipojo.service.Hello; import org.apache.felix.ipojo.annotations.Compo
我使用 apache felix,我想连接 osgi 框架并控制它 - 特别是停止。换句话说,我有应用程序 A(基于 osgi)和应用程序 B。我希望从 B 连接到正在运行的 A 并停止 osgi。我
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Find the dependent bundles in Eclipse at runtime 如何从更新的 bu
是否可以在 felix 的 war bundle 中使用 spring?我在 glassfish 3.1 上使用 spring 3.0.5 和 felix 我尝试输入component-scan在 f
有没有关于如何配置/安装 Apache Felix File install 的示例?在官网上,已经提到你需要配置属性等。但是他们没有提到你需要把这些配置属性放在哪里,如何设置等等。 我已下载 org
我正在为我的 OSGi 项目使用 Felix Framework,但我遇到了有关第三方依赖项的严重问题。 我正在使用 eclipse 和 maven-bundle-plugin 从源生成我的包,并从
我已经下载了org.apache.felix.main.distribution-4.2.1。它正在工作。 现在我想使用org.apache.felix.fileinstall-3.2.6.jar。我
在基于依赖管理器的组件模型中,我试图将组件的所有样板文件隐藏到基类中。我在 eclipse+bndtools 中连接了所有东西,并且可以成功地将 @Init、@Start、@Stop 推送到我的基类中
我在我的项目中使用 scr 注释。有人能解释一下 @Component 注释中元类型属性的用例吗? import org.apache.felix.scr.annotations.Activate;
我有一些应用程序,使用了 Felix OSGi Framework。 更新后如何查看 bundle ? 即我有很多 bundle ,并且所有 bundle 都已加载。我可以更新包目录中的一些包。我如何
我正在开发 Apache Sling WCMS 应用程序。我需要过滤发送到服务器的所有请求并在响应对象中设置一些 header 。我根据 Felix Http Filter Sample 实现了过滤器
我使用 Felix 作为嵌入式应用程序,如下所述, How to start and use Apache Felix from code? 。我想要做的是通过 OSGi 从我的主机应用程序动态加载
无法将包加载到 felix 中。我下载了Felix 6.0.1,运行使用 > java -jar bin/felix.jar ____________________________ Welcome
我有一个包含许多 bundle 的应用程序。事实证明,我需要使用来自可能的 bundle 的导入,并且我从 Maven 收到警告, bundle 依赖项中的三个是循环。 The projects in
我希望使用 Apache Felix 进行一些开发,我很好奇我应该使用什么 Linux 发行版。据我所知,它在 Ubuntu 上受支持,这是一个好的起点吗?或者它甚至重要吗? 最佳答案 这并不重要,因
我使用 Apache Felix 和 Glassfish 工作了几个月。我可以创建简单的 Web 应用程序。现在我必须创建基于 OSGI 架构的 Java 守护进程。是否有任何带有示例代码的好教程可以
Felix有哪些包我需要开始吗? downloads page 上有无数个. (附注:与 OSGI 的“Oscar”引用框架相比,这个名称是对 Odd Couple + 的引用吗?这是我在阅读其中一个
我无法从代码中找到有关开始和使用Apache Felix的信息。 我想用 Apache Felix 的 Shell 做我能够(或不能 ;))的事情。 例如,我如何启动一个模块? 请帮忙。 最佳答案 因
我是一名优秀的程序员,十分优秀!