This is an automated email from the ASF dual-hosted git repository.
hawk9821 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/seatunnel-shade.git
The following commit(s) were added to refs/heads/main by this push:
new 95c47a3 [Feature][Shade] 3.0.0-fix — add calcite, upgrade janino,
align scala with Spark (#12)
95c47a3 is described below
commit 95c47a3da50794b7abecf53a4d53bed457ae9359
Author: zhangdonghao <[email protected]>
AuthorDate: Wed Jun 24 15:18:40 2026 +0800
[Feature][Shade] 3.0.0-fix — add calcite, upgrade janino, align scala with
Spark (#12)
* [feature][shade]Release 3.0.0
* [feature][shade]Release 3.0.0-fix
---
README.md | 230 ++++++++++++++++++++++++++++++++++++++++
pom.xml | 8 +-
seatunnel-shade-calcite/pom.xml | 114 ++++++++++++++++++++
3 files changed, 349 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index dc27604..f7a3112 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,231 @@
# seatunnel-shade
+
+Apache SeaTunnel Shade — shaded (relocated) JARs of third-party libraries for
Apache SeaTunnel.
+
+Each module wraps a single third-party library, relocating its packages under
`org.apache.seatunnel.shade.*` to avoid classpath conflicts when SeaTunnel
itself depends on different versions of the same libraries.
+
+## Modules
+
+| Module | Library | Version |
+|--------|---------|---------|
+| `seatunnel-shade-hazelcast` | Hazelcast | 5.1 |
+| `seatunnel-shade-hadoop3-uber` | Hadoop Client | 3.1.4 |
+| `seatunnel-shade-jackson` | Jackson | 2.13.3 |
+| `seatunnel-shade-guava` | Guava | 27.0-jre |
+| `seatunnel-shade-hadoop-aws` | Hadoop AWS | 3.1.4 |
+| `seatunnel-shade-arrow` | Apache Arrow | 15.0.1 |
+| `seatunnel-shade-hikari` | HikariCP | 4.0.3 |
+| `seatunnel-shade-thrift-service` | Apache Doris Thrift | 1.0.0 |
+| `seatunnel-shade-janino` | Janino | 3.1.12 |
+| `seatunnel-shade-scala-compiler` | Scala Compiler | 2.12.15 |
+| `seatunnel-shade-jetty` | Jetty | 9.4.56 |
+| `seatunnel-shade-commons-lang3` | Commons Lang3 | 3.18.0 |
+| `seatunnel-shade-calcite` | Apache Calcite | 1.38.0 |
+
+## Build
+
+```bash
+# Full build (skip tests, skip RAT license check)
+mvn -B -DskipTests -Drat.skip=true clean install
+
+# Build with parallelism
+mvn -B -DskipTests -Drat.skip=true -T 2C clean install
+
+# Build single module + dependencies
+mvn -B -DskipTests -pl seatunnel-shade-guava -am clean install
+
+# Build single module only (no dependencies)
+mvn -B -DskipTests -pl seatunnel-shade-guava clean install
+```
+
+## Release
+
+### Full release
+
+Deploy all modules:
+
+```bash
+mvn -B -DskipTests -Drat.skip=true clean deploy
+```
+
+### Partial release (one or a few modules)
+
+When upstream SeaTunnel changes only affect a subset of shade modules, use
`-pl` to deploy only the changed modules. Running a full deploy would hit
already-published versions and fail with a Nexus 400 error.
+
+**Example**: SeaTunnel added a Calcite plugin and aligned the Scala version —
only 3 modules need redeploy.
+
+**Steps**:
+
+```bash
+# 1. Verify locally (skip GPG signing)
+mvn -B -DskipTests -Drat.skip=true -Dgpg.skip=true \
+ -pl
seatunnel-shade-calcite,seatunnel-shade-janino,seatunnel-shade-scala-compiler \
+ clean install
+
+# 2. Check JAR sizes under target/, then deploy to Apache repository
+mvn -B -DskipTests -Drat.skip=true \
+ -pl
seatunnel-shade-calcite,seatunnel-shade-janino,seatunnel-shade-scala-compiler \
+ clean deploy
+```
+
+**Key points**:
+
+- Module versions follow `${library.version}-${seatunnel.shade.version}` (e.g.
`1.38.0-3.0.0`). As long as the library version changes, there is no conflict
with published artifacts.
+- **Never** run `mvn clean deploy` without `-pl` — unchanged modules will be
redeployed, and Nexus will reject them with a 400 error.
+- If only the shade plugin configuration changed (not the library version),
you must bump the version manually before deploying.
+
+### Tagging
+
+```bash
+git tag v3.0.0.fix
+git push origin v3.0.0.fix
+```
+
+## Adding a new module
+
+1. Add the new module to `<modules>` and `<properties>` in root `pom.xml`.
+
+2. Create the module POM following `seatunnel-shade-commons-lang3/pom.xml`
(Pattern A — produces `original-` + shaded JAR):
+
+```xml
+<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-shade</artifactId>
+ <version>3.0.0</version>
+ </parent>
+
+ <artifactId>seatunnel-shade-xxx</artifactId>
+ <version>${xxx.version}-${seatunnel.shade.version}</version>
+ <name>SeaTunnel : Shade : Xxx</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>...</groupId>
+ <artifactId>...</artifactId>
+ <version>${xxx.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>
+
<createDependencyReducedPom>true</createDependencyReducedPom>
+
<dependencyReducedPomLocation>${project.basedir}/target/dependency-reduced-pom.xml</dependencyReducedPomLocation>
+ <filters>
+ <filter>
+ <artifact>*:*</artifact>
+ <excludes>
+ <exclude>META-INF/*.SF</exclude>
+ <exclude>META-INF/*.DSA</exclude>
+ <exclude>META-INF/*.RSA</exclude>
+ </excludes>
+ </filter>
+ </filters>
+ <relocations>
+ <relocation>
+ <pattern>original.package</pattern>
+
<shadedPattern>${seatunnel.shade.package}.original.package</shadedPattern>
+ </relocation>
+ </relocations>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>flatten-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
+```
+
+## Updating SeaTunnel after release
+
+After publishing new shade artifacts, the SeaTunnel project
(`apache/seatunnel`) needs corresponding changes to consume the updated
versions.
+
+### 1. Update version properties
+
+In SeaTunnel's root `pom.xml`, each shade module has a corresponding version
property:
+
+```xml
+<properties>
+ <seatunnel.shade.version>3.0.0</seatunnel.shade.version>
+ <seatunnel.shade.guava.version>27.0-jre</seatunnel.shade.guava.version>
+ <seatunnel.shade.janino.version>3.0.11</seatunnel.shade.janino.version>
+
<seatunnel.shade.scala-compiler.version>2.12.15</seatunnel.shade.scala-compiler.version>
+ <seatunnel.shade.calcite.version>1.38.0</seatunnel.shade.calcite.version>
+ <!-- ... other shade modules ... -->
+</properties>
+```
+
+The effective dependency version is assembled as
`${seatunnel.shade.<lib>.version}-${seatunnel.shade.version}` (e.g.
`1.38.0-3.0.0`).
+
+When a shade module is updated, bump the corresponding `<lib>.version`
property. For example, after upgrading janino from `3.0.11` to `3.1.12`:
+
+```diff
+- <seatunnel.shade.janino.version>3.0.11</seatunnel.shade.janino.version>
++ <seatunnel.shade.janino.version>3.1.12</seatunnel.shade.janino.version>
+```
+
+If the `seatunnel.shade.version` itself changes (e.g. `3.0.0` → `3.0.1`), it
affects **all** shade dependencies and every module must be republished.
+
+### 2. Declare the shaded dependency
+
+All shade modules are centrally managed in SeaTunnel's root
`<dependencyManagement>`. For new shade modules, add a corresponding entry
following the standard pattern:
+
+```xml
+<dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-shade-<name></artifactId>
+
<version>${seatunnel.shade.<name>.version}-${seatunnel.shade.version}</version>
+</dependency>
+```
+
+Existing entries (all 13 modules):
+
+```xml
+<dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-shade-hadoop3-uber</artifactId>
+
<version>${seatunnel.shade.hadoop.version}-${seatunnel.shade.version}</version>
+</dependency>
+<dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-shade-guava</artifactId>
+
<version>${seatunnel.shade.guava.version}-${seatunnel.shade.version}</version>
+</dependency>
+<dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-shade-jackson</artifactId>
+
<version>${seatunnel.shade.jackson.version}-${seatunnel.shade.version}</version>
+</dependency>
+<dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-shade-calcite</artifactId>
+
<version>${seatunnel.shade.calcite.version}-${seatunnel.shade.version}</version>
+</dependency>
+<!-- ... remaining modules follow the same pattern ... -->
+</dependency>
+```
+
+### Summary checklist
+
+For each changed shade module:
+
+| Step | Location in SeaTunnel |
+|------|----------------------|
+| Bump version property | Root `pom.xml` → `<properties>` →
`seatunnel.shade.<lib>.version` |
+| Declare dependency (if consumed) | Root `pom.xml` → `<dependencyManagement>`
|
+| Update code imports | All `.java` files using the library |
diff --git a/pom.xml b/pom.xml
index e08e09a..32cd68d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,6 +72,7 @@
<module>seatunnel-shade-scala-compiler</module>
<module>seatunnel-shade-jetty</module>
<module>seatunnel-shade-commons-lang3</module>
+ <module>seatunnel-shade-calcite</module>
</modules>
<properties>
@@ -98,10 +99,11 @@
<hikari.version>4.0.3</hikari.version>
<jetty.version>9.4.56.v20240826</jetty.version>
<thrift-service.version>1.0.0</thrift-service.version>
- <janino.verion>3.0.11</janino.verion>
- <scala.version>2.13.11</scala.version>
- <scala.binary.version>2.13</scala.binary.version>
+ <janino.verion>3.1.12</janino.verion>
+ <scala.version>2.12.15</scala.version>
+ <scala.binary.version>2.12</scala.binary.version>
<commons-lang3.version>3.18.0</commons-lang3.version>
+ <calcite.version>1.38.0</calcite.version>
</properties>
<dependencyManagement>
diff --git a/seatunnel-shade-calcite/pom.xml b/seatunnel-shade-calcite/pom.xml
new file mode 100644
index 0000000..95e508e
--- /dev/null
+++ b/seatunnel-shade-calcite/pom.xml
@@ -0,0 +1,114 @@
+<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>3.0.0</version>
+ </parent>
+
+ <artifactId>seatunnel-shade-calcite</artifactId>
+ <version>${calcite.version}-${seatunnel.shade.version}</version>
+ <name>SeaTunnel : Shade : Calcite</name>
+
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.calcite</groupId>
+ <artifactId>calcite-core</artifactId>
+ <version>${calcite.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </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>
+
<createDependencyReducedPom>true</createDependencyReducedPom>
+
<dependencyReducedPomLocation>${project.basedir}/target/dependency-reduced-pom.xml</dependencyReducedPomLocation>
+ <filters>
+ <filter>
+ <artifact>*:*</artifact>
+ <excludes>
+ <exclude>META-INF/*.SF</exclude>
+ <exclude>META-INF/*.DSA</exclude>
+ <exclude>META-INF/*.RSA</exclude>
+ </excludes>
+ </filter>
+ </filters>
+ <relocations>
+ <relocation>
+ <pattern>org.apache.calcite</pattern>
+
<shadedPattern>${seatunnel.shade.package}.org.apache.calcite</shadedPattern>
+ </relocation>
+ <relocation>
+
<pattern>org.apache.calcite.avatica</pattern>
+
<shadedPattern>${seatunnel.shade.package}.org.apache.calcite.avatica</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.codehaus.janino</pattern>
+
<shadedPattern>${seatunnel.shade.package}.org.codehaus.janino</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.codehaus.commons</pattern>
+
<shadedPattern>${seatunnel.shade.package}.org.codehaus.commons</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.commons.codec</pattern>
+
<shadedPattern>${seatunnel.shade.package}.org.apache.commons.codec</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>com.jayway.jsonpath</pattern>
+
<shadedPattern>${seatunnel.shade.package}.com.jayway.jsonpath</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>net.minidev</pattern>
+
<shadedPattern>${seatunnel.shade.package}.net.minidev</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apiguardian</pattern>
+
<shadedPattern>${seatunnel.shade.package}.org.apiguardian</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.checkerframework</pattern>
+
<shadedPattern>${seatunnel.shade.package}.org.checkerframework</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>com.google</pattern>
+
<shadedPattern>${seatunnel.shade.package}.com.google</shadedPattern>
+ </relocation>
+ </relocations>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>flatten-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>