You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@seatunnel.apache.org by ki...@apache.org on 2022/04/11 08:13:28 UTC
[incubator-seatunnel] branch dev updated: [Feature][e2e] Add spark e2e module (#1681)
This is an automated email from the ASF dual-hosted git repository.
kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new a0403b81 [Feature][e2e] Add spark e2e module (#1681)
a0403b81 is described below
commit a0403b81757abda681e65fd6dafa3a9206082033
Author: Wenjun Ruan <we...@apache.org>
AuthorDate: Mon Apr 11 16:13:21 2022 +0800
[Feature][e2e] Add spark e2e module (#1681)
* Add spark e2e module
* Add license header
* Increase ci timeout
---
.github/workflows/backend.yml | 2 +-
pom.xml | 24 +++-
seatunnel-dist/release-docs/LICENSE | 16 ---
seatunnel-e2e/pom.xml | 1 +
seatunnel-e2e/{ => seatunnel-spark-e2e}/pom.xml | 20 +++-
.../apache/seatunnel/e2e/spark/SparkContainer.java | 125 +++++++++++++++++++++
.../e2e/spark/fake/FakeSourceToConsoleIT.java | 39 +++++++
.../test/resources/fake/fakesource_to_console.conf | 72 ++++++++++++
.../src/test/resources/log4j.properties | 22 ++++
tools/dependencies/known-dependencies.txt | 10 --
10 files changed, 294 insertions(+), 37 deletions(-)
diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml
index f244c529..b21ce3d1 100644
--- a/.github/workflows/backend.yml
+++ b/.github/workflows/backend.yml
@@ -37,7 +37,7 @@ jobs:
strategy:
matrix:
java: ['8', '11']
- timeout-minutes: 40
+ timeout-minutes: 50
env:
MAVEN_OPTS: -Xmx2G -Xms2G
steps:
diff --git a/pom.xml b/pom.xml
index 188fafea..02da41ce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,6 +100,7 @@
<hadoop.binary.version>2.7</hadoop.binary.version>
<hadoop.version>2.7.5</hadoop.version>
<fastjson.version>1.2.60</fastjson.version>
+ <jackson.version>2.11.0</jackson.version>
<lombok.version>1.18.0</lombok.version>
<mysql.version>8.0.16</mysql.version>
<postgresql.version>42.3.3</postgresql.version>
@@ -485,16 +486,31 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ <version>${jackson.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ <version>${jackson.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>${jackson.version}</version>
+ </dependency>
+
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
<version>${testcontainer.version}</version>
<scope>test</scope>
<exclusions>
- <exclusion>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- </exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
diff --git a/seatunnel-dist/release-docs/LICENSE b/seatunnel-dist/release-docs/LICENSE
index 59758f02..a2e98777 100644
--- a/seatunnel-dist/release-docs/LICENSE
+++ b/seatunnel-dist/release-docs/LICENSE
@@ -759,20 +759,8 @@ The text of each license is the standard Apache 2.0 license.
(The Apache Software License, Version 2.0) Jackson-JAXRS-Smile (com.fasterxml.jackson.jaxrs:jackson-jaxrs-smile-provider:2.10.5 - http://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-smile-provider)
(The Apache Software License, Version 2.0) Jackson-JAXRS-base (com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.10.5 - http://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-base)
(The Apache Software License, Version 2.0) Jackson-JAXRS-base (com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.7.8 - http://wiki.fasterxml.com/JacksonHome/jackson-jaxrs-base)
- (The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.10.5 - http://github.com/FasterXML/jackson)
(The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.11.0 - http://github.com/FasterXML/jackson)
- (The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.11.4 - http://github.com/FasterXML/jackson)
- (The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.6.7 - http://github.com/FasterXML/jackson)
- (The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.7.8 - http://github.com/FasterXML/jackson)
- (The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.9.2 - http://github.com/FasterXML/jackson)
- (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.10.5 - https://github.com/FasterXML/jackson-core)
(The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.11.0 - https://github.com/FasterXML/jackson-core)
- (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.11.4 - https://github.com/FasterXML/jackson-core)
- (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.6.7 - https://github.com/FasterXML/jackson-core)
- (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.7.3 - https://github.com/FasterXML/jackson-core)
- (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.7.9 - https://github.com/FasterXML/jackson-core)
- (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.8.11 - https://github.com/FasterXML/jackson-core)
- (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.9.2 - https://github.com/FasterXML/jackson-core)
(The Apache Software License, Version 2.0) Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.0 - https://github.com/FasterXML/jackson-dataformats-text)
(The Apache Software License, Version 2.0) Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.8.11 - https://github.com/FasterXML/jackson)
(The Apache Software License, Version 2.0) Jackson-datatype-Joda (com.fasterxml.jackson.datatype:jackson-datatype-joda:2.10.5 - http://wiki.fasterxml.com/JacksonModuleJoda)
@@ -833,11 +821,7 @@ The text of each license is the standard Apache 2.0 license.
(The Apache Software License, Version 2.0) htrace-core (org.apache.htrace:htrace-core:3.1.0-incubating - http://incubator.apache.org/projects/htrace.html)
(The Apache Software License, Version 2.0) htrace-core (org.htrace:htrace-core:3.0.4 - https://github.com/cloudera/htrace)
(The Apache Software License, Version 2.0) htrace-core4 (org.apache.htrace:htrace-core4:4.1.0-incubating - http://incubator.apache.org/projects/htrace.html)
- (The Apache Software License, Version 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.10.5.1 - http://github.com/FasterXML/jackson)
(The Apache Software License, Version 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.11.0 - http://github.com/FasterXML/jackson)
- (The Apache Software License, Version 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.11.4 - http://github.com/FasterXML/jackson)
- (The Apache Software License, Version 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.6.7.1 - http://github.com/FasterXML/jackson)
- (The Apache Software License, Version 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.9.2 - http://github.com/FasterXML/jackson)
(The Apache Software License, Version 2.0) jackson-module-scala (com.fasterxml.jackson.module:jackson-module-scala_2.11:2.6.7.1 - http://wiki.fasterxml.com/JacksonModuleScala)
(The Apache Software License, Version 2.0) javax.inject (javax.inject:javax.inject:1 - http://code.google.com/p/atinject/)
(The Apache Software License, Version 2.0) lang-mustache (org.elasticsearch.plugin:lang-mustache-client:7.5.1 - https://github.com/elastic/elasticsearch)
diff --git a/seatunnel-e2e/pom.xml b/seatunnel-e2e/pom.xml
index c59e365f..5c37f80a 100644
--- a/seatunnel-e2e/pom.xml
+++ b/seatunnel-e2e/pom.xml
@@ -28,6 +28,7 @@
<modules>
<module>seatunnel-flink-e2e</module>
+ <module>seatunnel-spark-e2e</module>
</modules>
</project>
\ No newline at end of file
diff --git a/seatunnel-e2e/pom.xml b/seatunnel-e2e/seatunnel-spark-e2e/pom.xml
similarity index 70%
copy from seatunnel-e2e/pom.xml
copy to seatunnel-e2e/seatunnel-spark-e2e/pom.xml
index c59e365f..31b140df 100644
--- a/seatunnel-e2e/pom.xml
+++ b/seatunnel-e2e/seatunnel-spark-e2e/pom.xml
@@ -17,17 +17,25 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <artifactId>seatunnel</artifactId>
+ <artifactId>seatunnel-e2e</artifactId>
<groupId>org.apache.seatunnel</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>seatunnel-e2e</artifactId>
- <packaging>pom</packaging>
+ <artifactId>seatunnel-spark-e2e</artifactId>
+ <packaging>jar</packaging>
- <modules>
- <module>seatunnel-flink-e2e</module>
- </modules>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-core-spark</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.testcontainers</groupId>
+ <artifactId>testcontainers</artifactId>
+ </dependency>
+ </dependencies>
</project>
\ No newline at end of file
diff --git a/seatunnel-e2e/seatunnel-spark-e2e/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java b/seatunnel-e2e/seatunnel-spark-e2e/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java
new file mode 100644
index 00000000..149d848f
--- /dev/null
+++ b/seatunnel-e2e/seatunnel-spark-e2e/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.seatunnel.e2e.spark;
+
+import org.junit.After;
+import org.junit.Before;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.Container;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.Network;
+import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.lifecycle.Startables;
+import org.testcontainers.utility.MountableFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Stream;
+
+/**
+ * This class is the base class of SparkEnvironment test. The before method will create a Spark master, and after method will close the Spark master.
+ * You can use {@link SparkContainer#executeSeaTunnelSparkJob} to submit a seatunnel conf and a seatunnel spark job.
+ */
+public abstract class SparkContainer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(SparkContainer.class);
+
+ private static final String SPARK_DOCKER_IMAGE = "bitnami/spark:2.4.3";
+ public static final Network NETWORK = Network.newNetwork();
+
+ protected GenericContainer<?> master;
+ private static final String SEATUNNEL_SPARK_JAR = "seatunnel-core-spark.jar";
+ private static final String SPARK_JAR_PATH = Paths.get("/tmp", SEATUNNEL_SPARK_JAR).toString();
+
+ private static final int WAIT_SPARK_JOB_SUBMIT = 5000;
+
+ @Before
+ public void before() {
+ master = new GenericContainer<>(SPARK_DOCKER_IMAGE)
+ .withNetwork(NETWORK)
+ .withNetworkAliases("spark-master")
+ .withExposedPorts()
+ .withEnv("SPARK_MODE", "master")
+ .withLogConsumer(new Slf4jLogConsumer(LOG));
+ // In most case we can just use standalone mode to execute a spark job, if we want to use cluster mode, we need to
+ // start a worker.
+
+ Startables.deepStart(Stream.of(master)).join();
+ copySeaTunnelSparkCoreJar();
+ LOG.info("Spark container started");
+ }
+
+ @After
+ public void close() {
+ if (master != null) {
+ master.stop();
+ }
+ }
+
+ public Container.ExecResult executeSeaTunnelSparkJob(String confFile) throws IOException, InterruptedException {
+ final String confPath = getResource(confFile);
+ if (!new File(confPath).exists()) {
+ throw new IllegalArgumentException(confFile + " doesn't exist");
+ }
+ final String targetConfInContainer = Paths.get("/tmp", confFile).toString();
+ master.copyFileToContainer(MountableFile.forHostPath(confPath), targetConfInContainer);
+
+ // TODO: use start-seatunnel-spark.sh to run the spark job. Need to modified the SparkStarter can find the seatunnel-core-spark.jar.
+ final List<String> command = new ArrayList<>();
+ command.add("spark-submit");
+ command.add("--class");
+ command.add("org.apache.seatunnel.SeatunnelSpark");
+ command.add("--name");
+ command.add("SeaTunnel");
+ command.add("--master");
+ command.add("local");
+ command.add("--deploy-mode");
+ command.add("client");
+ command.add(SPARK_JAR_PATH);
+ command.add("-c");
+ command.add(targetConfInContainer);
+ command.add("--master");
+ command.add("local");
+ command.add("--deploy-mode");
+ command.add("client");
+
+ Container.ExecResult execResult = master.execInContainer("bash", "-c", String.join(" ", command));
+ LOG.info(execResult.getStdout());
+ LOG.error(execResult.getStderr());
+ // wait job start
+ Thread.sleep(WAIT_SPARK_JOB_SUBMIT);
+ return execResult;
+ }
+
+ protected void copySeaTunnelSparkCoreJar() {
+ String currentModuleHome = System.getProperty("user.dir");
+ // copy jar to container
+ String seatunnelCoreSparkJarPath = currentModuleHome.replace("/seatunnel-e2e/seatunnel-spark-e2e", "")
+ + "/seatunnel-core/seatunnel-core-spark/target/seatunnel-core-spark.jar";
+ master.copyFileToContainer(MountableFile.forHostPath(seatunnelCoreSparkJarPath), SPARK_JAR_PATH);
+ }
+
+ private String getResource(String confFile) {
+ return System.getProperty("user.dir") + "/src/test/resources" + confFile;
+ }
+
+}
diff --git a/seatunnel-e2e/seatunnel-spark-e2e/src/test/java/org/apache/seatunnel/e2e/spark/fake/FakeSourceToConsoleIT.java b/seatunnel-e2e/seatunnel-spark-e2e/src/test/java/org/apache/seatunnel/e2e/spark/fake/FakeSourceToConsoleIT.java
new file mode 100644
index 00000000..e1dece1e
--- /dev/null
+++ b/seatunnel-e2e/seatunnel-spark-e2e/src/test/java/org/apache/seatunnel/e2e/spark/fake/FakeSourceToConsoleIT.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.seatunnel.e2e.spark.fake;
+
+import org.apache.seatunnel.e2e.spark.SparkContainer;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.testcontainers.containers.Container;
+
+import java.io.IOException;
+
+/**
+ * This test case is used to verify that the fake source is able to send data to the console.
+ * Make sure the SeaTunnel job can submit successfully on spark engine.
+ */
+public class FakeSourceToConsoleIT extends SparkContainer {
+
+ @Test
+ public void testFakeSourceToConsoleSine() throws IOException, InterruptedException {
+ Container.ExecResult execResult = executeSeaTunnelSparkJob("/fake/fakesource_to_console.conf");
+ Assert.assertEquals(0, execResult.getExitCode());
+ }
+}
diff --git a/seatunnel-e2e/seatunnel-spark-e2e/src/test/resources/fake/fakesource_to_console.conf b/seatunnel-e2e/seatunnel-spark-e2e/src/test/resources/fake/fakesource_to_console.conf
new file mode 100644
index 00000000..dd7ca72c
--- /dev/null
+++ b/seatunnel-e2e/seatunnel-spark-e2e/src/test/resources/fake/fakesource_to_console.conf
@@ -0,0 +1,72 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+######
+###### This config file is a demonstration of streaming processing in seatunnel config
+######
+
+env {
+ # You can set spark configuration here
+ # see available properties defined by spark: https://spark.apache.org/docs/latest/configuration.html#available-properties
+ spark.app.name = "SeaTunnel"
+ spark.executor.instances = 2
+ spark.executor.cores = 1
+ spark.executor.memory = "1g"
+ spark.master = local
+}
+
+source {
+ # This is a example input plugin **only for test and demonstrate the feature input plugin**
+ Fake {
+ result_table_name = "my_dataset"
+ }
+
+ # You can also use other input plugins, such as hdfs
+ # hdfs {
+ # result_table_name = "accesslog"
+ # path = "hdfs://hadoop-cluster-01/nginx/accesslog"
+ # format = "json"
+ # }
+
+ # If you would like to get more information about how to configure seatunnel and see full list of input plugins,
+ # please go to https://seatunnel.apache.org/docs/spark/configuration/source-plugins/Fake
+}
+
+transform {
+ # split data by specific delimiter
+
+ # you can also use other transform plugins, such as sql
+ # sql {
+ # sql = "select * from accesslog where request_time > 1000"
+ # }
+
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/spark/configuration/transform-plugins/Split
+}
+
+sink {
+ # choose stdout output plugin to output data to console
+ Console {}
+
+ # you can also you other output plugins, such as sql
+ # hdfs {
+ # path = "hdfs://hadoop-cluster-01/nginx/accesslog_processed"
+ # save_mode = "append"
+ # }
+
+ # If you would like to get more information about how to configure seatunnel and see full list of output plugins,
+ # please go to https://seatunnel.apache.org/docs/spark/configuration/sink-plugins/Console
+}
\ No newline at end of file
diff --git a/seatunnel-e2e/seatunnel-spark-e2e/src/test/resources/log4j.properties b/seatunnel-e2e/seatunnel-spark-e2e/src/test/resources/log4j.properties
new file mode 100644
index 00000000..89547981
--- /dev/null
+++ b/seatunnel-e2e/seatunnel-spark-e2e/src/test/resources/log4j.properties
@@ -0,0 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Set everything to be logged to the console
+log4j.rootCategory=ERROR, console
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.err
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
diff --git a/tools/dependencies/known-dependencies.txt b/tools/dependencies/known-dependencies.txt
index bfada418..63239b49 100755
--- a/tools/dependencies/known-dependencies.txt
+++ b/tools/dependencies/known-dependencies.txt
@@ -291,21 +291,11 @@ icu4j-localespi-60.2.jar
influxdb-java-2.22.jar
ion-java-1.0.2.jar
j2objc-annotations-1.1.jar
-jackson-annotations-2.10.5.jar
jackson-annotations-2.11.0.jar
-jackson-annotations-2.6.7.jar
-jackson-annotations-2.7.0.jar
-jackson-core-2.10.5.jar
jackson-core-2.11.0.jar
-jackson-core-2.11.4.jar
-jackson-core-2.6.7.jar
-jackson-core-2.7.3.jar
jackson-core-asl-1.9.13.jar
jackson-core-asl-1.9.2.jar
-jackson-databind-2.10.5.1.jar
jackson-databind-2.11.0.jar
-jackson-databind-2.6.7.1.jar
-jackson-databind-2.7.3.jar
jackson-dataformat-cbor-2.12.3.jar
jackson-dataformat-cbor-2.8.11.jar
jackson-dataformat-smile-2.10.5.jar