diff --git a/pom.xml b/pom.xml
index d63fbf73ce..d005ec0f10 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,6 +57,7 @@
         2.0.0-SNAPSHOT
         3.12.4
         1.8
+        1.18.24
         true
         false
         true
@@ -66,9 +67,10 @@
         0.8.8
         UTF-8
         UTF-8
-        3.6.1
+        3.8.1
         3.0.0
         3.0.1
+        3.2.0
         3.0.2
         1.1.0
         1.6
@@ -82,6 +84,11 @@
 
     
         
+            
+                org.projectlombok
+                lombok
+                ${lombok-version}
+            
             
                 cn.hippo4j
                 hippo4j-dependencies
@@ -125,6 +132,7 @@
             
                 org.apache.maven.plugins
                 maven-jar-plugin
+                ${maven.jar.plugin.version}
                 
                     
                         
@@ -136,6 +144,11 @@
                     
                 
             
+            
+                org.apache.maven.plugins
+                maven-resources-plugin
+                ${maven.resources.plugin.version} 
+            
             
                 org.codehaus.mojo
                 flatten-maven-plugin
@@ -209,7 +222,7 @@
             
                 org.apache.maven.plugins
                 maven-source-plugin
-                ${maven-source-plugin.version}
+                ${maven.source.plugin.version}
                 
                     true
                 
