This is an automated email from the ASF dual-hosted git repository.
wanghailin pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new f85eb78b37 [Fix][JDBC] fix jdbc default connection parameter invalid
(#8185)
f85eb78b37 is described below
commit f85eb78b37738c1467d0dc252b8dc05ca2852708
Author: Carl-Zhou-CN <[email protected]>
AuthorDate: Mon Mar 31 17:46:28 2025 +0800
[Fix][JDBC] fix jdbc default connection parameter invalid (#8185)
---
.../apache/seatunnel/api/ImportClassCheckTest.java | 8 ++
.../connector-cdc/connector-cdc-base/pom.xml | 17 ++-
.../connection/JdbcConnectionFactory.java | 3 +-
.../connection/JdbcConnectionPoolFactory.java | 6 +-
.../relational/connection/JdbcConnectionPools.java | 4 +-
seatunnel-connectors-v2/connector-jdbc/pom.xml | 46 +--------
.../seatunnel/jdbc/sink/ConnectionPoolManager.java | 3 +-
.../seatunnel/jdbc/sink/JdbcSinkWriter.java | 4 +-
.../connectors/seatunnel/jdbc/JdbcMysqlIT.java | 115 +++++++++++++++++++++
seatunnel-shade/pom.xml | 1 +
seatunnel-shade/seatunnel-hikari/pom.xml | 102 ++++++++++++++++++
11 files changed, 249 insertions(+), 60 deletions(-)
diff --git
a/seatunnel-ci-tools/src/test/java/org/apache/seatunnel/api/ImportClassCheckTest.java
b/seatunnel-ci-tools/src/test/java/org/apache/seatunnel/api/ImportClassCheckTest.java
index 5bfe523fe1..97d061022f 100644
---
a/seatunnel-ci-tools/src/test/java/org/apache/seatunnel/api/ImportClassCheckTest.java
+++
b/seatunnel-ci-tools/src/test/java/org/apache/seatunnel/api/ImportClassCheckTest.java
@@ -112,6 +112,14 @@ public class ImportClassCheckTest {
log.info("check jetty shade successfully");
}
+ @Test
+ public void hikariShadeCheck() {
+ Map<String, List<String>> errorMap =
+
checkImportClassPrefixWithAll(Collections.singletonList("com.zaxxer.hikari"));
+ Assertions.assertEquals(0, errorMap.size(), shadeErrorMsg("hikari",
errorMap));
+ log.info("check hikari shade successfully");
+ }
+
@Test
public void janinoShadeCheck() {
Map<String, List<String>> errorMap =
diff --git a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/pom.xml
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/pom.xml
index 1870c1da62..61aaa48211 100644
--- a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/pom.xml
+++ b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/pom.xml
@@ -34,12 +34,6 @@
<dependencyManagement>
<dependencies>
- <dependency>
- <groupId>com.zaxxer</groupId>
- <artifactId>HikariCP</artifactId>
- <version>${hikaricp.version}</version>
- </dependency>
-
<dependency>
<groupId>org.apache.seatunnel</groupId>
<artifactId>connector-common</artifactId>
@@ -98,10 +92,6 @@
<groupId>com.github.luben</groupId>
<artifactId>zstd-jni</artifactId>
</dependency>
- <dependency>
- <groupId>com.zaxxer</groupId>
- <artifactId>HikariCP</artifactId>
- </dependency>
<dependency>
<groupId>org.apache.seatunnel</groupId>
<artifactId>connector-common</artifactId>
@@ -116,6 +106,13 @@
<version>${commons-lang3.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-hikari</artifactId>
+ <version>${project.version}</version>
+ <classifier>optional</classifier>
+ </dependency>
+
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionFactory.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionFactory.java
index 349adf37fd..325e3bf831 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionFactory.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionFactory.java
@@ -17,13 +17,14 @@
package org.apache.seatunnel.connectors.cdc.base.relational.connection;
+import org.apache.seatunnel.shade.com.zaxxer.hikari.HikariDataSource;
+
import org.apache.seatunnel.common.utils.SeaTunnelException;
import org.apache.seatunnel.connectors.cdc.base.config.JdbcSourceConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.zaxxer.hikari.HikariDataSource;
import io.debezium.jdbc.JdbcConfiguration;
import io.debezium.jdbc.JdbcConnection;
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPoolFactory.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPoolFactory.java
index 44ca2f9bc5..4c9398a858 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPoolFactory.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPoolFactory.java
@@ -17,10 +17,10 @@
package org.apache.seatunnel.connectors.cdc.base.relational.connection;
-import org.apache.seatunnel.connectors.cdc.base.config.JdbcSourceConfig;
+import org.apache.seatunnel.shade.com.zaxxer.hikari.HikariConfig;
+import org.apache.seatunnel.shade.com.zaxxer.hikari.HikariDataSource;
-import com.zaxxer.hikari.HikariConfig;
-import com.zaxxer.hikari.HikariDataSource;
+import org.apache.seatunnel.connectors.cdc.base.config.JdbcSourceConfig;
/** A connection pool factory to create pooled DataSource {@link
HikariDataSource}. */
public abstract class JdbcConnectionPoolFactory {
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPools.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPools.java
index d67e466738..01ab2da444 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPools.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPools.java
@@ -17,13 +17,13 @@
package org.apache.seatunnel.connectors.cdc.base.relational.connection;
+import org.apache.seatunnel.shade.com.zaxxer.hikari.HikariDataSource;
+
import org.apache.seatunnel.connectors.cdc.base.config.JdbcSourceConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.zaxxer.hikari.HikariDataSource;
-
import java.util.HashMap;
import java.util.Map;
diff --git a/seatunnel-connectors-v2/connector-jdbc/pom.xml
b/seatunnel-connectors-v2/connector-jdbc/pom.xml
index a6205e0bf7..47fd43e6d8 100644
--- a/seatunnel-connectors-v2/connector-jdbc/pom.xml
+++ b/seatunnel-connectors-v2/connector-jdbc/pom.xml
@@ -240,9 +240,10 @@
</dependency>
<dependency>
- <groupId>com.zaxxer</groupId>
- <artifactId>HikariCP</artifactId>
- <version>${hikari.version}</version>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-hikari</artifactId>
+ <version>${project.version}</version>
+ <classifier>optional</classifier>
</dependency>
<dependency>
@@ -353,43 +354,4 @@
</dependency>
</dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-shade-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>shade</goal>
- </goals>
- <phase>package</phase>
- <configuration>
- <createSourcesJar>false</createSourcesJar>
- <shadeSourcesContent>true</shadeSourcesContent>
-
<shadedArtifactAttached>false</shadedArtifactAttached>
-
<createDependencyReducedPom>false</createDependencyReducedPom>
- <filters>
- <filter>
- <artifact>*:*</artifact>
- <excludes>
- <exclude>META-INF/*.SF</exclude>
- <exclude>META-INF/*.DSA</exclude>
- <exclude>META-INF/*.RSA</exclude>
- </excludes>
- </filter>
- </filters>
- <relocations>
- <!-- rename hikari to avoid jar conflict from
spark -->
- <relocation>
- <pattern>com.zaxxer.hikari</pattern>
-
<shadedPattern>${seatunnel.shade.package}.com.zaxxer.hikari</shadedPattern>
- </relocation>
- </relocations>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
</project>
diff --git
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/ConnectionPoolManager.java
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/ConnectionPoolManager.java
index e42dff9c9b..67778b945b 100644
---
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/ConnectionPoolManager.java
+++
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/ConnectionPoolManager.java
@@ -17,7 +17,8 @@
package org.apache.seatunnel.connectors.seatunnel.jdbc.sink;
-import com.zaxxer.hikari.HikariDataSource;
+import org.apache.seatunnel.shade.com.zaxxer.hikari.HikariDataSource;
+
import lombok.Getter;
import java.sql.Connection;
diff --git
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/JdbcSinkWriter.java
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/JdbcSinkWriter.java
index d3c9949dc3..a9cea87394 100644
---
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/JdbcSinkWriter.java
+++
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/JdbcSinkWriter.java
@@ -17,6 +17,8 @@
package org.apache.seatunnel.connectors.seatunnel.jdbc.sink;
+import org.apache.seatunnel.shade.com.zaxxer.hikari.HikariDataSource;
+
import org.apache.seatunnel.api.sink.MultiTableResourceManager;
import org.apache.seatunnel.api.table.catalog.TablePath;
import org.apache.seatunnel.api.table.catalog.TableSchema;
@@ -31,7 +33,6 @@ import
org.apache.seatunnel.connectors.seatunnel.jdbc.internal.dialect.JdbcDiale
import org.apache.seatunnel.connectors.seatunnel.jdbc.state.JdbcSinkState;
import org.apache.seatunnel.connectors.seatunnel.jdbc.state.XidInfo;
-import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
@@ -88,6 +89,7 @@ public class JdbcSinkWriter extends
AbstractJdbcSinkWriter<ConnectionPoolManager
ds.setPassword(jdbcSinkConfig.getJdbcConnectionConfig().getPassword().get());
}
ds.setAutoCommit(jdbcSinkConfig.getJdbcConnectionConfig().isAutoCommit());
+
jdbcSinkConfig.getJdbcConnectionConfig().getProperties().forEach(ds::addDataSourceProperty);
return new JdbcMultiTableResourceManager(new
ConnectionPoolManager(ds));
}
diff --git
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcMysqlIT.java
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcMysqlIT.java
index 1cbc4e8491..371c31c16a 100644
---
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcMysqlIT.java
+++
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-1/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcMysqlIT.java
@@ -19,6 +19,7 @@
package org.apache.seatunnel.connectors.seatunnel.jdbc;
import org.apache.seatunnel.shade.com.google.common.collect.Lists;
+import org.apache.seatunnel.shade.com.zaxxer.hikari.pool.HikariProxyConnection;
import org.apache.seatunnel.api.configuration.ReadonlyConfig;
import org.apache.seatunnel.api.table.catalog.CatalogTable;
@@ -33,6 +34,7 @@ import org.apache.seatunnel.common.utils.JdbcUrlUtil;
import org.apache.seatunnel.common.utils.ReflectionUtils;
import
org.apache.seatunnel.connectors.seatunnel.jdbc.catalog.mysql.MySqlCatalog;
import
org.apache.seatunnel.connectors.seatunnel.jdbc.internal.connection.JdbcConnectionProvider;
+import
org.apache.seatunnel.connectors.seatunnel.jdbc.sink.JdbcMultiTableResourceManager;
import org.apache.seatunnel.connectors.seatunnel.jdbc.sink.JdbcSink;
import org.apache.seatunnel.connectors.seatunnel.jdbc.sink.JdbcSinkFactory;
import org.apache.seatunnel.connectors.seatunnel.jdbc.sink.JdbcSinkWriter;
@@ -459,6 +461,7 @@ public class JdbcMysqlIT extends AbstractJdbcIT {
public void parametersTest() throws Exception {
defaultSinkParametersTest();
defaultSourceParametersTest();
+ defaultMultiSinkParametersTest();
}
void defaultSinkParametersTest() throws IOException, SQLException,
ClassNotFoundException {
@@ -546,6 +549,118 @@ public class JdbcMysqlIT extends AbstractJdbcIT {
Assertions.assertEquals(connectionProperties4.get("rewriteBatchedStatements"),
"false");
}
+ void defaultMultiSinkParametersTest() throws IOException, SQLException,
ClassNotFoundException {
+ TableSchema tableSchema =
+ TableSchema.builder()
+ .column(
+ PhysicalColumn.of(
+ "c_bigint",
+ BasicType.LONG_TYPE,
+ 22,
+ false,
+ null,
+ "c_bigint"))
+ .build();
+ CatalogTable catalogTable =
+ CatalogTable.of(
+ TableIdentifier.of("test_catalog", "seatunnel",
"source"),
+ tableSchema,
+ new HashMap<>(),
+ new ArrayList<>(),
+ "User table");
+
+ // case1 url not contains parameters and properties not contains
parameters
+ Map<String, Object> map1 = getDefaultConfigMap();
+ map1.put("url", getUrl());
+ ReadonlyConfig config1 = ReadonlyConfig.fromMap(map1);
+ TableSinkFactoryContext context1 =
+ TableSinkFactoryContext.replacePlaceholderAndCreate(
+ catalogTable,
+ config1,
+ Thread.currentThread().getContextClassLoader(),
+ Collections.emptyList());
+ JdbcSink jdbcSink1 = (JdbcSink) new
JdbcSinkFactory().createSink(context1).createSink();
+ JdbcMultiTableResourceManager multiTableResourceManager1 =
+ (JdbcMultiTableResourceManager)
+
jdbcSink1.createWriter(null).initMultiTableResourceManager(1, 1);
+ Properties connectionProperties1 =
getMultiSinkProperties(multiTableResourceManager1);
+
Assertions.assertEquals(connectionProperties1.get("rewriteBatchedStatements"),
"true");
+
+ // case2 url contains parameters and properties not contains parameters
+ Map<String, Object> map2 = getDefaultConfigMap();
+ map2.put("url", getUrl() + "?rewriteBatchedStatements=false");
+ ReadonlyConfig config2 = ReadonlyConfig.fromMap(map2);
+ TableSinkFactoryContext context2 =
+ TableSinkFactoryContext.replacePlaceholderAndCreate(
+ catalogTable,
+ config2,
+ Thread.currentThread().getContextClassLoader(),
+ Collections.emptyList());
+ JdbcSink jdbcSink2 = (JdbcSink) new
JdbcSinkFactory().createSink(context2).createSink();
+ JdbcMultiTableResourceManager multiTableResourceManager2 =
+ (JdbcMultiTableResourceManager)
+
jdbcSink2.createWriter(null).initMultiTableResourceManager(1, 1);
+ Properties connectionProperties2 =
getMultiSinkProperties(multiTableResourceManager2);
+
Assertions.assertEquals(connectionProperties2.get("rewriteBatchedStatements"),
"false");
+
+ // case3 url not contains parameters and properties not contains
parameters
+ Map<String, Object> map3 = getDefaultConfigMap();
+ Map<String, String> properties3 = new HashMap<>();
+ properties3.put("rewriteBatchedStatements", "false");
+ map3.put("properties", properties3);
+ map3.put("url", getUrl());
+ ReadonlyConfig config3 = ReadonlyConfig.fromMap(map3);
+ TableSinkFactoryContext context3 =
+ TableSinkFactoryContext.replacePlaceholderAndCreate(
+ catalogTable,
+ config3,
+ Thread.currentThread().getContextClassLoader(),
+ Collections.emptyList());
+ JdbcSink jdbcSink3 = (JdbcSink) new
JdbcSinkFactory().createSink(context3).createSink();
+ JdbcMultiTableResourceManager multiTableResourceManager3 =
+ (JdbcMultiTableResourceManager)
+
jdbcSink3.createWriter(null).initMultiTableResourceManager(1, 1);
+ Properties connectionProperties3 =
getMultiSinkProperties(multiTableResourceManager3);
+
Assertions.assertEquals(connectionProperties3.get("rewriteBatchedStatements"),
"false");
+
+ // case4 url contains parameters and properties contains parameters
+ Map<String, Object> map4 = getDefaultConfigMap();
+ Map<String, String> properties4 = new HashMap<>();
+ properties4.put("useSSL", "true");
+ properties4.put("rewriteBatchedStatements", "false");
+ map4.put("properties", properties4);
+ map4.put("url", getUrl() +
"?useSSL=false&rewriteBatchedStatements=true");
+ ReadonlyConfig config4 = ReadonlyConfig.fromMap(map4);
+ TableSinkFactoryContext context4 =
+ TableSinkFactoryContext.replacePlaceholderAndCreate(
+ catalogTable,
+ config4,
+ Thread.currentThread().getContextClassLoader(),
+ Collections.emptyList());
+ JdbcSink jdbcSink4 = (JdbcSink) new
JdbcSinkFactory().createSink(context4).createSink();
+ JdbcMultiTableResourceManager multiTableResourceManager4 =
+ (JdbcMultiTableResourceManager)
+
jdbcSink4.createWriter(null).initMultiTableResourceManager(1, 1);
+ Properties connectionProperties4 =
getMultiSinkProperties(multiTableResourceManager4);
+ Assertions.assertEquals(connectionProperties4.get("useSSL"), "true");
+
Assertions.assertEquals(connectionProperties4.get("rewriteBatchedStatements"),
"false");
+ }
+
+ private Properties getMultiSinkProperties(
+ JdbcMultiTableResourceManager multiTableResourceManager) throws
SQLException {
+ HikariProxyConnection hikariProxyConnection =
+ (HikariProxyConnection)
+ multiTableResourceManager
+ .getSharedResource()
+ .get()
+ .getConnectionPool()
+ .getConnection();
+ Properties connectionProperties =
+ ((ConnectionImpl)
ReflectionUtils.getField(hikariProxyConnection, "delegate").get())
+ .getProperties();
+ return connectionProperties;
+ }
+
void defaultSourceParametersTest() throws Exception {
// case1 url not contains parameters and properties not contains
parameters
Map<String, Object> map1 = getDefaultConfigMap();
diff --git a/seatunnel-shade/pom.xml b/seatunnel-shade/pom.xml
index 0011f6b37d..590f8d3b46 100644
--- a/seatunnel-shade/pom.xml
+++ b/seatunnel-shade/pom.xml
@@ -36,6 +36,7 @@
<module>seatunnel-jetty9-9.4.56</module>
<module>seatunnel-hadoop-aws</module>
<module>seatunnel-arrow</module>
+ <module>seatunnel-hikari</module>
</modules>
<build>
diff --git a/seatunnel-shade/seatunnel-hikari/pom.xml
b/seatunnel-shade/seatunnel-hikari/pom.xml
new file mode 100644
index 0000000000..0b662d09cd
--- /dev/null
+++ b/seatunnel-shade/seatunnel-hikari/pom.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-shade</artifactId>
+ <version>${revision}</version>
+ </parent>
+
+ <artifactId>seatunnel-hikari</artifactId>
+ <name>SeaTunnel : Shade : Hikari</name>
+
+ <properties>
+ <hikari.version>4.0.3</hikari.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.zaxxer</groupId>
+ <artifactId>HikariCP</artifactId>
+ <version>${hikari.version}</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <finalName>seatunnel-hikari</finalName>
+
<createSourcesJar>${enableSourceJarCreation}</createSourcesJar>
+ <shadeSourcesContent>true</shadeSourcesContent>
+
<shadedArtifactAttached>false</shadedArtifactAttached>
+
<createDependencyReducedPom>false</createDependencyReducedPom>
+ <filters>
+ <filter>
+ <artifact>*:*</artifact>
+ <excludes>
+ <exclude>META-INF/*.SF</exclude>
+ <exclude>META-INF/*.DSA</exclude>
+ <exclude>META-INF/*.RSA</exclude>
+ </excludes>
+ </filter>
+ </filters>
+ <relocations>
+ <!-- rename hikari to avoid jar conflict from
spark -->
+ <relocation>
+ <pattern>com.zaxxer.hikari</pattern>
+
<shadedPattern>${seatunnel.shade.package}.com.zaxxer.hikari</shadedPattern>
+ </relocation>
+ </relocations>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-artifacts</id>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <artifacts>
+ <artifact>
+
<file>${basedir}/target/seatunnel-hikari.jar</file>
+ <type>jar</type>
+ <classifier>optional</classifier>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>