You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ki...@apache.org on 2026/04/20 10:36:58 UTC

(doris) branch rich-branch-4.1-fe-foundation-backport-20260420 created (now 7b27866c51f)

This is an automated email from the ASF dual-hosted git repository.

CalvinKirs pushed a change to branch rich-branch-4.1-fe-foundation-backport-20260420
in repository https://gitbox.apache.org/repos/asf/doris.git


      at 7b27866c51f [refactor](fe) Add fe-foundation module with zero-dependency JDK-only utilities

This branch includes the following new commits:

     new 7b27866c51f [refactor](fe) Add fe-foundation module with zero-dependency JDK-only utilities

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org


(doris) 01/01: [refactor](fe) Add fe-foundation module with zero-dependency JDK-only utilities

Posted by ki...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

CalvinKirs pushed a commit to branch rich-branch-4.1-fe-foundation-backport-20260420
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 7b27866c51f8a7a48cf980576130f939c2722062
Author: guoqiang <gu...@selectdb.com>
AuthorDate: Tue Mar 10 15:58:08 2026 +0800

    [refactor](fe) Add fe-foundation module with zero-dependency JDK-only utilities
    
    fe-common has accumulated heavy transitive dependencies (Guava, Hadoop,
    Trino SPI, ANTLR, Alibaba SDK, etc.), making it unsuitable for lightweight
    consumers such as SPI plugins and fe-extension modules. This creates a new
    fe-foundation module that sits at the very bottom of the FE dependency
    hierarchy (fe-foundation < fe-extension-spi < fe-common < fe-core) and
    carries zero third-party compile dependencies.
    
    Scope of this first iteration:
    - Create the fe-foundation Maven module with zero-dependency pom.xml
    - Move 10 pure-JDK utility classes from fe-common and fe-core into new
      org.apache.doris.foundation.{format,property,type,util} packages:
      FormatOptions, ResultOr, ConnectorProperty, ConnectorPropertiesUtils,
      ParamRules, StoragePropertiesException, BitUtil, ByteBufferUtil,
      PathUtils, SerializationUtils
    - Replace trivial Guava/commons-lang3 usage in ConnectorPropertiesUtils
      with JDK equivalents (Sets.newHashSet -> new HashSet, StringUtils ->
      private isNotBlank method)
    - Update all import statements across ~80 consuming files
    - Add fe-foundation as dependency in fe-common and fe-core pom.xml
    
    Classes intentionally left in fe-common for future phases:
    - Pair/Triple: use Gson @SerializedName, persisted in editlog metadata
    - Writable and IO interfaces: 194+ importers deeply embedded in the
      persistence/catalog layer
    
    (cherry picked from commit 1faa9b85ec2b7deb93194f98bb7a7410549e3122)
---
 fe/fe-common/pom.xml                               |   4 +
 fe/fe-core/pom.xml                                 |   4 +
 .../org/apache/doris/analysis/ArrayLiteral.java    |   2 +-
 .../org/apache/doris/analysis/BoolLiteral.java     |   2 +-
 .../java/org/apache/doris/analysis/BrokerDesc.java |   2 +-
 .../java/org/apache/doris/analysis/CastExpr.java   |   2 +-
 .../org/apache/doris/analysis/DateLiteral.java     |   2 +-
 .../org/apache/doris/analysis/DecimalLiteral.java  |   2 +-
 .../main/java/org/apache/doris/analysis/Expr.java  |   3 +-
 .../org/apache/doris/analysis/FloatLiteral.java    |   2 +-
 .../org/apache/doris/analysis/IPv4Literal.java     |   2 +-
 .../org/apache/doris/analysis/IPv6Literal.java     |   2 +-
 .../org/apache/doris/analysis/JsonLiteral.java     |   2 +-
 .../org/apache/doris/analysis/LiteralExpr.java     |   2 +-
 .../java/org/apache/doris/analysis/MapLiteral.java |   2 +-
 .../java/org/apache/doris/analysis/MaxLiteral.java |   2 +-
 .../org/apache/doris/analysis/NullLiteral.java     |   2 +-
 .../org/apache/doris/analysis/PlaceHolderExpr.java |   2 +-
 .../org/apache/doris/analysis/StringLiteral.java   |   2 +-
 .../org/apache/doris/analysis/StructLiteral.java   |   2 +-
 .../apache/doris/analysis/VarBinaryLiteral.java    |   2 +-
 .../org/apache/doris/common/util/LocationPath.java |   2 +-
 .../org/apache/doris/common/util/PrintableMap.java |   2 +-
 .../apache/doris/datasource/InternalCatalog.java   |   2 +-
 .../doris/datasource/hive/HMSTransaction.java      |   2 +-
 .../datasource/property/ConnectionProperties.java  |   4 +-
 .../metastore/AWSGlueMetaStoreBaseProperties.java  |   6 +-
 .../metastore/AbstractIcebergProperties.java       |   2 +-
 .../metastore/AbstractPaimonProperties.java        |   2 +-
 .../metastore/AliyunDLFBaseProperties.java         |   8 +-
 .../property/metastore/HMSBaseProperties.java      |   6 +-
 .../metastore/HiveGlueMetaStoreProperties.java     |   2 +-
 .../property/metastore/HiveHMSProperties.java      |   2 +-
 .../metastore/IcebergHMSMetaStoreProperties.java   |   2 +-
 .../metastore/IcebergJdbcMetaStoreProperties.java  |   2 +-
 .../property/metastore/IcebergRestProperties.java  |   4 +-
 .../metastore/PaimonHMSMetaStoreProperties.java    |   2 +-
 .../metastore/PaimonRestMetaStoreProperties.java   |   4 +-
 .../storage/AbstractS3CompatibleProperties.java    |   4 +-
 .../property/storage/AzureProperties.java          |   4 +-
 .../property/storage/AzurePropertyUtils.java       |   2 +-
 .../property/storage/BrokerProperties.java         |   2 +-
 .../datasource/property/storage/COSProperties.java |   2 +-
 .../datasource/property/storage/GCSProperties.java |   2 +-
 .../property/storage/HdfsProperties.java           |   2 +-
 .../property/storage/HdfsPropertiesUtils.java      |   2 +-
 .../property/storage/MinioProperties.java          |   2 +-
 .../datasource/property/storage/OBSProperties.java |   2 +-
 .../property/storage/OSSHdfsProperties.java        |   2 +-
 .../datasource/property/storage/OSSProperties.java |   4 +-
 .../property/storage/OzoneProperties.java          |   2 +-
 .../datasource/property/storage/S3Properties.java  |   4 +-
 .../property/storage/S3PropertyUtils.java          |   2 +-
 .../property/storage/StorageProperties.java        |   4 +-
 .../org/apache/doris/nereids/NereidsPlanner.java   |   2 +-
 .../org/apache/doris/nereids/StatementContext.java |   2 +-
 .../nereids/trees/expressions/literal/Literal.java |   2 +-
 .../trees/plans/commands/insert/InsertUtils.java   |   2 +-
 .../apache/doris/planner/GroupCommitPlanner.java   |   2 +-
 .../doris/planner/RuntimeFilterGenerator.java      |   2 +-
 .../java/org/apache/doris/qe/StmtExecutor.java     |   2 +-
 .../main/java/org/apache/doris/qe/VariableMgr.java |   2 +-
 .../analysis/VarBinaryLiteralAnalysisTest.java     |  93 +++++++++++
 .../apache/doris/common/util/LocationPathTest.java |   2 +-
 .../apache/doris/common/util/PathUtilsTest.java    |   2 +
 .../doris/common/util/SerializationUtilsTest.java  |   2 +
 .../datasource/iceberg/IcebergTransactionTest.java |   2 +-
 .../property/ConnectorPropertiesUtilsTest.java     |   2 +
 .../doris/datasource/property/ParamRulesTest.java  |   2 +
 .../metastore/AliyunDLFBasePropertiesTest.java     |   4 +-
 .../IcebergAliyunDLFMetaStorePropertiesTest.java   |   2 +-
 .../property/storage/AzurePropertiesTest.java      |   2 +-
 .../property/storage/AzurePropertyUtilsTest.java   |   2 +-
 .../property/storage/COSPropertiesTest.java        |   2 +-
 .../property/storage/HdfsPropertiesTest.java       |   2 +-
 .../property/storage/HdfsPropertiesUtilsTest.java  |   2 +-
 .../storage/S3ConnectorPropertiesUtilsTest.java    |   2 +-
 .../trees/expressions/VarBinaryLiteralTest.java    |   2 +-
 .../apache/doris/planner/HiveTableSinkTest.java    |   2 +-
 fe/fe-foundation/DESIGN.md                         | 178 +++++++++++++++++++++
 fe/fe-foundation/pom.xml                           |  78 +++++++++
 .../doris/foundation/format}/FormatOptions.java    |   2 +-
 .../property/ConnectorPropertiesUtils.java         |  24 +--
 .../foundation}/property/ConnectorProperty.java    |   2 +-
 .../doris/foundation}/property/ParamRules.java     |   2 +-
 .../property}/StoragePropertiesException.java      |   2 +-
 .../apache/doris/foundation/type}/ResultOr.java    |   2 +-
 .../org/apache/doris/foundation}/util/BitUtil.java |   2 +-
 .../doris/foundation}/util/ByteBufferUtil.java     |   2 +-
 .../apache/doris/foundation}/util/PathUtils.java   |   2 +-
 .../doris/foundation}/util/SerializationUtils.java |   2 +-
 fe/pom.xml                                         |   6 +
 92 files changed, 483 insertions(+), 107 deletions(-)

