问题描述
我是Apache Karaf的新手,我是从Felix迁移来的。
我尝试运行CDI测试,但无法解决缺少的红色依赖项:
我敢肯定,我必须从mvnrepository以bundles
的形式下载那些红色的“软件包”,但我没有找到bundles
来下载jar
。
解决方法
bundle是一个MANIFEST.MF文件,其中包含一些其他数据。
例如,如果您查看那个jar:https://mvnrepository.com/artifact/javax.enterprise/cdi-api/1.2,您会在META-INF / MANIFEST.MF中注意到这些行:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: 1.7.0_45 (Oracle Corporation)
Built-By: jharting
Build-Jdk: 1.7.0_45
Implementation-Title: CDI APIs
Implementation-URL: http://cdi-spec.org
Implementation-Vendor: JBoss by Red Hat,Inc.
Implementation-Version: 20140411-1123
Specification-Title: CDI APIs
Specification-Vendor: JBoss by Red Hat,Inc.
Specification-Version: 1.2.0
Export-Package: javax.decorator;uses:="javax.enterprise.inject";versio
n="1.1",javax.enterprise.context;uses:="javax.inject";version="1.1",j
avax.enterprise.inject.spi;uses:="javax.enterprise.context.spi,javax.
el,javax.enterprise.inject,javax.interceptor,javax.enterprise.event";
version="1.1",javax.enterprise.util;version="1.1",javax.enterprise.ev
ent;uses:="javax.enterprise.util";version="1.1",javax.enterprise.inje
ct;uses:="javax.inject,javax.enterprise.util,javax.enterprise.context
";version="1.1",javax.enterprise.context.spi;version="1.1"
Tool: Bnd-0.0.357
Bundle-Name: CDI APIs
Bundle-Vendor: JBoss by Red Hat,Inc.
Bundle-Version: 1.2.0
Bnd-LastModified: 1397208243348
Bundle-ManifestVersion: 2
Bundle-Description: APIs for CDI (Contexts and Dependency Injection fo
r Java EE)
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.html
Import-Package: javax.decorator;version="1.1",javax.el;version="2.2",j
avax.enterprise.context;version="1.1",javax.enterprise.context.spi;ve
rsion="1.1",javax.enterprise.event;version="1.1",javax.enterprise.inj
ect;version="1.1",javax.enterprise.inject.spi;version="1.1",javax.ent
erprise.util;version="1.1",javax.inject,javax.interceptor;version="1.2"
Bundle-SymbolicName: javax.enterprise.cdi-api
Bundle-DocURL: http://jboss.org
Name: Build-Information
Maven-Version: 3.1.0
Build-Time: 20140411-1123
Os-Name: Linux
Java-Version: 1.7.0_45
Java-Vendor: Oracle Corporation
Os-Version: 3.7.3-101.fc17.x86_64
Os-Arch: amd64
SCM: 5a0981caa28053c49f9e1932ba1f629a51e355c2
Bundle- *是您感兴趣的产品。例如,Export-Package
包含javax.enterprise.context;uses:=...;version="1.1"
,这表明此捆绑包将导出软件包javax.enterprise.context
。
因此,安装该软件包将自动为您的其他软件包提供Import-Package
该软件包的功能。
请注意,如果没有Export-Package
,我知道karaf可以尝试将您的jar打包成捆。但是,这可能会导致非最佳捆绑。如果您想要一个特定的软件包,但官方软件包不是osgi-friendly,则可以检查servicemix组织,如果已经专门创建了https://mvnrepository.com/artifact/org.apache.servicemix。
在您的特定情况下,可以使用bundle install -s mvn:javax.enterprise/cdi-api/1.2
(或将jar放到deploy文件夹中)解决问题。
我强烈建议您阅读三个OSGI层(模块化,生命周期和服务),以更好地了解karaf在幕后所做的事情。例如这本书,但您当然也可以在互联网上找到良好的信息:https://www.manning.com/books/osgi-in-action