如何覆盖log4j版本1.2。17带有log4j核心2.16。0版本以解决spark-core_2.12二进制文件的“易反序列化的SocketServer类”。
我试图排除log4j-1.2。17来自spark-core_2.12,但构建失败,出现以下错误
java.lang.NoClassDefFoundError: org/apache/log4j/spi/Filter
at com.optum.iqs.runtime.counters.CountersFactoryTest.setup(CountersFactoryTest.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.spi.Filter
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 19 more
java.lang.NullPointerException
at com.optum.iqs.runtime.counters.CountersFactoryTest.tearDown(CountersFactoryTest.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
我的CountersFactoryTest.java类内容是
package com.optum.iqs.runtime.counters;
import java.io.IOException;
import java.util.Map;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.SparkSession;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
public class CountersFactoryTest {
public static SparkSession sparkSession;
@BeforeClass
public static void setup() throws IOException {
sparkSession = SparkSession.builder().appName("JunitSession").master("local").getOrCreate();
CountersFactory.initialize(sparkSession.sparkContext());
}
@Test
public void testIqsLongCounter() {
Dataset<String> input = sparkSession.read().textFile("src/test/resources/input.txt").as(Encoders.STRING());
Dataset<String> output = input.map(new SampleMapFunction(), Encoders.STRING());
output.show();
Long counter = CountersFactory.getCounters().get("input records").value();
Assert.assertEquals(3L, counter.longValue());
}
@Test
public void testIqsOutputRecordCounter() {
Dataset<String> input = sparkSession.read().textFile("src/test/resources/input.txt").as(Encoders.STRING());
Dataset<String> output = input.map(new SampleMapFunctionOutputCounter(), Encoders.STRING());
output.show();
Map<String, Long> counter = CountersFactory.getOutputCounters().get("output records").value();
Assert.assertEquals(3L, counter.get("key").longValue());
}
@AfterClass
public static void tearDown() {
sparkSession.stop();
}
}
从火花核心依赖中排除log4j的参考
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.0.1</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
spark core是否将log4j依赖项升级到最新版本?
CVE-2019-17571
[备注:CVE-2019-1751
几乎不可能触发,除非您明确运行SocketServer
(参见此问题)。另一方面,Log4j 1.2.17也会受到CVE-2021-4104
,这可能更容易利用。]
从log4j2开始。x与Log4j 1.2不向后兼容升级并不像用一个库替换另一个库那么简单。您需要用log4j1.2和log4j2之间的桥替换log4j
依赖关系。x API(log4j-1.2-API
):
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.0.1</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.16.0</version>
</dependency>
这应该可以解决ClassNotFoundException
,但是如果您想实际将日志保存到某个地方,则需要为Log4j 2安装后端。x APIlog4j core
是标准配置。
我试图获得基于gradle的android项目的覆盖面。 所以我为我的应用程序添加版本。gradle 和 内部调试。 这工作正常。我可以获取使用或的报告。 问题是调试版本通常被开发人员用来运行和测试应用程序。因此,在构建中启用代码覆盖可能会降低构建的速度,这种用法可能不需要。 所以我想我会添加新的配置 不幸的是,没有和不运行覆盖类型。 当我使用dex2jar反编译apk并使用jd-gui查看内部时
问题内容: 我使用的是Apache Mina sshd- core版本0.10.0。由于文件上传的一些问题,我不得不将版本更改为0.14.0。在那里我无法覆盖getVirtualUserDir()方法。以下是我的示例代码, 我想知道如何在Apache Mina sshd-core版本0.14.0中克服该问题。谢谢。 问题答案: Mina SSHD 0.10.0中的目的是设置文件系统的初始目录。 在
我的父模块中的Spring Boot版本是v2.1.17。发布 然后我在子模块中引入了spring boot starter安全性,指定的版本是2.4.4,它覆盖了父模块中的版本(v2.1.17版本)。 然后,我运行了命令,发现子模块中spring-boot-starter-security的版本确实是2.4.4,但spring-boot-starter-security中引用的artifactI
问题内容: 我想使用NPM软件包。它具有各种依赖性。依赖图的一部分如下所示: 不幸的是,此版本中存在一个错误,导致该错误无法在Mac OS X上正确安装。此问题已在最新版本中修复。 如何获得更新版本的? 一些其他上下文: 明确要求版本为,明确要求版本为。 首先添加到我程序包的依赖项没有任何作用;这两个版本均已安装,并且仍使用旧版本 问题答案: 您可以使用npm收缩包装功能,以覆盖任何依赖性或子依赖
问题内容: 我正在使用Oracle的OEPE发行版(包括Weblogic服务器10.3.5)开发Web应用程序。WLS包含自己的Spring版本,该版本似乎是2.5.6.SEC01。但是,我们正在尝试使用3.1发行版的Spring和Spring Security功能。 Maven POM将Spring Version定义为属性3.1.1.RELEASE(该属性已插入各节中,即: 我在weblogi
我正在使用Oracle的OEPE发行版开发一个Web应用程序,包括Weblogic服务器10.3.5。WLS包括它自己的Spring版本,似乎是2.5.6。SEC01。但是,我们正在尝试使用特定于3.1版本的Spring和Spring Security功能。 Maven POM将Spring版本定义为3.1.1.RELEASE属性(该属性插入到部分中,即: 我已经尝试了两种不同的方法来weblog