diff --git a/fe/fe-common/pom.xml b/fe/fe-common/pom.xml
index b49e2d72895..9151f93a3cc 100644
--- a/fe/fe-common/pom.xml
+++ b/fe/fe-common/pom.xml
@@ -42,6 +42,10 @@ under the License.
         </profile>
     </profiles>
     <dependencies>
+        <dependency>
+            <groupId>org.apache.doris</groupId>
+            <artifactId>fe-foundation</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
diff --git a/fe/fe-core/pom.xml b/fe/fe-core/pom.xml
index ea867eb4438..d9395d98956 100644
--- a/fe/fe-core/pom.xml
+++ b/fe/fe-core/pom.xml
@@ -82,6 +82,10 @@ under the License.
         </profile>
     </profiles>
     <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>fe-foundation</artifactId>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>fe-common</artifactId>
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ArrayLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ArrayLiteral.java
index a2d6464face..fc7685f1ec4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ArrayLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ArrayLiteral.java
@@ -22,7 +22,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/BoolLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/BoolLiteral.java
index 17acc2b7c47..7332e1fde09 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/BoolLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/BoolLiteral.java
@@ -25,7 +25,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TBoolLiteral;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/BrokerDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/BrokerDesc.java
index 2833cf977d3..1d2e231674e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/BrokerDesc.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/BrokerDesc.java
@@ -24,7 +24,7 @@ import org.apache.doris.common.io.Writable;
 import org.apache.doris.common.util.PrintableMap;
 import org.apache.doris.datasource.property.storage.BrokerProperties;
 import org.apache.doris.datasource.property.storage.StorageProperties;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 import org.apache.doris.persist.gson.GsonUtils;
 import org.apache.doris.thrift.TFileType;
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
index 037c9452270..75b20cc45e1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
@@ -23,7 +23,7 @@ package org.apache.doris.analysis;
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.thrift.TExpr;
 import org.apache.doris.thrift.TExprNode;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java
index 6fef2d05844..6a01c637bbc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java
@@ -26,8 +26,8 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
 import org.apache.doris.common.InvalidFormatException;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.nereids.util.DateUtils;
 import org.apache.doris.thrift.TDateLiteral;
 import org.apache.doris.thrift.TExprNode;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java
index 90656236695..3d18f0ac013 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java
@@ -24,7 +24,7 @@ import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Config;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.qe.SessionVariable;
 import org.apache.doris.thrift.TDecimalLiteral;
 import org.apache.doris.thrift.TExprNode;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
index 286c512ad64..253d45fa743 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
@@ -30,9 +30,9 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
 import org.apache.doris.common.TreeNode;
 import org.apache.doris.common.io.Text;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.nereids.util.Utils;
 import org.apache.doris.persist.gson.GsonUtils;
 import org.apache.doris.planner.normalize.Normalizer;
@@ -1257,4 +1257,3 @@ public abstract class Expr extends TreeNode<Expr> implements Cloneable, ExprStat
         return slots;
     }
 }
-
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FloatLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/FloatLiteral.java
index 0c161b3fb95..41d03a06bfa 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FloatLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FloatLiteral.java
@@ -22,7 +22,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.nereids.trees.expressions.literal.format.FractionalFormat;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/IPv4Literal.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/IPv4Literal.java
index 8f3e9dd0f6c..986a7817bef 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/IPv4Literal.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/IPv4Literal.java
@@ -21,7 +21,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
 import org.apache.doris.thrift.TIPv4Literal;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/IPv6Literal.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/IPv6Literal.java
index 2bc593e517b..7c3d504d8dd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/IPv6Literal.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/IPv6Literal.java
@@ -21,7 +21,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
 import org.apache.doris.thrift.TIPv6Literal;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/JsonLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/JsonLiteral.java
index e617697d34f..4c2235997e7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/JsonLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/JsonLiteral.java
@@ -21,7 +21,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
 import org.apache.doris.thrift.TJsonLiteral;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/LiteralExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/LiteralExpr.java
index 9fbdbfa88a1..8091ffd2803 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/LiteralExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/LiteralExpr.java
@@ -24,7 +24,7 @@ import org.apache.doris.catalog.MysqlColType;
 import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.mysql.MysqlProto;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/MapLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/MapLiteral.java
index 6e5a7e1c2b5..6156072ddb1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/MapLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/MapLiteral.java
@@ -22,7 +22,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
 import org.apache.doris.thrift.TTypeDesc;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/MaxLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/MaxLiteral.java
