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