当前位置: 首页 > 知识库问答 >
问题:

卡拉夫/过滤器:=”(

艾子石
2023-03-14

我正在从log4j-slf4j-impl 2.12.0升级到2.17.1。在我之前的代码中,除了

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${slf4j.version}</version>
    </dependency>

现在我已经升级到2.17.1,我得到了以下错误:

org . Apache . Felix . resolver . reason . reason异常:无法解析org . Apache . logging . log4j . slf4j-impl/2 . 17 . 1:缺少需求[org . Apache . log4j . slf4j-impl/2 . 17 . 1]OSGi . wiring . package;过滤器:= "(

所以我在我的pom中包含了.xml另外两个依赖项来检查这是否解决了问题。另外两个依赖项是:

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.17.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.17.1</version>
    </dependency>   

但这无济于事。编译过程很好。运行是存在问题的地方。

这是我的pom.xml的一部分:

    <slf4j.version>2.17.1</slf4j.version>
    <sonar.coverage.exclusions>**/Activator.java</sonar.coverage.exclusions>
</properties>
<dependencies>
    <!-- test scoped dependencies -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- logger dependencies -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.17.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.17.1</version>
    </dependency>       
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${slf4j.version}</version>
    </dependency>

我还遗漏了什么?

共有1个答案

云英才
2023-03-14

如果您希望修复logshell安全问题,最简单的方法是安装最新版本的Apache karaf<code>4.3.x

您的异常是由于在2.17.0-3.0.0的版本范围内,没有一个已安装的捆绑包导出以下包org.apache.logging.log4j

如果您是OSGi的新手,那么最好理解,在默认情况下,捆绑包不包含它们的任何依赖项,而是包含导入包信息,该信息告诉OSGi运行时提供在指定版本范围内的捆绑包所依赖的最新包。

这意味着为了启动这个包,您必须通过导出这个包所依赖的包或osgi服务来安装满足其依赖关系的包。

要查看捆绑包是否正在导出特定包,您可以使用命令:

package:exports -p <package>
package:exports -p org.apache.logging.log4j

这将打印有关哪些捆绑包导出指定包的哪个版本的详细信息,这将有助于解决osgi.wiring.package错误。

要查看已安装包导出的包,您可以使用:

package:exports -b <bundle ID>

Apache Karaf使用pax日志记录为捆绑包提供日志记录支持。因此,您可以考虑安装更新版本的pax日志api,该api导出log4j包供捆绑包使用。

Apache karaf在第一次启动时安装某些版本的pax日志api和pax-logging-log4j2。如果您想让karaf安装这些捆绑包的最新版本,您可以通过添加以下捆绑包(JAR)的更新版本来实现:

  • pax-日志-api
  • pax-log-log 4 j 2
  • pax-日志-日志返回

至< code > karaf/system/org/ops4j/Pax/logging/

还可以将org.apache.karaf.features.xml中的捆绑包列入黑名单,以防止它们被安装。

<!-- blacklist versions 1.0 - 1.11.11 -->
<blacklistedBundles>
   <bundle>mvn:org.ops4j.pax.logging/pax-logging-api/[1,1.11.12)</bundle>
   <bundle>mvn:org.ops4j.pax.logging/pax-logging-log4j2/[1,1.11.12)</bundle>
   <bundle>mvn:org.ops4j.pax.logging/pax-logging-logback/[1,1.11.12)</bundle>
</blacklistedBundles>

移除数据文件夹,将karaf重置为干净状态,启动karaf,它应该安装了最新版本的pax-logging。

 类似资料:
  • 设置 多个独立的源系统将AVRO事件推送到Kafka主题中。KafkaS3接收器连接器从本主题读取AVRO事件,并写入S3拼花格式。 问题 我们的架构注册表中的 AVRO 架构不符合标准。例如,源系统中的十进制字段在架构注册表中具有基类型字符串和逻辑类型十进制。AVRO 中不允许这些类型的组合(十进制逻辑类型必须始终具有基本类型修复/字节。 这些不正确的AVRO模式导致不正确的拼花文件模式。E、

  • 我试图在Karaf 3.0.0-RC1中使用H2数据库加载来获取Scala库,但我遇到了这个错误 有人知道我需要在POM和/或功能中添加什么吗。xml来让它工作吗? 谢谢,鲍勃

  • 我通过执行以下命令,在我的两个Apache Karaf 2.2.7实例中安装了hawtio: 问题是我有四个linux机器和四个Karaf实例,所以我在每个机器上都安装了它。除了hawtio控制台端口不同之外,一切都很好。我知道默认情况下它应该在< code>8181上启动。在我的两个服务器上,它开始于:< code>8182,在另外两个服务器上:< code>7181。我不确定,也许< code

  • 您能说Apache Karaf包括以下内容吗?其中包括: Apache Felix(它是OSGi 4.2框架的实现) Apache Aries(它是Blueprint标准的实现)

  •     最后我们再来谈谈minificationFilter和magnificationFilter属性。总得来讲,当我们视图显示一个图片的时候,都应该正确地显示这个图片(意即:以正确的比例和正确的1:1像素显示在屏幕上)。原因如下: 能够显示最好的画质,像素既没有被压缩也没有被拉伸。 能更好的使用内存,因为这就是所有你要存储的东西。 最好的性能表现,CPU不需要为此额外的计算。     不过有时

  • 我的DRL文件: 我在linux vm的karaf 2.4.3中以流模式运行drools,每5分钟报告10k entity CheckineEvent pumping的内存不足。 我的用例是检测由序列号标识的实体的latecheckin事件。在检测到延迟签入事件时,将该事件泵送到另一个规则并在2小时内等待该实体再次正确签入。如果发生,则触发规则2。 我写查询的方式有什么问题吗?