diff --git a/threadpool/core/src/test/java/brave/internal/WrappingExecutorService.java b/threadpool/core/src/test/java/brave/internal/WrappingExecutorService.java
new file mode 100644
index 0000000000..7e9ee3e175
--- /dev/null
+++ b/threadpool/core/src/test/java/brave/internal/WrappingExecutorService.java
@@ -0,0 +1,105 @@
+/*
+ * 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 brave.internal;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+public abstract class WrappingExecutorService implements ExecutorService {
+
+    protected WrappingExecutorService() {
+    }
+
+    protected abstract ExecutorService delegate();
+
+    protected abstract  Callable wrap(Callable var1);
+
+    protected abstract Runnable wrap(Runnable var1);
+
+    public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
+        return this.delegate().awaitTermination(timeout, unit);
+    }
+
+    public  List> invokeAll(Collection extends Callable> tasks) throws InterruptedException {
+        return this.delegate().invokeAll(this.wrap(tasks));
+    }
+
+    public  List> invokeAll(Collection extends Callable> tasks, long timeout, TimeUnit unit) throws InterruptedException {
+        return this.delegate().invokeAll(this.wrap(tasks), timeout, unit);
+    }
+
+    public  T invokeAny(Collection extends Callable> tasks) throws InterruptedException, ExecutionException {
+        return this.delegate().invokeAny(this.wrap(tasks));
+    }
+
+    public  T invokeAny(Collection extends Callable> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
+        return this.delegate().invokeAny(this.wrap(tasks), timeout, unit);
+    }
+
+    public boolean isShutdown() {
+        return this.delegate().isShutdown();
+    }
+
+    public boolean isTerminated() {
+        return this.delegate().isTerminated();
+    }
+
+    public void shutdown() {
+        this.delegate().shutdown();
+    }
+
+    public List shutdownNow() {
+        return this.delegate().shutdownNow();
+    }
+
+    public void execute(Runnable task) {
+        this.delegate().execute(this.wrap(task));
+    }
+
+    public  Future submit(Callable task) {
+        return this.delegate().submit(this.wrap(task));
+    }
+
+    public Future> submit(Runnable task) {
+        return this.delegate().submit(this.wrap(task));
+    }
+
+    public  Future submit(Runnable task, T result) {
+        return this.delegate().submit(this.wrap(task), result);
+    }
+
+     Collection extends Callable> wrap(Collection extends Callable> tasks) {
+        ArrayList> result = new ArrayList(tasks.size());
+        Iterator var3 = tasks.iterator();
+
+        while (var3.hasNext()) {
+            Callable task = (Callable) var3.next();
+            result.add(this.wrap(task));
+        }
+
+        return result;
+    }
+}
diff --git a/threadpool/core/src/test/java/cn/hippo4j/core/CustomWrappingExecutorService.java b/threadpool/core/src/test/java/cn/hippo4j/core/CustomWrappingExecutorService.java
new file mode 100644
index 0000000000..ebc6a6226a
--- /dev/null
+++ b/threadpool/core/src/test/java/cn/hippo4j/core/CustomWrappingExecutorService.java
@@ -0,0 +1,50 @@
+/*
+ * 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 cn.hippo4j.core;
+
+import brave.internal.WrappingExecutorService;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+
+public class CustomWrappingExecutorService extends WrappingExecutorService {
+
+    ExecutorService delegate;
+
+    public CustomWrappingExecutorService() {
+    }
+
+    public CustomWrappingExecutorService(ExecutorService delegate) {
+        this.delegate = delegate;
+    }
+
+    @Override
+    public ExecutorService delegate() {
+        return delegate;
+    }
+
+    @Override
+    protected  Callable wrap(Callable callable) {
+        return callable;
+    }
+
+    @Override
+    protected Runnable wrap(Runnable runnable) {
+        return runnable;
+    }
+}
diff --git a/threadpool/core/src/test/java/cn/hippo4j/core/adapter/ZipkinExecutorAdapterTest.java b/threadpool/core/src/test/java/cn/hippo4j/core/adapter/ZipkinExecutorAdapterTest.java
new file mode 100644
index 0000000000..eb27eec4c9
--- /dev/null
+++ b/threadpool/core/src/test/java/cn/hippo4j/core/adapter/ZipkinExecutorAdapterTest.java
@@ -0,0 +1,79 @@
+/*
+ * 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 cn.hippo4j.core.adapter;
+
+import cn.hippo4j.common.executor.support.RunsOldestTaskPolicy;
+import cn.hippo4j.common.handler.ZipkinExecutorAdapter;
+import cn.hippo4j.core.CustomWrappingExecutorService;
+import cn.hippo4j.core.executor.support.ThreadPoolBuilder;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.scheduling.concurrent.DefaultManagedAwareThreadFactory;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * test for ${@link ZipkinExecutorAdapter}
+ * */
+@Slf4j
+public class ZipkinExecutorAdapterTest {
+
+    ZipkinExecutorAdapter zipkinExecutorAdapter = new ZipkinExecutorAdapter();
+    Executor dynamicThreadPool = ThreadPoolBuilder.builder()
+            .threadPoolId("test")
+            .dynamicPool()
+            .corePoolSize(1)
+            .maximumPoolSize(2)
+            .keepAliveTime(1000)
+            .timeUnit(TimeUnit.MICROSECONDS)
+            .threadFactory(new DefaultManagedAwareThreadFactory())
+            .workQueue(new SynchronousQueue<>())
+            .rejected(new RunsOldestTaskPolicy())
+            .build();
+
+    @Test
+    public void testMatch() {
+        Object executor = new CustomWrappingExecutorService(Executors.newCachedThreadPool());
+        Assert.assertTrue(zipkinExecutorAdapter.match(executor));
+    }
+
+    @Test
+    public void testUnwrap() {
+        Object executor = new CustomWrappingExecutorService(Executors.newCachedThreadPool());
+        ThreadPoolExecutor unwrap = zipkinExecutorAdapter.unwrap(executor);
+        Assert.assertNull(unwrap);
+    }
+
+    @Test
+    public void testReplace() {
+        Object executor = new CustomWrappingExecutorService(Executors.newCachedThreadPool());
+        CustomWrappingExecutorService executorChange = (CustomWrappingExecutorService)executor;
+        ExecutorService beforeReplace = executorChange.delegate();
+        zipkinExecutorAdapter.replace(executor, dynamicThreadPool);
+        ExecutorService afterReplace = executorChange.delegate();
+
+        Assert.assertNotSame(beforeReplace, afterReplace);
+        Assert.assertSame(afterReplace, dynamicThreadPool);
+    }
+}
\ No newline at end of file