如何解决Apache Karaf中的“程序包...无法解决”

问题描述

我是Apache Karaf的新手,我是从Felix迁移来的。

我尝试运行CDI测试,但无法解决缺少的红色依赖项:

enter image description here

我敢肯定,我必须从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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...