index f890b752bc7..91f4a767e1e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/MaxLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/MaxLiteral.java
@@ -19,7 +19,7 @@ package org.apache.doris.analysis;
 
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 
 public final class MaxLiteral extends LiteralExpr {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/NullLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/NullLiteral.java
index ff6a6135037..2792b8ebb6a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/NullLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/NullLiteral.java
@@ -26,7 +26,7 @@ import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.FeConstants;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/PlaceHolderExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/PlaceHolderExpr.java
index f4a261816bb..5fa4cce92e3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/PlaceHolderExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/PlaceHolderExpr.java
@@ -23,7 +23,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 
 import com.google.common.base.Preconditions;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/StringLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/StringLiteral.java
index 786e7eef0bb..89944012098 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/StringLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/StringLiteral.java
@@ -23,7 +23,7 @@ package org.apache.doris.analysis;
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
 import org.apache.doris.thrift.TStringLiteral;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/StructLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/StructLiteral.java
index b743d1396d3..22f3f048504 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/StructLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/StructLiteral.java
@@ -23,7 +23,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
 import org.apache.doris.thrift.TTypeDesc;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/VarBinaryLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/VarBinaryLiteral.java
index 38b831469b2..8cc93cdd416 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/VarBinaryLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/VarBinaryLiteral.java
@@ -21,7 +21,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
 import org.apache.doris.thrift.TVarBinaryLiteral;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/LocationPath.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/LocationPath.java
index 1ce6576635d..c7558938711 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/LocationPath.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/LocationPath.java
@@ -20,7 +20,7 @@ package org.apache.doris.common.util;
 import org.apache.doris.common.UserException;
 import org.apache.doris.datasource.property.storage.AzurePropertyUtils;
 import org.apache.doris.datasource.property.storage.StorageProperties;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 import org.apache.doris.fs.FileSystemType;
 import org.apache.doris.fs.SchemaTypeMapper;
 import org.apache.doris.thrift.TFileType;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/PrintableMap.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/PrintableMap.java
index 0f7d67c3454..33f87769296 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/PrintableMap.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/PrintableMap.java
@@ -18,7 +18,6 @@
 package org.apache.doris.common.util;
 
 import org.apache.doris.common.maxcompute.MCProperties;
-import org.apache.doris.datasource.property.ConnectorPropertiesUtils;
 import org.apache.doris.datasource.property.metastore.AWSGlueMetaStoreBaseProperties;
 import org.apache.doris.datasource.property.metastore.AliyunDLFBaseProperties;
 import org.apache.doris.datasource.property.storage.AzureProperties;
@@ -29,6 +28,7 @@ import org.apache.doris.datasource.property.storage.OBSProperties;
 import org.apache.doris.datasource.property.storage.OSSHdfsProperties;
 import org.apache.doris.datasource.property.storage.OSSProperties;
 import org.apache.doris.datasource.property.storage.S3Properties;
+import org.apache.doris.foundation.property.ConnectorPropertiesUtils;
 
 import com.google.common.collect.Sets;
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
index 3e1bf3b2133..537f181b62e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
@@ -109,7 +109,6 @@ import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.MarkedCountDownLatch;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.Pair;
-import org.apache.doris.common.ResultOr;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.io.CountingDataOutputStream;
 import org.apache.doris.common.lock.MonitoredReentrantLock;
@@ -124,6 +123,7 @@ import org.apache.doris.common.util.Util;
 import org.apache.doris.datasource.es.EsRepository;
 import org.apache.doris.event.DropPartitionEvent;
 import org.apache.doris.info.PartitionNamesInfo;
+import org.apache.doris.foundation.type.ResultOr;
 import org.apache.doris.mtmv.BaseTableInfo;
 import org.apache.doris.mtmv.MTMVUtil;
 import org.apache.doris.mysql.privilege.PrivPredicate;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSTransaction.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSTransaction.java
index f7ff09dcdc0..0a7fe103427 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSTransaction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSTransaction.java
@@ -25,9 +25,9 @@ import org.apache.doris.backup.Status;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.profile.SummaryProfile;
-import org.apache.doris.common.util.PathUtils;
 import org.apache.doris.datasource.NameMapping;
 import org.apache.doris.datasource.statistics.CommonStatistics;
+import org.apache.doris.foundation.util.PathUtils;
 import org.apache.doris.fs.FileSystem;
 import org.apache.doris.fs.FileSystemProvider;
 import org.apache.doris.fs.FileSystemUtil;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/ConnectionProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/ConnectionProperties.java
index 1247eabcc2a..916076c5123 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/ConnectionProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/ConnectionProperties.java
@@ -18,7 +18,9 @@
 package org.apache.doris.datasource.property;
 
 import org.apache.doris.common.CatalogConfigFileUtils;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.ConnectorPropertiesUtils;
+import org.apache.doris.foundation.property.ConnectorProperty;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AWSGlueMetaStoreBaseProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AWSGlueMetaStoreBaseProperties.java
index b17504fbca7..e24405d7826 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AWSGlueMetaStoreBaseProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AWSGlueMetaStoreBaseProperties.java
@@ -17,9 +17,9 @@
 
 package org.apache.doris.datasource.property.metastore;
 
-import org.apache.doris.datasource.property.ConnectorPropertiesUtils;
-import org.apache.doris.datasource.property.ConnectorProperty;
-import org.apache.doris.datasource.property.ParamRules;
+import org.apache.doris.foundation.property.ConnectorPropertiesUtils;
+import org.apache.doris.foundation.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ParamRules;
 
 import com.google.common.base.Strings;
 import lombok.Getter;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AbstractIcebergProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AbstractIcebergProperties.java
index ee73f9f6074..9b23e61eb4d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AbstractIcebergProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AbstractIcebergProperties.java
@@ -20,10 +20,10 @@ package org.apache.doris.datasource.property.metastore;
 import org.apache.doris.common.security.authentication.ExecutionAuthenticator;
 import org.apache.doris.datasource.iceberg.IcebergExternalCatalog;
 import org.apache.doris.datasource.metacache.CacheSpec;
-import org.apache.doris.datasource.property.ConnectorProperty;
 import org.apache.doris.datasource.property.storage.AbstractS3CompatibleProperties;
 import org.apache.doris.datasource.property.storage.S3Properties;
 import org.apache.doris.datasource.property.storage.StorageProperties;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AbstractPaimonProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AbstractPaimonProperties.java
index 7d0fca2446c..9c9631a516f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AbstractPaimonProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AbstractPaimonProperties.java
@@ -18,8 +18,8 @@
 package org.apache.doris.datasource.property.metastore;
 
 import org.apache.doris.common.security.authentication.ExecutionAuthenticator;
-import org.apache.doris.datasource.property.ConnectorProperty;
 import org.apache.doris.datasource.property.storage.StorageProperties;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.collect.ImmutableList;
 import lombok.Getter;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AliyunDLFBaseProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AliyunDLFBaseProperties.java
index 8b3d6735fa7..a0066b28dcb 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AliyunDLFBaseProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AliyunDLFBaseProperties.java
@@ -17,10 +17,10 @@
 
 package org.apache.doris.datasource.property.metastore;
 
-import org.apache.doris.datasource.property.ConnectorPropertiesUtils;
-import org.apache.doris.datasource.property.ConnectorProperty;
-import org.apache.doris.datasource.property.ParamRules;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.ConnectorPropertiesUtils;
+import org.apache.doris.foundation.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ParamRules;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import com.aliyun.datalake.metastore.common.DataLakeConfig;
 import org.apache.commons.lang3.BooleanUtils;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HMSBaseProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HMSBaseProperties.java
index 54019cffe31..75e5ef34a00 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HMSBaseProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HMSBaseProperties.java
@@ -22,9 +22,9 @@ import org.apache.doris.common.Config;
 import org.apache.doris.common.security.authentication.AuthenticationConfig;
 import org.apache.doris.common.security.authentication.HadoopAuthenticator;
 import org.apache.doris.common.security.authentication.KerberosAuthenticationConfig;
-import org.apache.doris.datasource.property.ConnectorPropertiesUtils;
-import org.apache.doris.datasource.property.ConnectorProperty;
-import org.apache.doris.datasource.property.ParamRules;
+import org.apache.doris.foundation.property.ConnectorPropertiesUtils;
+import org.apache.doris.foundation.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ParamRules;
 
 import com.google.common.base.Strings;
 import lombok.Getter;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HiveGlueMetaStoreProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HiveGlueMetaStoreProperties.java
index 06cd55b431b..ea0f5437d6c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HiveGlueMetaStoreProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HiveGlueMetaStoreProperties.java
@@ -17,8 +17,8 @@
 
 package org.apache.doris.datasource.property.metastore;
 
-import org.apache.doris.datasource.property.ConnectorProperty;
 import org.apache.doris.datasource.property.common.AwsCredentialsProviderMode;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.amazonaws.ClientConfiguration;
 import com.amazonaws.glue.catalog.util.AWSGlueConfig;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HiveHMSProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HiveHMSProperties.java
index 636759e33f6..5a22cfd7c95 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HiveHMSProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HiveHMSProperties.java
@@ -19,7 +19,7 @@ package org.apache.doris.datasource.property.metastore;
 
 import org.apache.doris.common.Config;
 import org.apache.doris.common.security.authentication.HadoopExecutionAuthenticator;
-import org.apache.doris.datasource.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergHMSMetaStoreProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergHMSMetaStoreProperties.java
index 7484a529490..94c4d19f9eb 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergHMSMetaStoreProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergHMSMetaStoreProperties.java
@@ -19,8 +19,8 @@ package org.apache.doris.datasource.property.metastore;
 
 import org.apache.doris.common.security.authentication.HadoopExecutionAuthenticator;
 import org.apache.doris.datasource.iceberg.IcebergExternalCatalog;
-import org.apache.doris.datasource.property.ConnectorProperty;
 import org.apache.doris.datasource.property.storage.StorageProperties;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import lombok.Getter;
 import org.apache.commons.lang3.exception.ExceptionUtils;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergJdbcMetaStoreProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergJdbcMetaStoreProperties.java
index ecd74ee5fe1..ea2cb0c5836 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergJdbcMetaStoreProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergJdbcMetaStoreProperties.java
@@ -19,8 +19,8 @@ package org.apache.doris.datasource.property.metastore;
 
 import org.apache.doris.catalog.JdbcResource;
 import org.apache.doris.datasource.iceberg.IcebergExternalCatalog;
-import org.apache.doris.datasource.property.ConnectorProperty;
 import org.apache.doris.datasource.property.storage.StorageProperties;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergRestProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergRestProperties.java
index 7100d269262..887e6d49c5e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergRestProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/IcebergRestProperties.java
@@ -18,9 +18,9 @@
 package org.apache.doris.datasource.property.metastore;
 
 import org.apache.doris.datasource.iceberg.IcebergExternalCatalog;
-import org.apache.doris.datasource.property.ConnectorProperty;
-import org.apache.doris.datasource.property.ParamRules;
 import org.apache.doris.datasource.property.storage.StorageProperties;
+import org.apache.doris.foundation.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ParamRules;
 
 import lombok.Getter;
 import org.apache.hadoop.conf.Configuration;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/PaimonHMSMetaStoreProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/PaimonHMSMetaStoreProperties.java
index 24342fce457..e7e6689d3e3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/PaimonHMSMetaStoreProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/PaimonHMSMetaStoreProperties.java
@@ -19,8 +19,8 @@ package org.apache.doris.datasource.property.metastore;
 
 import org.apache.doris.common.security.authentication.HadoopExecutionAuthenticator;
 import org.apache.doris.datasource.paimon.PaimonExternalCatalog;
-import org.apache.doris.datasource.property.ConnectorProperty;
 import org.apache.doris.datasource.property.storage.StorageProperties;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.hadoop.conf.Configuration;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/PaimonRestMetaStoreProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/PaimonRestMetaStoreProperties.java
index 85651a2dc83..465fc873b7c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/PaimonRestMetaStoreProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/PaimonRestMetaStoreProperties.java
@@ -18,9 +18,9 @@
 package org.apache.doris.datasource.property.metastore;
 
 import org.apache.doris.datasource.paimon.PaimonExternalCatalog;
-import org.apache.doris.datasource.property.ConnectorProperty;
-import org.apache.doris.datasource.property.ParamRules;
 import org.apache.doris.datasource.property.storage.StorageProperties;
+import org.apache.doris.foundation.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ParamRules;
 
 import lombok.Getter;
 import org.apache.paimon.catalog.Catalog;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AbstractS3CompatibleProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AbstractS3CompatibleProperties.java
index 7d7e5ffb1b6..113b9e78371 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AbstractS3CompatibleProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AbstractS3CompatibleProperties.java
@@ -18,9 +18,9 @@
 package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.ConnectorPropertiesUtils;
-import org.apache.doris.datasource.property.ConnectorProperty;
 import org.apache.doris.datasource.property.common.AwsCredentialsProviderMode;
+import org.apache.doris.foundation.property.ConnectorPropertiesUtils;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AzureProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AzureProperties.java
index a8d6280d377..6b0c32fcda3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AzureProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AzureProperties.java
@@ -19,9 +19,9 @@ package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.Config;
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.ConnectorProperty;
-import org.apache.doris.datasource.property.ParamRules;
 import org.apache.doris.datasource.property.storage.exception.AzureAuthType;
+import org.apache.doris.foundation.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ParamRules;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AzurePropertyUtils.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AzurePropertyUtils.java
index e2d04057f65..44ed707ec63 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AzurePropertyUtils.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/AzurePropertyUtils.java
@@ -19,7 +19,7 @@ package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.Config;
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import org.apache.commons.lang3.StringUtils;
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/BrokerProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/BrokerProperties.java
index 2987eb762ae..a1c9b2e4d36 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/BrokerProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/BrokerProperties.java
@@ -18,7 +18,7 @@
 package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/COSProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/COSProperties.java
index 80c94fa3efd..e9f66572c96 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/COSProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/COSProperties.java
@@ -17,7 +17,7 @@
 
 package org.apache.doris.datasource.property.storage;
 
-import org.apache.doris.datasource.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/GCSProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/GCSProperties.java
index c8c878b4ce4..483ce490756 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/GCSProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/GCSProperties.java
@@ -17,7 +17,7 @@
 
 package org.apache.doris.datasource.property.storage;
 
-import org.apache.doris.datasource.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.collect.ImmutableSet;
 import lombok.Getter;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/HdfsProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/HdfsProperties.java
index f2077b45ad7..91249ad98d6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/HdfsProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/HdfsProperties.java
@@ -19,7 +19,7 @@ package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.security.authentication.HadoopAuthenticator;
-import org.apache.doris.datasource.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/HdfsPropertiesUtils.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/HdfsPropertiesUtils.java
index 8f2e92d1e64..3a503217b28 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/HdfsPropertiesUtils.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/HdfsPropertiesUtils.java
@@ -18,7 +18,7 @@
 package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import com.google.common.base.Strings;
 import org.apache.commons.lang3.StringUtils;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/MinioProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/MinioProperties.java
index cec9ca23e2d..c2c6a31ba57 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/MinioProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/MinioProperties.java
@@ -17,7 +17,7 @@
 
 package org.apache.doris.datasource.property.storage;
 
-import org.apache.doris.datasource.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.collect.ImmutableSet;
 import lombok.Getter;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OBSProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OBSProperties.java
index 5d993baddaf..0f4f2d6d3f6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OBSProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OBSProperties.java
@@ -17,7 +17,7 @@
 
 package org.apache.doris.datasource.property.storage;
 
-import org.apache.doris.datasource.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSHdfsProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSHdfsProperties.java
index d8860c111be..6ea01815e73 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSHdfsProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSHdfsProperties.java
@@ -18,7 +18,7 @@
 package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.collect.ImmutableSet;
 import lombok.Setter;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSProperties.java
index b38bc639076..9a5c11ce0f5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSProperties.java
@@ -18,8 +18,8 @@
 package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.ConnectorPropertiesUtils;
-import org.apache.doris.datasource.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ConnectorPropertiesUtils;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableSet;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OzoneProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OzoneProperties.java
index 24d1079b998..dbcdab93be0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OzoneProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OzoneProperties.java
@@ -17,7 +17,7 @@
 
 package org.apache.doris.datasource.property.storage;
 
-import org.apache.doris.datasource.property.ConnectorProperty;
+import org.apache.doris.foundation.property.ConnectorProperty;
 
 import com.google.common.collect.ImmutableSet;
 import lombok.Getter;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
index 6bfb4f462ff..9b2aa2a8c11 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
@@ -22,10 +22,10 @@ import org.apache.doris.cloud.proto.Cloud.CredProviderTypePB;
 import org.apache.doris.cloud.proto.Cloud.ObjectStoreInfoPB.Provider;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
-import org.apache.doris.datasource.property.ConnectorPropertiesUtils;
-import org.apache.doris.datasource.property.ConnectorProperty;
 import org.apache.doris.datasource.property.common.AwsCredentialsProviderFactory;
 import org.apache.doris.datasource.property.common.AwsCredentialsProviderMode;
+import org.apache.doris.foundation.property.ConnectorPropertiesUtils;
+import org.apache.doris.foundation.property.ConnectorProperty;
 import org.apache.doris.thrift.TCredProviderType;
 import org.apache.doris.thrift.TS3StorageParam;
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3PropertyUtils.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3PropertyUtils.java
index 4e64f13a635..887a9b25c54 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3PropertyUtils.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3PropertyUtils.java
@@ -19,7 +19,7 @@ package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.util.S3URI;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.LogManager;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/StorageProperties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/StorageProperties.java
index 687451ee1ba..724543353f2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/StorageProperties.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/StorageProperties.java
@@ -19,8 +19,8 @@ package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
 import org.apache.doris.datasource.property.ConnectionProperties;
-import org.apache.doris.datasource.property.ConnectorProperty;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.ConnectorProperty;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import lombok.Getter;
 import org.apache.commons.lang3.BooleanUtils;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
index 6747f0a6bea..69af5dac8d9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
@@ -25,7 +25,6 @@ import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.FeConstants;
-import org.apache.doris.common.FormatOptions;
 import org.apache.doris.common.NereidsException;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.UserException;
@@ -33,6 +32,7 @@ import org.apache.doris.common.profile.SummaryProfile;
 import org.apache.doris.common.util.DebugUtil;
 import org.apache.doris.common.util.TimeUtils;
 import org.apache.doris.common.util.Util;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.mysql.FieldInfo;
 import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.glue.LogicalPlanAdapter;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java
index 233c39ac995..d57f975384e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java
@@ -27,13 +27,13 @@ import org.apache.doris.catalog.MaterializedIndexMeta;
 import org.apache.doris.catalog.Partition;
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.View;
-import org.apache.doris.common.FormatOptions;
 import org.apache.doris.common.Id;
 import org.apache.doris.common.IdGenerator;
 import org.apache.doris.common.Pair;
 import org.apache.doris.datasource.mvcc.MvccSnapshot;
 import org.apache.doris.datasource.mvcc.MvccTable;
 import org.apache.doris.datasource.mvcc.MvccTableInfo;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.mtmv.BaseTableInfo;
 import org.apache.doris.nereids.analyzer.UnboundRelation;
 import org.apache.doris.nereids.exceptions.AnalysisException;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
index ae3b725752b..02989a3099c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
@@ -23,7 +23,7 @@ import org.apache.doris.analysis.LiteralExpr;
 import org.apache.doris.catalog.MysqlColType;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.Config;
-import org.apache.doris.common.util.ByteBufferUtil;
+import org.apache.doris.foundation.util.ByteBufferUtil;
 import org.apache.doris.mysql.MysqlProto;
 import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.exceptions.CastException;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertUtils.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertUtils.java
index 68075a86c2f..6302b6aaed1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertUtils.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertUtils.java
@@ -26,10 +26,10 @@ import org.apache.doris.catalog.OlapTable;
 import org.apache.doris.catalog.Table;
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.common.Config;
-import org.apache.doris.common.FormatOptions;
 import org.apache.doris.common.util.DebugPointUtil;
 import org.apache.doris.datasource.hive.HMSExternalTable;
 import org.apache.doris.datasource.jdbc.JdbcExternalTable;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.nereids.CascadesContext;
 import org.apache.doris.nereids.analyzer.Scope;
 import org.apache.doris.nereids.analyzer.UnboundAlias;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/GroupCommitPlanner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/GroupCommitPlanner.java
index 4b70189c811..1a987405671 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/GroupCommitPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/GroupCommitPlanner.java
@@ -28,11 +28,11 @@ import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
-import org.apache.doris.common.FormatOptions;
 import org.apache.doris.common.LoadException;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.util.DebugUtil;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.nereids.StatementContext;
 import org.apache.doris.nereids.load.NereidsStreamLoadPlanner;
 import org.apache.doris.nereids.load.NereidsStreamLoadTask;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilterGenerator.java b/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilterGenerator.java
index c934635738e..d79a2a13111 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilterGenerator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilterGenerator.java
@@ -17,7 +17,7 @@
 
 package org.apache.doris.planner;
 
-import org.apache.doris.common.util.BitUtil;
+import org.apache.doris.foundation.util.BitUtil;
 import org.apache.doris.qe.SessionVariable;
 
 /**
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index b39d5b0d62b..f2ab5fbc2c2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -44,7 +44,6 @@ import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.FeConstants;
-import org.apache.doris.common.FormatOptions;
 import org.apache.doris.common.NereidsException;
 import org.apache.doris.common.QueryTimeoutException;
 import org.apache.doris.common.Status;
@@ -63,6 +62,7 @@ import org.apache.doris.common.util.TimeUtils;
 import org.apache.doris.common.util.Util;
 import org.apache.doris.datasource.FileScanNode;
 import org.apache.doris.datasource.tvf.source.TVFScanNode;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.metric.MetricRepo;
 import org.apache.doris.mysql.FieldInfo;
 import org.apache.doris.mysql.MysqlChannel;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java b/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
index c6f986875eb..25d9e59688a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
@@ -32,7 +32,7 @@ import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.PatternMatcher;
 import org.apache.doris.common.VariableAnnotation;
-import org.apache.doris.common.util.SerializationUtils;
+import org.apache.doris.foundation.util.SerializationUtils;
 import org.apache.doris.nereids.trees.expressions.literal.Literal;
 import org.apache.doris.persist.GlobalVarPersistInfo;
 import org.apache.doris.statistics.StatisticConstants;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/VarBinaryLiteralAnalysisTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/VarBinaryLiteralAnalysisTest.java
new file mode 100644
index 00000000000..c42a652e23b
--- /dev/null
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/VarBinaryLiteralAnalysisTest.java
@@ -0,0 +1,93 @@
+// 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.doris.analysis;
+
+import org.apache.doris.foundation.format.FormatOptions;
+import org.apache.doris.thrift.TExprNode;
+import org.apache.doris.thrift.TExprNodeType;
+import org.apache.doris.thrift.TVarBinaryLiteral;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+
+public class VarBinaryLiteralAnalysisTest {
+
+    private static byte[] bytes(String s) {
+        return s.getBytes(StandardCharsets.UTF_8);
+    }
+
+    @Test
+    public void testToSqlFormat() throws Exception {
+        VarBinaryLiteral lit = new VarBinaryLiteral(bytes("hello"));
+        Assertions.assertEquals("X'68656C6C6F'", lit.accept(ExprToSqlVisitor.INSTANCE, ToSqlParams.WITH_TABLE));
+    }
+
+    @Test
+    public void testGetStringValueAndNestedWrapper() throws Exception {
+        VarBinaryLiteral lit = new VarBinaryLiteral(bytes("abc"));
+        Assertions.assertEquals("abc", lit.getStringValue());
+
+        FormatOptions opts = FormatOptions.getDefault();
+        Assertions.assertEquals("\"abc\"", lit.getStringValueInComplexTypeForQuery(opts));
+        FormatOptions hive = FormatOptions.getForHive();
+        Assertions.assertEquals("\"abc\"", lit.getStringValueInComplexTypeForQuery(hive));
+    }
+
+    @Test
+    public void testToThrift() throws Exception {
+        VarBinaryLiteral lit = new VarBinaryLiteral(new byte[] { 'a', 0x00, 'b' });
+        TExprNode node = new TExprNode();
+        lit.accept(ExprToThriftVisitor.INSTANCE, node);
+        Assertions.assertEquals(TExprNodeType.VARBINARY_LITERAL, node.node_type);
+        TVarBinaryLiteral v = node.getVarbinaryLiteral();
+        Assertions.assertNotNull(v);
+        ByteBuffer bb = v.bufferForValue();
+        byte[] got = new byte[bb.remaining()];
+        bb.get(got);
+        Assertions.assertArrayEquals(new byte[] { 'a', 0x00, 'b' }, got);
+    }
+
+    @Test
+    public void testCompareLiteralRules() throws Exception {
+        VarBinaryLiteral ab = new VarBinaryLiteral(bytes("ab"));
+        VarBinaryLiteral ab0 = new VarBinaryLiteral(new byte[] { 'a', 'b', 0x00 });
+        VarBinaryLiteral ac = new VarBinaryLiteral(bytes("ac"));
+
+        Assertions.assertEquals(0, ab.compareLiteral(ab));
+        Assertions.assertEquals(0, ab.compareLiteral(ab0)); // trailing zero equals
+        Assertions.assertTrue(ab.compareLiteral(ac) < 0);
+        Assertions.assertTrue(ac.compareLiteral(ab) > 0);
+
+        // null literal ordering
+        Assertions.assertTrue(ab.compareLiteral(new NullLiteral()) > 0);
+    }
+
+    @Test
+    public void testClone() throws Exception {
+        VarBinaryLiteral a = new VarBinaryLiteral(bytes("xy"));
+        VarBinaryLiteral b = (VarBinaryLiteral) a.clone();
+        Assertions.assertNotSame(a, b);
+        Assertions.assertEquals(a.getStringValue(), b.getStringValue());
+        TExprNode node = new TExprNode();
+        b.accept(ExprToThriftVisitor.INSTANCE, node);
+        Assertions.assertEquals(TExprNodeType.VARBINARY_LITERAL, node.node_type);
+    }
+}
diff --git a/fe/fe-core/src/test/java/org/apache/doris/common/util/LocationPathTest.java b/fe/fe-core/src/test/java/org/apache/doris/common/util/LocationPathTest.java
index 9e7351aa3e4..1e5d404a7f6 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/common/util/LocationPathTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/common/util/LocationPathTest.java
@@ -19,7 +19,7 @@ package org.apache.doris.common.util;
 
 import org.apache.doris.common.UserException;
 import org.apache.doris.datasource.property.storage.StorageProperties;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 import org.apache.doris.fs.FileSystemType;
 import org.apache.doris.thrift.TFileType;
 
diff --git a/fe/fe-core/src/test/java/org/apache/doris/common/util/PathUtilsTest.java b/fe/fe-core/src/test/java/org/apache/doris/common/util/PathUtilsTest.java
index 86a007e9b4c..a2e42172de1 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/common/util/PathUtilsTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/common/util/PathUtilsTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.common.util;
 
+import org.apache.doris.foundation.util.PathUtils;
+
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
diff --git a/fe/fe-core/src/test/java/org/apache/doris/common/util/SerializationUtilsTest.java b/fe/fe-core/src/test/java/org/apache/doris/common/util/SerializationUtilsTest.java
index 345fa4c5060..296fb928e1a 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/common/util/SerializationUtilsTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/common/util/SerializationUtilsTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.common.util;
 
+import org.apache.doris.foundation.util.SerializationUtils;
+
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/iceberg/IcebergTransactionTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/iceberg/IcebergTransactionTest.java
index e46d6d3a3fb..f3dd3166afb 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/iceberg/IcebergTransactionTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/iceberg/IcebergTransactionTest.java
@@ -19,10 +19,10 @@ package org.apache.doris.datasource.iceberg;
 
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.security.authentication.ExecutionAuthenticator;
-import org.apache.doris.common.util.SerializationUtils;
 import org.apache.doris.datasource.ExternalTable;
 import org.apache.doris.datasource.NameMapping;
 import org.apache.doris.datasource.iceberg.helper.IcebergWriterHelper;
+import org.apache.doris.foundation.util.SerializationUtils;
 import org.apache.doris.nereids.trees.plans.commands.insert.IcebergInsertCommandContext;
 import org.apache.doris.thrift.TFileContent;
 import org.apache.doris.thrift.TIcebergCommitData;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/ConnectorPropertiesUtilsTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/ConnectorPropertiesUtilsTest.java
index 3490a5c6ae0..cdd22c72fe5 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/ConnectorPropertiesUtilsTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/ConnectorPropertiesUtilsTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.datasource.property;
 
+import org.apache.doris.foundation.property.ConnectorPropertiesUtils;
+import org.apache.doris.foundation.property.ConnectorProperty;
 import org.apache.doris.nereids.types.UnsupportedType;
 
 import  org.junit.jupiter.api.Assertions;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/ParamRulesTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/ParamRulesTest.java
index 24fb075d15e..71cc4f21ab7 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/ParamRulesTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/ParamRulesTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.datasource.property;
 
+import org.apache.doris.foundation.property.ParamRules;
+
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.function.Executable;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/metastore/AliyunDLFBasePropertiesTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/metastore/AliyunDLFBasePropertiesTest.java
index ba28c4caab3..42862ef0c75 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/metastore/AliyunDLFBasePropertiesTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/metastore/AliyunDLFBasePropertiesTest.java
@@ -17,8 +17,8 @@
 
 package org.apache.doris.datasource.property.metastore;
 
-import org.apache.doris.datasource.property.ConnectorPropertiesUtils;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.ConnectorPropertiesUtils;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/metastore/IcebergAliyunDLFMetaStorePropertiesTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/metastore/IcebergAliyunDLFMetaStorePropertiesTest.java
index 5c773967220..45deebe4b4a 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/metastore/IcebergAliyunDLFMetaStorePropertiesTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/metastore/IcebergAliyunDLFMetaStorePropertiesTest.java
@@ -19,7 +19,7 @@ package org.apache.doris.datasource.property.metastore;
 
 import org.apache.doris.datasource.iceberg.dlf.DLFCatalog;
 import org.apache.doris.datasource.property.storage.StorageProperties;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import org.apache.iceberg.catalog.Catalog;
 import org.junit.jupiter.api.Assertions;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/AzurePropertiesTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/AzurePropertiesTest.java
index 073d9f361b7..28667c2de98 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/AzurePropertiesTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/AzurePropertiesTest.java
@@ -19,7 +19,7 @@ package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.Config;
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import org.apache.hadoop.conf.Configuration;
 import org.junit.jupiter.api.Assertions;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/AzurePropertyUtilsTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/AzurePropertyUtilsTest.java
index 1965284c3d1..b0848eff0b0 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/AzurePropertyUtilsTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/AzurePropertyUtilsTest.java
@@ -19,7 +19,7 @@ package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.Config;
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/COSPropertiesTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/COSPropertiesTest.java
index ef0d5b46e24..33daf435d15 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/COSPropertiesTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/COSPropertiesTest.java
@@ -18,7 +18,7 @@
 package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import com.google.common.collect.Maps;
 import org.junit.jupiter.api.Assertions;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/HdfsPropertiesTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/HdfsPropertiesTest.java
index 6554829f9f7..f0a4e73231f 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/HdfsPropertiesTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/HdfsPropertiesTest.java
@@ -21,7 +21,7 @@ import org.apache.doris.common.Config;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.security.authentication.HadoopKerberosAuthenticator;
 import org.apache.doris.common.security.authentication.HadoopSimpleAuthenticator;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import com.google.common.collect.Maps;
 import org.apache.hadoop.conf.Configuration;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/HdfsPropertiesUtilsTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/HdfsPropertiesUtilsTest.java
index 8ed1a4776bb..589aebacd57 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/HdfsPropertiesUtilsTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/HdfsPropertiesUtilsTest.java
@@ -18,7 +18,7 @@
 package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import com.google.common.collect.ImmutableSet;
 import org.junit.jupiter.api.Assertions;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/S3ConnectorPropertiesUtilsTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/S3ConnectorPropertiesUtilsTest.java
index a1aba03d5aa..18414f47b36 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/S3ConnectorPropertiesUtilsTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/S3ConnectorPropertiesUtilsTest.java
@@ -18,7 +18,7 @@
 package org.apache.doris.datasource.property.storage;
 
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.property.storage.exception.StoragePropertiesException;
+import org.apache.doris.foundation.property.StoragePropertiesException;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/VarBinaryLiteralTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/VarBinaryLiteralTest.java
index 504c8f11d9d..89a17162545 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/VarBinaryLiteralTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/VarBinaryLiteralTest.java
@@ -19,7 +19,7 @@ package org.apache.doris.nereids.trees.expressions;
 
 import org.apache.doris.analysis.NullLiteral;
 import org.apache.doris.analysis.VarBinaryLiteral;
-import org.apache.doris.common.FormatOptions;
+import org.apache.doris.foundation.format.FormatOptions;
 import org.apache.doris.thrift.TExprNode;
 import org.apache.doris.thrift.TExprNodeType;
 import org.apache.doris.thrift.TVarBinaryLiteral;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/HiveTableSinkTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/HiveTableSinkTest.java
index 8f4adff727c..8ade2d52d2b 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/HiveTableSinkTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/HiveTableSinkTest.java
@@ -21,13 +21,13 @@ import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.security.authentication.ExecutionAuthenticator;
-import org.apache.doris.common.util.PathUtils;
 import org.apache.doris.datasource.hive.HMSCachedClient;
 import org.apache.doris.datasource.hive.HMSExternalCatalog;
 import org.apache.doris.datasource.hive.HMSExternalDatabase;
 import org.apache.doris.datasource.hive.HMSExternalTable;
 import org.apache.doris.datasource.hive.ThriftHMSCachedClient;
 import org.apache.doris.datasource.property.storage.StorageProperties;
+import org.apache.doris.foundation.util.PathUtils;
 import org.apache.doris.qe.ConnectContext;
 
 import mockit.Mock;
diff --git a/fe/fe-foundation/DESIGN.md b/fe/fe-foundation/DESIGN.md
new file mode 100644
index 00000000000..f4a949d8556
--- /dev/null
+++ b/fe/fe-foundation/DESIGN.md
@@ -0,0 +1,178 @@
+# fe-foundation Module Design Document
+
+## 1. Background & Motivation
+
+The existing `fe-common` module has accumulated heavy dependencies over time (Guava, Hadoop, Trino, 
+ANTLR, Alibaba MaxCompute SDK, etc.), making it unsuitable as a lightweight shared library for the 
+plugin/SPI ecosystem. When SPI plugin authors depend on `fe-common`, they are forced to pull in 
+dozens of transitive dependencies that have nothing to do with their plugin logic.
+
+We need a **zero-dependency foundation module** that sits below `fe-common` and `fe-extension-spi` 
+in the dependency hierarchy, providing only the most essential, general-purpose utilities that any 
+module — including SPI plugins — can safely depend on.
+
+## 2. Naming Decision
+
+| Candidate        | Verdict                                                                 |
+|------------------|-------------------------------------------------------------------------|
+| `fe-foundation`  | **Chosen.** Clear "below-common" semantics. No ambiguity with existing modules. |
+| `fe-base`        | Too generic; widely used in other contexts.                             |
+| `fe-essentials`  | Good semantics but verbose.                                             |
+| `fe-primitives`  | Implies primitive types; misleading.                                    |
+| `fe-toolkit`     | Industry convention maps "toolkit" to heavier helper libs (e.g., Trino).|
+| `fe-kernel`      | Conflicts with database "kernel" terminology.                           |
+
+**Industry references:**
+- Trino: `trino-spi` (zero-dep contract) + `lib/trino-plugin-toolkit` (optional helpers)
+- Flink: `flink-annotations` (lightest) → `flink-core-api` → `flink-core`
+- Iceberg: `common/` (pure utilities) → `api/` (interfaces) → `core/` (implementation)
+- SeaTunnel: `seatunnel-common` (utilities) + `seatunnel-api` (SPI)
+
+## 3. Module Positioning
+
+```
+fe-foundation          ← Zero third-party dependencies. Pure JDK utilities.
+    │
+    ├── fe-extension-spi       ← Plugin contracts (Plugin, PluginFactory, PluginContext)
+    │       │
+    │       └── fe-extension-loader    ← Plugin classloading & discovery
+    │
+    ├── fe-common              ← Heavier shared code (Gson, Guava, Hadoop, etc.)
+    │
+    └── fe-core                ← Main FE module (optimizer, catalog, transaction)
+```
+
+**Key principle:** `fe-foundation` has **ZERO** compile-scope third-party dependencies. Only JDK.
+
+## 4. Admission Criteria
+
+A class qualifies for `fe-foundation` if it meets **ALL** of:
+
+1. **Zero third-party runtime dependencies** — only `java.*` imports
+2. **No coupling to Doris business logic** — no references to catalog, optimizer, planner, etc.
+3. **General-purpose** — useful across multiple modules (SPI plugins, fe-common, fe-core, etc.)
+4. **Stable API** — unlikely to change frequently
+
+## 5. Package Structure
+
+```
+org.apache.doris.foundation/
+├── property/
+│   ├── ConnectorProperty.java           # @annotation: marks config fields
+│   ├── ConnectorPropertiesUtils.java    # Reflection-based KV → Bean binder
+│   ├── StoragePropertiesException.java  # Property-related RuntimeException
+│   └── ParamRules.java                  # Fluent parameter validation DSL
+├── type/
+│   └── ResultOr.java                    # Rust-style Result<T, E> type
+├── format/
+│   └── FormatOptions.java               # Immutable data formatting config
+└── util/
+    ├── BitUtil.java                     # Bit manipulation helpers
+    ├── ByteBufferUtil.java              # Unsigned ByteBuffer reads
+    ├── SerializationUtils.java          # Deep clone via Java serialization
+    └── PathUtils.java                   # URI path comparison utilities
+```
+
+## 6. Classes Included (First Iteration)
+
+### 6.1 Property Framework (from fe-core)
+
+| Class | Original Location | External Deps | Description |
+|-------|-------------------|---------------|-------------|
+| `ConnectorProperty` | `o.a.d.datasource.property` | None | Runtime annotation for connector config fields |
+| `ConnectorPropertiesUtils` | `o.a.d.datasource.property` | None (Guava/commons-lang3 removed) | Reflection-based KV→Bean binding |
+| `ParamRules` | `o.a.d.datasource.property` | None | Fluent validation DSL with chained rules |
+| `StoragePropertiesException` | `o.a.d.datasource.property.storage.exception` | None | RuntimeException for property errors |
+
+### 6.2 Type Utilities (from fe-common)
+
+| Class | Original Location | External Deps | Description |
+|-------|-------------------|---------------|-------------|
+| `ResultOr<T,E>` | `o.a.d.common` | None | Success-or-error result type |
+
+### 6.3 Format Utilities (from fe-common)
+
+| Class | Original Location | External Deps | Description |
+|-------|-------------------|---------------|-------------|
+| `FormatOptions` | `o.a.d.common` | None | Immutable formatting configuration |
+
+### 6.4 General Utilities (from fe-core)
+
+| Class | Original Location | External Deps | Description |
+|-------|-------------------|---------------|-------------|
+| `BitUtil` | `o.a.d.common.util` | None | log2, power-of-2 rounding |
+| `ByteBufferUtil` | `o.a.d.common.util` | None | Unsigned byte buffer reads |
+| `SerializationUtils` | `o.a.d.common.util` | None | Deep clone via serialization |
+| `PathUtils` | `o.a.d.common.util` | None | URI path comparison with S3 handling |
+
+## 7. Classes NOT Included (and Why)
+
+| Class | Reason |
+|-------|--------|
+| `Pair`, `Triple` | Depend on `@SerializedName` (Gson) for persistence. Moving would require adding Gson or breaking persistence compatibility. |
+| `Writable`, `Codec`, `CountingDataOutputStream`, `DataInputBuffer`, `DataOutputBuffer`, etc. | Deeply embedded in the persistence layer (194+ importers for Writable). High-risk migration better done in a separate phase. |
+| `CloudCredential` | Depends on `commons-lang3`. Could be migrated after trivial refactoring. |
+| `GZIPUtils`, `EnvUtils` | Depend on `commons-io` / Guava. Could be migrated after trivial refactoring. |
+
+## 8. Serialization Safety Analysis
+
+All 10 classes are **SAFE** to move (package rename):
+
+- **None** implement `java.io.Serializable` (except `StoragePropertiesException` via `Throwable`, 
+  but it is never serialized to disk)
+- **None** are registered in `RuntimeTypeAdapterFactory` (no class name stored in JSON)
+- **None** have `serialVersionUID`
+- All are either annotations, static utility classes, or transient runtime objects
+- No class name is stored in any editlog, metadata image, or checkpoint
+
+## 9. Migration Strategy
+
+### Phase 1 (This PR): Backward-Compatible Migration
+
+1. Create `fe-foundation` module with zero dependencies
+2. Copy classes to new `org.apache.doris.foundation.*` packages
+3. In original locations, replace class bodies with **extends/delegation** to the foundation class:
+   ```java
+   // fe-core: org.apache.doris.datasource.property.ParamRules
+   // Now just re-exports the foundation class
+   package org.apache.doris.datasource.property;
+   public class ParamRules extends org.apache.doris.foundation.property.ParamRules {}
+   ```
+4. No existing code needs to change import statements
+5. New code should prefer importing from `org.apache.doris.foundation.*`
+
+### Phase 2 (Future): Gradually update imports across the codebase
+
+- Update import statements in fe-core to use foundation packages directly
+- Deprecate and eventually remove the re-export shims
+- Migrate more classes from fe-common (IO utilities, Pair/Triple after decoupling Gson)
+
+## 10. Build Configuration
+
+```xml
+<!-- fe-foundation/pom.xml -->
+<artifactId>fe-foundation</artifactId>
+<packaging>jar</packaging>
+<name>Doris FE Foundation</name>
+<description>Zero-dependency foundation utilities for Doris FE modules and SPI plugins</description>
+
+<dependencies>
+    <!-- Intentionally empty. This module has ZERO third-party dependencies. -->
+</dependencies>
+```
+
+## 11. Dependency Graph After Migration
+
+```
+fe-foundation (0 deps)
+    ↑
+    ├── fe-extension-spi (depends on fe-foundation)
+    │       ↑
+    │       └── fe-extension-loader
+    │
+    ├── fe-common (depends on fe-foundation + Guava + Gson + Hadoop + ...)
+    │       ↑
+    │       └── fe-core
+    │
+    └── fe-core (depends on fe-foundation + fe-common + ...)
+```
diff --git a/fe/fe-foundation/pom.xml b/fe/fe-foundation/pom.xml
new file mode 100644
index 00000000000..2890ce4e43c
--- /dev/null
+++ b/fe/fe-foundation/pom.xml
@@ -0,0 +1,78 @@
+<?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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         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.doris</groupId>
+        <version>${revision}</version>
+        <artifactId>fe</artifactId>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>fe-foundation</artifactId>
+    <packaging>jar</packaging>
+    <name>Doris FE Foundation</name>
+    <description>Zero-dependency foundation utilities for Doris FE modules and SPI plugins</description>
+
+    <!-- Intentionally NO dependencies. This module depends only on JDK. -->
+
+    <build>
+        <finalName>doris-fe-foundation</finalName>
+        <directory>${project.basedir}/target/</directory>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>create-source-jar</id>
+                        <goals>
+                            <goal>jar-no-fork</goal>
+                            <goal>test-jar-no-fork</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>prepare-test-jar</id>
+                        <phase>test-compile</phase>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/FormatOptions.java b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/format/FormatOptions.java
similarity index 98%
rename from fe/fe-core/src/main/java/org/apache/doris/common/FormatOptions.java
rename to fe/fe-foundation/src/main/java/org/apache/doris/foundation/format/FormatOptions.java
index 39d939a6a8e..a77f6c02c8c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/FormatOptions.java
+++ b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/format/FormatOptions.java
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.common;
+package org.apache.doris.foundation.format;
 
 /**
  * Format options for formatting literals in FE.
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/ConnectorPropertiesUtils.java b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/ConnectorPropertiesUtils.java
similarity index 91%
rename from fe/fe-core/src/main/java/org/apache/doris/datasource/property/ConnectorPropertiesUtils.java
rename to fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/ConnectorPropertiesUtils.java
index 35b8ce4e754..6be437c7ba4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/ConnectorPropertiesUtils.java
+++ b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/ConnectorPropertiesUtils.java
@@ -15,13 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.datasource.property;
-
-import com.google.common.collect.Sets;
-import org.apache.commons.lang3.StringUtils;
+package org.apache.doris.foundation.property;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -72,7 +70,7 @@ public class ConnectorPropertiesUtils {
 
         for (Field field : supportedProps) {
             String matchedName = getMatchedPropertyName(field, props);
-            if (StringUtils.isNotBlank(matchedName) && StringUtils.isNotBlank(props.get(matchedName))) {
+            if (isNotBlank(matchedName) && isNotBlank(props.get(matchedName))) {
                 try {
                     Object rawValue = props.get(matchedName);
                     Object convertedValue = convertValue(rawValue, field.getType());
@@ -101,7 +99,7 @@ public class ConnectorPropertiesUtils {
             return null;
         }
         for (String name : annotation.names()) {
-            if (StringUtils.isNotBlank(props.get(name))) {
+            if (isNotBlank(props.get(name))) {
                 return name;
             }
         }
@@ -150,11 +148,11 @@ public class ConnectorPropertiesUtils {
     /**
      * Return the sensitive keys of the give properties
      *
-     * @param clazz
-     * @return
+     * @param clazz the class to inspect
+     * @return set of property name aliases marked as sensitive
      */
     public static Set<String> getSensitiveKeys(Class<?> clazz) {
-        Set<String> keys = Sets.newHashSet();
+        Set<String> keys = new HashSet<>();
         List<Field> supportedProps = getConnectorProperties(clazz);
         for (Field field : supportedProps) {
             ConnectorProperty anno = field.getAnnotation(ConnectorProperty.class);
@@ -166,5 +164,11 @@ public class ConnectorPropertiesUtils {
         }
         return keys;
     }
-}
 
+    /**
+     * Checks if a string is not null, not empty, and not whitespace-only.
+     */
+    private static boolean isNotBlank(String s) {
+        return s != null && !s.trim().isEmpty();
+    }
+}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/ConnectorProperty.java b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/ConnectorProperty.java
similarity index 96%
rename from fe/fe-core/src/main/java/org/apache/doris/datasource/property/ConnectorProperty.java
rename to fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/ConnectorProperty.java
index 7078f6c61a3..96d607d7c76 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/ConnectorProperty.java
+++ b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/ConnectorProperty.java
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.datasource.property;
+package org.apache.doris.foundation.property;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/ParamRules.java b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/ParamRules.java
similarity index 99%
rename from fe/fe-core/src/main/java/org/apache/doris/datasource/property/ParamRules.java
rename to fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/ParamRules.java
index bc364897f6b..f8f02b32539 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/ParamRules.java
+++ b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/ParamRules.java
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.datasource.property;
+package org.apache.doris.foundation.property;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/exception/StoragePropertiesException.java b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/StoragePropertiesException.java
similarity index 96%
rename from fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/exception/StoragePropertiesException.java
rename to fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/StoragePropertiesException.java
index 00d8c46411f..f8d12fdba4e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/exception/StoragePropertiesException.java
+++ b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/property/StoragePropertiesException.java
@@ -22,7 +22,7 @@
  * an error message, and another that also accepts a cause exception.
  */
 
-package org.apache.doris.datasource.property.storage.exception;
+package org.apache.doris.foundation.property;
 
 public class StoragePropertiesException extends RuntimeException {
 
diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/ResultOr.java b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/type/ResultOr.java
similarity index 97%
rename from fe/fe-common/src/main/java/org/apache/doris/common/ResultOr.java
rename to fe/fe-foundation/src/main/java/org/apache/doris/foundation/type/ResultOr.java
index 40909e98229..143b765b5ec 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/common/ResultOr.java
+++ b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/type/ResultOr.java
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.common;
+package org.apache.doris.foundation.type;
 
 public class ResultOr<T, E> {
     private final T value;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/BitUtil.java b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/BitUtil.java
similarity index 97%
rename from fe/fe-core/src/main/java/org/apache/doris/common/util/BitUtil.java
rename to fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/BitUtil.java
index 84c4ec111a1..fa83d0fb1b1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/BitUtil.java
+++ b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/BitUtil.java
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.common.util;
+package org.apache.doris.foundation.util;
 
 public class BitUtil {
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/ByteBufferUtil.java b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/ByteBufferUtil.java
similarity index 96%
rename from fe/fe-core/src/main/java/org/apache/doris/common/util/ByteBufferUtil.java
rename to fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/ByteBufferUtil.java
index 4ec8f01149a..9568e6b3a92 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/ByteBufferUtil.java
+++ b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/ByteBufferUtil.java
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.common.util;
+package org.apache.doris.foundation.util;
 
 import java.nio.ByteBuffer;
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/PathUtils.java b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/PathUtils.java
similarity index 98%
rename from fe/fe-core/src/main/java/org/apache/doris/common/util/PathUtils.java
rename to fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/PathUtils.java
index dd4ca93e2ca..954d4c5bddd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/PathUtils.java
+++ b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/PathUtils.java
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.common.util;
+package org.apache.doris.foundation.util;
 
 import java.net.URI;
 import java.net.URISyntaxException;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/SerializationUtils.java b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/SerializationUtils.java
similarity index 98%
rename from fe/fe-core/src/main/java/org/apache/doris/common/util/SerializationUtils.java
rename to fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/SerializationUtils.java
index cc18bcb0a10..131eddd0a97 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/SerializationUtils.java
+++ b/fe/fe-foundation/src/main/java/org/apache/doris/foundation/util/SerializationUtils.java
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.common.util;
+package org.apache.doris.foundation.util;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
diff --git a/fe/pom.xml b/fe/pom.xml
index 84e82a79afe..5a74fe8c1da 100644
--- a/fe/pom.xml
+++ b/fe/pom.xml
@@ -215,6 +215,7 @@ under the License.
         </extensions>
     </build>
     <modules>
+        <module>fe-foundation</module>
         <module>fe-common</module>
         <module>fe-core</module>
         <module>hive-udf</module>
@@ -749,6 +750,11 @@ under the License.
                 <scope>test</scope>
             </dependency>
 
+            <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>fe-foundation</artifactId>
+                <version>${project.version}</version>
+            </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
                 <artifactId>fe-common</artifactId>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org