You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/10/13 07:44:22 UTC

[dubbo] branch 3.0 updated: support run dubbo native projects with maven plugin (#8970)

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

albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 62f3ca1  support run dubbo native projects with maven plugin (#8970)
62f3ca1 is described below

commit 62f3ca1508751afe07e52bb9568c04a22a9a3296
Author: 张志勇 <go...@163.com>
AuthorDate: Wed Oct 13 15:44:13 2021 +0800

    support run dubbo native projects with maven plugin (#8970)
    
    Co-authored-by: rikaaa0928 <w1...@gmail.com>
---
 .../dubbo-demo-native-consumer/pom.xml             |   24 +-
 .../META-INF/native-image/jni-config.json          |    2 -
 .../META-INF/native-image/proxy-config.json        |    3 -
 .../META-INF/native-image/reflect-config.json      | 2676 --------------------
 .../META-INF/native-image/resource-config.json     |   58 -
 .../native-image/serialization-config.json         |    2 -
 .../dubbo-demo-native-provider/pom.xml             |   27 +-
 .../META-INF/native-image/proxy-config.json        |    2 -
 .../META-INF/native-image/resource-config.json     |   58 -
 dubbo-native-plugin/pom.xml                        |   98 +
 .../org/apache/dubbo/maven/plugin/ClassFinder.java |   91 +
 .../apache/dubbo/maven/plugin/CodeGenerator.java   |  118 +
 .../maven/plugin/DubboNativeCodeGeneratorMojo.java |   88 +
 .../java/org/apache/dubbo/maven/plugin/Test.java   |   34 +
 .../META-INF/native-image/jni-config.json          |    0
 .../META-INF/native-image/proxy-config.json        |    7 +
 .../META-INF/native-image/reflect-config.json      |    0
 .../META-INF/native-image/resource-config.json     |  163 ++
 .../native-image/serialization-config.json         |    0
 pom.xml                                            |    1 +
 20 files changed, 644 insertions(+), 2808 deletions(-)

diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml
index 6f92406..666140e 100644
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml
@@ -67,8 +67,15 @@
 
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-native</artifactId>
-            <version>${project.version}</version>
+            <artifactId>dubbo-filter-cache</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-registry-xds</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-filter-validation</artifactId>
         </dependency>
 
 
@@ -94,6 +101,19 @@
             <build>
                 <plugins>
                     <plugin>
+                        <groupId>org.apache.dubbo</groupId>
+                        <artifactId>dubbo-native-plugin</artifactId>
+                        <version>${revision}</version>
+                        <executions>
+                            <execution>
+                                <phase>process-sources</phase>
+                                <goals>
+                                    <goal>generate</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-compiler-plugin</artifactId>
                         <version>3.7.0</version>
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/jni-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/jni-config.json
deleted file mode 100644
index 0d4f101..0000000
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/jni-config.json
+++ /dev/null
@@ -1,2 +0,0 @@
-[
-]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/proxy-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/proxy-config.json
deleted file mode 100644
index 572a0c8..0000000
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/proxy-config.json
+++ /dev/null
@@ -1,3 +0,0 @@
-[
-  ["org.apace.dubbo.graalvm.demo.DemoService","org.apache.dubbo.rpc.service.EchoService","org.apache.dubbo.rpc.service.Destroyable"]
-]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/reflect-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/reflect-config.json
deleted file mode 100644
index f3dee4e..0000000
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/reflect-config.json
+++ /dev/null
@@ -1,2676 +0,0 @@
-[
-  {
-    "name": "boolean",
-    "allPublicMethods": true
-  },
-  {
-    "name": "com.intellij.rt.execution.application.AppMainV2$Agent",
-    "methods": [
-      {
-        "name": "premain",
-        "parameterTypes": [
-          "java.lang.String",
-          "java.lang.instrument.Instrumentation"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.bootstrap.ServerBootstrap$1"
-  },
-  {
-    "name": "io.netty.bootstrap.ServerBootstrap$ServerBootstrapAcceptor",
-    "methods": [
-      {
-        "name": "channelRead",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "exceptionCaught",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Throwable"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.buffer.AbstractByteBufAllocator",
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "io.netty.buffer.AbstractReferenceCountedByteBuf",
-    "fields": [
-      {
-        "name": "refCnt",
-        "allowUnsafeAccess": true
-      }
-    ]
-  },
-  {
-    "name": "io.netty.channel.ChannelDuplexHandler",
-    "methods": [
-      {
-        "name": "bind",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.net.SocketAddress",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "close",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "connect",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.net.SocketAddress",
-          "java.net.SocketAddress",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "deregister",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "disconnect",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "flush",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "read",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.channel.ChannelHandlerAdapter",
-    "methods": [
-      {
-        "name": "exceptionCaught",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Throwable"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.channel.ChannelInboundHandlerAdapter",
-    "methods": [
-      {
-        "name": "channelActive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelInactive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRead",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "channelReadComplete",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRegistered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelUnregistered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelWritabilityChanged",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "exceptionCaught",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Throwable"
-        ]
-      },
-      {
-        "name": "userEventTriggered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.channel.ChannelInitializer",
-    "methods": [
-      {
-        "name": "channelRegistered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "exceptionCaught",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Throwable"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.channel.ChannelOutboundHandlerAdapter",
-    "methods": [
-      {
-        "name": "bind",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.net.SocketAddress",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "close",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "connect",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.net.SocketAddress",
-          "java.net.SocketAddress",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "deregister",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "disconnect",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "flush",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "read",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.channel.DefaultChannelPipeline$HeadContext",
-    "methods": [
-      {
-        "name": "bind",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.net.SocketAddress",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "channelActive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelInactive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRead",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "channelReadComplete",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRegistered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelUnregistered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelWritabilityChanged",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "close",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "connect",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.net.SocketAddress",
-          "java.net.SocketAddress",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "deregister",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "disconnect",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "io.netty.channel.ChannelPromise"
-        ]
-      },
-      {
-        "name": "exceptionCaught",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Throwable"
-        ]
-      },
-      {
-        "name": "flush",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "read",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "userEventTriggered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "write",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object",
-          "io.netty.channel.ChannelPromise"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.channel.DefaultChannelPipeline$TailContext",
-    "methods": [
-      {
-        "name": "channelActive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelInactive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRead",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "channelReadComplete",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRegistered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelUnregistered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelWritabilityChanged",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "exceptionCaught",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Throwable"
-        ]
-      },
-      {
-        "name": "userEventTriggered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.channel.socket.nio.NioServerSocketChannel",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "io.netty.channel.socket.nio.NioSocketChannel",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "io.netty.handler.codec.ByteToMessageDecoder",
-    "methods": [
-      {
-        "name": "channelInactive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRead",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "channelReadComplete",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "userEventTriggered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.handler.codec.MessageToByteEncoder",
-    "methods": [
-      {
-        "name": "write",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object",
-          "io.netty.channel.ChannelPromise"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.handler.timeout.IdleStateHandler",
-    "methods": [
-      {
-        "name": "channelActive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelInactive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRead",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "channelReadComplete",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRegistered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "write",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object",
-          "io.netty.channel.ChannelPromise"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "io.netty.util.ReferenceCountUtil",
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueColdProducerFields",
-    "fields": [
-      {
-        "name": "producerLimit",
-        "allowUnsafeAccess": true
-      }
-    ]
-  },
-  {
-    "name": "io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueConsumerFields",
-    "fields": [
-      {
-        "name": "consumerIndex",
-        "allowUnsafeAccess": true
-      }
-    ]
-  },
-  {
-    "name": "io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueProducerFields",
-    "fields": [
-      {
-        "name": "producerIndex",
-        "allowUnsafeAccess": true
-      }
-    ]
-  },
-  {
-    "name": "io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueConsumerIndexField",
-    "fields": [
-      {
-        "name": "consumerIndex",
-        "allowUnsafeAccess": true
-      }
-    ]
-  },
-  {
-    "name": "io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueProducerIndexField",
-    "fields": [
-      {
-        "name": "producerIndex",
-        "allowUnsafeAccess": true
-      }
-    ]
-  },
-  {
-    "name": "io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueProducerLimitField",
-    "fields": [
-      {
-        "name": "producerLimit",
-        "allowUnsafeAccess": true
-      }
-    ]
-  },
-  {
-    "name": "java.io.File",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "java.lang.String"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "java.io.Serializable",
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "java.lang.Cloneable",
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "java.lang.Comparable",
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "java.lang.Enum",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "java.lang.Integer",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true,
-    "allDeclaredConstructors": true
-  },
-  {
-    "name": "java.lang.Number",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "java.lang.Object",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true,
-    "allPublicMethods": true
-  },
-  {
-    "name": "java.lang.StackTraceElement",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true,
-    "allDeclaredConstructors": true
-  },
-  {
-    "name": "java.lang.String"
-  },
-  {
-    "name": "java.lang.String[]"
-  },
-  {
-    "name": "java.lang.Thread",
-    "methods": [
-      {
-        "name": "getContextClassLoader",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "java.lang.Throwable",
-    "fields": [
-      {
-        "name": "detailMessage"
-      },
-      {
-        "name": "stackTrace"
-      }
-    ]
-  },
-  {
-    "name": "java.lang.management.ManagementFactory",
-    "methods": [
-      {
-        "name": "getRuntimeMXBean",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "java.lang.management.RuntimeMXBean",
-    "methods": [
-      {
-        "name": "getName",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "java.math.BigDecimal",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "java.lang.String"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "java.math.BigInteger",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true,
-    "allDeclaredConstructors": true
-  },
-  {
-    "name": "java.net.URL",
-    "fields": [
-      {
-        "name": "ref"
-      }
-    ]
-  },
-  {
-    "name": "java.nio.Bits",
-    "methods": [
-      {
-        "name": "unaligned",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "java.nio.Buffer",
-    "fields": [
-      {
-        "name": "address",
-        "allowUnsafeAccess": true
-      }
-    ]
-  },
-  {
-    "name": "java.nio.DirectByteBuffer",
-    "fields": [
-      {
-        "name": "cleaner",
-        "allowUnsafeAccess": true
-      }
-    ],
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "long",
-          "int"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "java.security.MessageDigestSpi"
-  },
-  {
-    "name": "java.sql.Date",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "long"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "java.sql.Time",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "long"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "java.sql.Timestamp",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "long"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "java.time.Duration"
-  },
-  {
-    "name": "java.time.Instant"
-  },
-  {
-    "name": "java.time.LocalDate"
-  },
-  {
-    "name": "java.time.LocalDateTime"
-  },
-  {
-    "name": "java.time.LocalTime"
-  },
-  {
-    "name": "java.time.MonthDay"
-  },
-  {
-    "name": "java.time.OffsetDateTime"
-  },
-  {
-    "name": "java.time.OffsetTime"
-  },
-  {
-    "name": "java.time.Period"
-  },
-  {
-    "name": "java.time.Year"
-  },
-  {
-    "name": "java.time.YearMonth"
-  },
-  {
-    "name": "java.time.ZoneId"
-  },
-  {
-    "name": "java.time.ZoneOffset"
-  },
-  {
-    "name": "java.time.ZonedDateTime"
-  },
-  {
-    "name": "java.util.AbstractMap",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "java.util.ArrayList",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "java.util.BitSet",
-    "allDeclaredFields": true
-  },
-  {
-    "name": "java.util.HashMap",
-    "allDeclaredMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "java.util.LinkedHashMap",
-    "allPublicConstructors": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "java.util.Map",
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "java.util.NavigableMap",
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "java.util.SortedMap",
-    "allDeclaredMethods": true
-  },
-  {
-    "name": "java.util.TreeMap",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true,
-    "allDeclaredConstructors": true
-  },
-  {
-    "name": "java.util.Map",
-    "allPublicConstructors": true
-  },
-  {
-    "name": "java.util.concurrent.ConcurrentNavigableMap"
-  },
-  {
-    "name": "java.util.concurrent.ConcurrentSkipListMap"
-  },
-  {
-    "name": "javax.management.ObjectName",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "java.lang.String"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apace.dubbo.graalvm.demo.DemoService",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.curator.x.discovery.ServiceType",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true,
-    "allDeclaredConstructors": true
-  },
-  {
-    "name": "org.apache.curator.x.discovery.details.OldServiceInstance",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true,
-    "allDeclaredConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.common.CommonScopeModelInitializer",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.URL",
-    "allDeclaredFields": true
-  },
-  {
-    "name": "org.apache.dubbo.common.beans.ScopeBeanExtensionInjector",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.compiler.support.AdaptiveCompiler",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.compiler.support.JavassistCompiler",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.compiler.support.JdkCompiler",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.config.Environment",
-    "allPublicMethods": true,
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.common.config.ModuleEnvironment",
-    "allPublicMethods": true,
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfigurationFactory"
-  },
-  {
-    "name": "org.apache.dubbo.common.config.configcenter.nop.NopDynamicConfigurationFactory"
-  },
-  {
-    "name": "org.apache.dubbo.common.extension.inject.AdaptiveExtensionInjector",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.extension.inject.SpiExtensionInjector",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.infra.support.EnvironmentAdapter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.lang.ShutdownHookCallbacks",
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.common.logger.jcl.JclLoggerAdapter"
-  },
-  {
-    "name": "org.apache.dubbo.common.logger.jdk.JdkLoggerAdapter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.logger.log4j.Log4jLoggerAdapter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.logger.log4j2.Log4j2LoggerAdapter"
-  },
-  {
-    "name": "org.apache.dubbo.common.logger.slf4j.Slf4jLoggerAdapter"
-  },
-  {
-    "name": "org.apache.dubbo.common.serialize.hessian2.Hessian2Serialization",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.serialize.hessian2.dubbo.DefaultHessian2FactoryInitializer",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.serialize.hessian2.dubbo.WhitelistHessian2FactoryInitializer"
-  },
-  {
-    "name": "org.apache.dubbo.common.status.reporter.FrameworkStatusReportService",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.threadpool.ThreadPool",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.common.threadpool.ThreadPool$Adaptive",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.threadpool.manager.DefaultExecutorRepository",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.threadpool.support.cached.CachedThreadPool",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.threadpool.support.eager.EagerThreadPool"
-  },
-  {
-    "name": "org.apache.dubbo.common.threadpool.support.fixed.FixedThreadPool",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.common.threadpool.support.limited.LimitedThreadPool"
-  },
-  {
-    "name": "org.apache.dubbo.common.url.component.URLAddress",
-    "allDeclaredFields": true
-  },
-  {
-    "name": "org.apache.dubbo.common.url.component.URLParam",
-    "allDeclaredFields": true
-  },
-  {
-    "name": "org.apache.dubbo.common.url.component.param.DefaultDynamicParamSource",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.AbstractConfig",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.config.AbstractInterfaceConfig",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.config.AbstractMethodConfig",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.config.AbstractReferenceConfig",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.config.AbstractServiceConfig",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.config.ApplicationConfig",
-    "allPublicMethods": true,
-    "fields": [
-      {
-        "name": "monitor"
-      },
-      {
-        "name": "registries"
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.ArgumentConfig",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.config.ConfigCenterConfig",
-    "allPublicMethods": true,
-    "fields": [
-      {
-        "name": "appExternalConfiguration"
-      },
-      {
-        "name": "externalConfiguration"
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.ConfigScopeModelInitializer",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.ConsumerConfig",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.MethodConfig",
-    "allPublicMethods": true,
-    "fields": [
-      {
-        "name": "arguments"
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.ModuleConfig",
-    "allPublicMethods": true,
-    "fields": [
-      {
-        "name": "monitor"
-      },
-      {
-        "name": "registries"
-      }
-    ],
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.ProtocolConfig",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.ProviderConfig",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.ReferenceConfig",
-    "allPublicMethods": true,
-    "fields": [
-      {
-        "name": "invoker"
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.ReferenceConfigBase",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.config.RegistryConfig",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.config.ServiceConfig",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.config.ServiceConfigBase",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.config.SslConfig",
-    "allPublicMethods": true,
-    "fields": [
-      {
-        "name": "clientKeyCertChainPathStream"
-      },
-      {
-        "name": "clientPrivateKeyPathStream"
-      },
-      {
-        "name": "clientTrustCertCollectionPathStream"
-      },
-      {
-        "name": "serverKeyCertChainPathStream"
-      },
-      {
-        "name": "serverPrivateKeyPathStream"
-      },
-      {
-        "name": "serverTrustCertCollectionPathStream"
-      }
-    ],
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.context.ConfigManager",
-    "allPublicMethods": true,
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.config.deploy.DefaultApplicationDeployer",
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.config.deploy.DefaultModuleDeployer",
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.config.metadata.ConfigurableMetadataServiceExporter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.metadata.ServiceInstanceHostPortCustomizer",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.config.utils.DefaultConfigValidator",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.demo.graalvm.provider.DemoServiceImpl",
-    "methods": [
-      {
-        "name": "sayHello",
-        "parameterTypes": [
-          "java.lang.String"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.metadata.InstanceMetadataChangedListener",
-    "allDeclaredFields": true
-  },
-  {
-    "name": "org.apache.dubbo.metadata.MetadataInfo",
-    "allDeclaredFields": true
-  },
-  {
-    "name": "org.apache.dubbo.metadata.MetadataInfo$ServiceInfo",
-    "allDeclaredFields": true
-  },
-  {
-    "name": "org.apache.dubbo.metadata.MetadataService",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.metadata.definition.builder.ArrayTypeBuilder",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.metadata.definition.builder.CollectionTypeBuilder",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.metadata.definition.builder.EnumTypeBuilder",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.metadata.definition.builder.MapTypeBuilder",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.metadata.definition.model.MethodDefinition",
-    "allDeclaredFields": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.metadata.definition.model.ServiceDefinition",
-    "allDeclaredFields": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.metadata.definition.model.TypeDefinition",
-    "allDeclaredFields": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.metadata.report.MetadataReportInstance",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.metadata.report.MetadataScopeModelInitializer",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.monitor.MetricsService",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.monitor.MonitorService",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.monitor.support.MetricsServiceDetector",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.monitor.support.MonitorFilter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.monitor.support.MonitorClusterFilter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.monitor.support.MonitorFilter"
-  },
-  {
-    "name": "org.apache.dubbo.monitor.support.MonitorServiceDetector",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.RegistryFactory",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.registry.RegistryFactory$Adaptive",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.RegistryFactoryWrapper",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "org.apache.dubbo.registry.RegistryFactory"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.RegistryScopeModelInitializer",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.DefaultRegistryClusterIdentifier",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.DefaultServiceDiscoveryFactory"
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.DefaultServiceInstance$Endpoint",
-    "allDeclaredFields": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.ServiceDiscoveryRegistryFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.metadata.MetadataServiceNameMapping",
-    "allPublicMethods": true,
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.metadata.MetadataServiceURLParamsMetadataCustomizer",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.metadata.ProtocolPortsMetadataCustomizer",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataCustomizer",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.metadata.store.RemoteMetadataServiceImpl",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.migration.DefaultMigrationAddressComparator",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.client.migration.MigrationRuleListener",
-    "allPublicMethods": true,
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.registry.integration.InterfaceCompatibleRegistryProtocol",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.integration.RegistryProtocol",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.multicast.MulticastRegistryFactory"
-  },
-  {
-    "name": "org.apache.dubbo.registry.multicast.MulticastServiceDiscoveryFactory"
-  },
-  {
-    "name": "org.apache.dubbo.registry.support.DefaultProviderFirstParams",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.support.RegistryManager",
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.registry.zookeeper.ZookeeperInstance",
-    "allDeclaredFields": true,
-    "allDeclaredMethods": true,
-    "allDeclaredConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.registry.zookeeper.ZookeeperRegistryFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.registry.zookeeper.ZookeeperServiceDiscoveryFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.remoting.Dispatcher",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.remoting.Dispatcher$Adaptive",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.remoting.Transporter",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.remoting.Transporter$Adaptive",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.remoting.exchange.codec.ExchangeCodec"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.exchange.support.header.HeaderExchanger",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.remoting.telnet.codec.TelnetCodec"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.codec.TransportCodec"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.dispatcher.all.AllDispatcher",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.dispatcher.connection.ConnectionOrderedDispatcher"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.dispatcher.direct.DirectDispatcher"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.dispatcher.execution.ExecutionDispatcher"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.dispatcher.message.MessageOnlyDispatcher"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.netty4.NettyClient$1"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.netty4.NettyClientHandler",
-    "methods": [
-      {
-        "name": "channelActive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelInactive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRead",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "exceptionCaught",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Throwable"
-        ]
-      },
-      {
-        "name": "userEventTriggered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "write",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object",
-          "io.netty.channel.ChannelPromise"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalDecoder"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalEncoder"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.netty4.NettyServer$1"
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.netty4.NettyServerHandler",
-    "methods": [
-      {
-        "name": "channelActive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelInactive",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext"
-        ]
-      },
-      {
-        "name": "channelRead",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "exceptionCaught",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Throwable"
-        ]
-      },
-      {
-        "name": "userEventTriggered",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object"
-        ]
-      },
-      {
-        "name": "write",
-        "parameterTypes": [
-          "io.netty.channel.ChannelHandlerContext",
-          "java.lang.Object",
-          "io.netty.channel.ChannelPromise"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.remoting.transport.netty4.NettyTransporter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.remoting.zookeeper.curator5.Curator5ZookeeperTransporter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.Invoker",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.Protocol",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.Protocol$Adaptive",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.ProxyFactory",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.ProxyFactory$Adaptive",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.Cluster",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.Cluster$Adaptive",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.ClusterScopeModelInitializer",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.ConfiguratorFactory",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.ConfiguratorFactory$Adaptive",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.Directory",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.RouterFactory",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.RouterFactory$Adaptive",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.configurator.absent.AbsentConfiguratorFactory"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.configurator.override.OverrideConfiguratorFactory"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.filter.DefaultFilterChainBuilder",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.filter.ProtocolFilterWrapper",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "org.apache.dubbo.rpc.Protocol"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.filter.support.ConsumerContextFilter",
-    "allPublicMethods": true,
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.filter.support.ZoneAwareFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.governance.DefaultGovernanceRuleRepositoryImpl",
-    "allPublicMethods": true,
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.loadbalance.ConsistentHashLoadBalance"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.loadbalance.RandomLoadBalance",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.loadbalance.ShortestResponseLoadBalance"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.merger.MergerFactory",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.ClusterUtils",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.AccessLogFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.ClassLoaderFilter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.CompatibleFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.ContextFilter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.DeprecatedFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.EchoFilter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.ExceptionFilter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.ExecuteLimitFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.GenericFilter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.GenericImplFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.TimeoutFilter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.router.condition.ConditionRouterFactory"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.router.condition.config.AppRouterFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.router.condition.config.ServiceRouterFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.router.file.FileRouterFactory"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.router.mesh.route.MeshRuleAddressListenerInterceptor",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.router.mesh.route.MeshRuleRouterFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.router.mock.MockRouterFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.router.tag.TagDynamicStateRouterFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.router.tag.TagRouterFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.router.tag.TagStaticStateRouterFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.AvailableCluster"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.BroadcastCluster"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.ClusterUtils",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.FailbackCluster"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.FailfastCluster"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.FailoverCluster",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.FailsafeCluster"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.ForkingCluster"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.MergeableCluster"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.merger.DefaultProviderURLMergeProcessor",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.registry.ZoneAwareCluster"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterWrapper",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "org.apache.dubbo.rpc.cluster.Cluster"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.AccessLogFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.ClassLoaderFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.CompatibleFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.ContextFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.DeprecatedFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.EchoFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.ExceptionFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.ExecuteLimitFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.GenericFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.GenericImplFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.TimeoutFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.TokenFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.filter.TpsLimitFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.listener.DeprecatedInvokerListener"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "org.apache.dubbo.rpc.Protocol"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.protocol.ProtocolSerializationWrapper",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "org.apache.dubbo.rpc.Protocol"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.protocol.dubbo.DubboCountCodec",
-    "allPublicMethods": true,
-    "allPublicConstructors": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.protocol.dubbo.filter.FutureFilter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.protocol.injvm.InjvmProtocol",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.proxy.javassist.JavassistProxyFactory"
-  },
-  {
-    "name": "org.apache.dubbo.rpc.proxy.jdk.JdkProxyFactory",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.proxy.wrapper.StubProxyFactoryWrapper",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": [
-          "org.apache.dubbo.rpc.ProxyFactory"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.service.Destroyable",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.service.EchoService",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.service.EchoServiceDetector",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.service.GenericService",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.dubbo.rpc.service.GenericServiceDetector",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.dubbo.rpc.support.MockProtocol"
-  },
-  {
-    "name": "org.apache.log4j.Appender"
-  },
-  {
-    "name": "org.apache.log4j.Category"
-  },
-  {
-    "name": "org.apache.log4j.CategoryKey"
-  },
-  {
-    "name": "org.apache.log4j.ConsoleAppender",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.log4j.Layout",
-    "allPublicMethods": true
-  },
-  {
-    "name": "org.apache.log4j.Logger"
-  },
-  {
-    "name": "org.apache.log4j.PatternLayout",
-    "allPublicMethods": true,
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "org.apache.log4j.helpers.Loader"
-  },
-  {
-    "name": "org.apache.log4j.spi.OptionHandler"
-  },
-  {
-    "name": "org.apache.zookeeper.ClientCnxnSocketNIO",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "sun.misc.Cleaner",
-    "methods": [
-      {
-        "name": "clean",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "sun.misc.Unsafe",
-    "fields": [
-      {
-        "name": "theUnsafe"
-      }
-    ],
-    "methods": [
-      {
-        "name": "copyMemory",
-        "parameterTypes": [
-          "java.lang.Object",
-          "long",
-          "java.lang.Object",
-          "long",
-          "long"
-        ]
-      },
-      {
-        "name": "getAndAddLong",
-        "parameterTypes": [
-          "java.lang.Object",
-          "long",
-          "long"
-        ]
-      },
-      {
-        "name": "getAndSetObject",
-        "parameterTypes": [
-          "java.lang.Object",
-          "long",
-          "java.lang.Object"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "sun.misc.VM",
-    "methods": [
-      {
-        "name": "maxDirectMemory",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "sun.nio.ch.SelectorImpl",
-    "fields": [
-      {
-        "name": "publicSelectedKeys"
-      },
-      {
-        "name": "selectedKeys"
-      }
-    ]
-  },
-  {
-    "name": "sun.security.provider.ConfigFile",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "sun.security.provider.MD5",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "sun.security.provider.NativePRNG",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "sun.security.provider.SHA",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  },
-  {
-    "name": "sun.security.provider.Sun",
-    "methods": [
-      {
-        "name": "<init>",
-        "parameterTypes": []
-      }
-    ]
-  }
-]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/resource-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/resource-config.json
deleted file mode 100644
index f2febd2..0000000
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/resource-config.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-  "resources":{
-    "includes":[
-      {"pattern":"\\QDENY_CLASS\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.compiler.Compiler\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.context.ApplicationExt\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.context.ModuleExt\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.infra.InfraAdapter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.logger.LoggerAdapter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.serialize.Serialization\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.serialize.hessian2.dubbo.Hessian2FactoryInitializer\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.threadpool.ThreadPool\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.threadpool.manager.ExecutorRepository\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.url.component.param.DynamicParamSource\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataServiceExporter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.ServiceNameMapping\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.WritableMetadataService\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.AddressListener\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.ProviderFirstParams\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.RegistryClusterIdentifier\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.migration.MigrationAddressComparator\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.integration.RegistryProtocolListener\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Codec2\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Dispatcher\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Transporter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.exchange.Exchanger\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.Filter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.InvokerListener\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.ProxyFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.Cluster\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.ConfiguratorFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.LoadBalance\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.ProviderURLMergeProcessor\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.RouterFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.governance.GovernanceRuleRepository\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.router.state.StateRouterFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.model.BuiltinServiceDetector\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.model.ScopeModelInitializer\\E"},
-      {"pattern":"\\QMETA-INF/services/org.apache.dubbo.common.extension.LoadingStrategy\\E"},
-      {"pattern":"\\Qdubbo.properties\\E"},
-      {"pattern":"\\Qlog4j.properties\\E"},
-      {"pattern":"\\Qorg/apache/dubbo/common/Version.class\\E"},
-      {"pattern":"\\Qorg/apache/dubbo/remoting/RemotingException.class\\E"},
-      {"pattern":"\\Qorg/apache/dubbo/remoting/Transporters.class\\E"},
-      {"pattern":"\\Qorg/apache/dubbo/remoting/exchange/Exchangers.class\\E"}
-    ]},
-  "bundles":[]
-}
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/serialization-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/serialization-config.json
deleted file mode 100644
index 0d4f101..0000000
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/serialization-config.json
+++ /dev/null
@@ -1,2 +0,0 @@
-[
-]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
index f0c9df7..eaaa672 100644
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
@@ -59,11 +59,17 @@
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-serialization-hessian2</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-native</artifactId>
-            <version>${project.version}</version>
+            <artifactId>dubbo-filter-cache</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-registry-xds</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-filter-validation</artifactId>
         </dependency>
 
     </dependencies>
@@ -89,7 +95,19 @@
 
             <build>
                 <plugins>
-
+                    <plugin>
+                        <groupId>org.apache.dubbo</groupId>
+                        <artifactId>dubbo-native-plugin</artifactId>
+                        <version>${revision}</version>
+                        <executions>
+                            <execution>
+                                <phase>process-sources</phase>
+                                <goals>
+                                    <goal>generate</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-compiler-plugin</artifactId>
@@ -142,7 +160,6 @@
                                 --initialize-at-build-time=io.netty.util.internal.logging.Log4JLogger
 
 
-
                                 --initialize-at-run-time=io.netty.channel.epoll.Epoll
                                 --initialize-at-run-time=io.netty.channel.epoll.Native
                                 --initialize-at-run-time=io.netty.channel.epoll.EpollEventLoop
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/proxy-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/proxy-config.json
deleted file mode 100644
index 0d4f101..0000000
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/proxy-config.json
+++ /dev/null
@@ -1,2 +0,0 @@
-[
-]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/resource-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/resource-config.json
deleted file mode 100644
index f2febd2..0000000
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/resource-config.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-  "resources":{
-    "includes":[
-      {"pattern":"\\QDENY_CLASS\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.compiler.Compiler\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.context.ApplicationExt\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.context.ModuleExt\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.infra.InfraAdapter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.logger.LoggerAdapter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.serialize.Serialization\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.serialize.hessian2.dubbo.Hessian2FactoryInitializer\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.threadpool.ThreadPool\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.threadpool.manager.ExecutorRepository\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.url.component.param.DynamicParamSource\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataServiceExporter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.ServiceNameMapping\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.WritableMetadataService\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.AddressListener\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.ProviderFirstParams\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.RegistryClusterIdentifier\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.migration.MigrationAddressComparator\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.integration.RegistryProtocolListener\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Codec2\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Dispatcher\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Transporter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.exchange.Exchanger\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.Filter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.InvokerListener\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.ProxyFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.Cluster\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.ConfiguratorFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.LoadBalance\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.ProviderURLMergeProcessor\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.RouterFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.governance.GovernanceRuleRepository\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.router.state.StateRouterFactory\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.model.BuiltinServiceDetector\\E"},
-      {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.model.ScopeModelInitializer\\E"},
-      {"pattern":"\\QMETA-INF/services/org.apache.dubbo.common.extension.LoadingStrategy\\E"},
-      {"pattern":"\\Qdubbo.properties\\E"},
-      {"pattern":"\\Qlog4j.properties\\E"},
-      {"pattern":"\\Qorg/apache/dubbo/common/Version.class\\E"},
-      {"pattern":"\\Qorg/apache/dubbo/remoting/RemotingException.class\\E"},
-      {"pattern":"\\Qorg/apache/dubbo/remoting/Transporters.class\\E"},
-      {"pattern":"\\Qorg/apache/dubbo/remoting/exchange/Exchangers.class\\E"}
-    ]},
-  "bundles":[]
-}
diff --git a/dubbo-native-plugin/pom.xml b/dubbo-native-plugin/pom.xml
new file mode 100644
index 0000000..5d1d75b
--- /dev/null
+++ b/dubbo-native-plugin/pom.xml
@@ -0,0 +1,98 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>dubbo-parent</artifactId>
+        <groupId>org.apache.dubbo</groupId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dubbo-native-plugin</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+    <packaging>maven-plugin</packaging>
+    <dependencies>
+
+
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-plugin-api</artifactId>
+            <version>3.5.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-core</artifactId>
+            <version>3.5.4</version>
+            <scope>provided</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.apache.maven.plugin-tools</groupId>
+            <artifactId>maven-plugin-annotations</artifactId>
+            <version>3.5.2</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.6</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+
+        <plugins>
+            <plugin>
+                <artifactId>maven-plugin-plugin</artifactId>
+                <version>3.6.0</version>
+                <executions>
+                    <execution>
+                        <id>default-addPluginArtifactMetadata</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>addPluginArtifactMetadata</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>default-descriptor</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>descriptor</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+
+    </build>
+</project>
diff --git a/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/ClassFinder.java b/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/ClassFinder.java
new file mode 100644
index 0000000..bf0f02c
--- /dev/null
+++ b/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/ClassFinder.java
@@ -0,0 +1,91 @@
+/*
+ * 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.dubbo.maven.plugin;
+
+
+import java.io.File;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+public class ClassFinder {
+
+    public Set<String> findClassSet(String packageName, Consumer<String> consumer) {
+        packageName = packageName.replace(".", "/");
+        try {
+            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+            Enumeration resources = classLoader.getResources(packageName);
+            Set<String> result = new HashSet<>();
+            while (resources.hasMoreElements()) {
+                URL resource = (URL) resources.nextElement();
+                if (resource != null) {
+                    String protocol = resource.getProtocol();
+                    if ("file".equals(protocol)) {
+                        findClassesByFile(packageName, resource.getPath(), result);
+                    } else if ("jar".equals(protocol)) {
+                        JarFile jar = ((JarURLConnection) resource.openConnection()).getJarFile();
+                        consumer.accept("findClassSet jar:" + jar.getName());
+                        findClassesByJar(packageName, jar, result);
+                    }
+                }
+            }
+            return result;
+        } catch (Throwable ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    private void findClassesByFile(String packageName, String resource, Set<String> result) {
+        File directory = new File(resource);
+        File[] listFiles = directory.listFiles();
+        for (File file : listFiles) {
+            if (file.isDirectory()) {
+                findClassesByFile(packageName, file.getPath(), result);
+            } else {
+                String path = file.getPath();
+                if (path.endsWith(".class")) {
+                    int packageIndex = path.indexOf(packageName.replace("/", File.separator));
+                    String classPath = path.substring(packageIndex, path.length() - 6);
+                    result.add(classPath.replace(File.separator, "."));
+                }
+            }
+        }
+    }
+
+    private static void findClassesByJar(String packageName, JarFile jar, Set<String> classes) {
+        Enumeration<JarEntry> entry = jar.entries();
+        JarEntry jarEntry;
+        String name;
+        while (entry.hasMoreElements()) {
+            jarEntry = entry.nextElement();
+            name = jarEntry.getName();
+            if (name.charAt(0) == '/') {
+                name = name.substring(1);
+            }
+            if (jarEntry.isDirectory() || !name.startsWith(packageName) || !name.endsWith(".class")) {
+                continue;
+            }
+            String className = name.substring(0, name.length() - 6);
+            classes.add(className.replace("/", "."));
+        }
+    }
+}
diff --git a/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/CodeGenerator.java b/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/CodeGenerator.java
new file mode 100644
index 0000000..be04df4
--- /dev/null
+++ b/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/CodeGenerator.java
@@ -0,0 +1,118 @@
+/*
+ * 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.dubbo.maven.plugin;
+
+import org.apache.dubbo.common.extension.Adaptive;
+import org.apache.dubbo.common.extension.AdaptiveClassCodeGenerator;
+import org.apache.dubbo.common.extension.SPI;
+import org.apache.dubbo.common.utils.StringUtils;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.plugin.logging.Log;
+
+import java.io.File;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * generate related self-adaptive code (native image does not support dynamic code generation. Therefore, code needs to be generated before compilation)
+ */
+public class CodeGenerator {
+
+
+    public static void execute(String p, Log log) {
+        log.info("Start generating code:" + p);
+        List<Class<?>> classes = new ClassFinder().findClassSet("org.apache.dubbo", msg -> {
+            log.info(msg);
+        }).stream().map(it -> {
+            try {
+                return Class.forName(it);
+            } catch (Throwable e) {
+            }
+            return null;
+        }).collect(Collectors.toList());
+        new ArrayList<>(classes).stream().filter(it -> {
+            if (null == it) {
+                return false;
+            }
+            Annotation anno = it.getAnnotation(SPI.class);
+            if (null == anno) {
+                return false;
+            }
+            try {
+                Optional<Method> optional = Arrays.stream(it.getMethods()).filter(it2 -> it2.getAnnotation(Adaptive.class) != null).findAny();
+                return optional.isPresent();
+            } catch (Throwable ex) {
+                log.warn(ex.getMessage());
+                return false;
+            }
+        }).forEach(it -> {
+            try {
+                SPI spi = it.getAnnotation(SPI.class);
+                String value = spi.value();
+                if (StringUtils.isEmpty(value)) {
+                    value = "adaptive";
+                }
+                AdaptiveClassCodeGenerator codeGenerator = new AdaptiveClassCodeGenerator(it, value);
+                String code = codeGenerator.generate();
+                String file = p + File.separator + it.getName().replaceAll("\\.", File.separator);
+                String dir = Paths.get(file).getParent().toString();
+                FileUtils.forceMkdir(new File(dir));
+                code = licensedStr + code + "\n";
+                File tmpFile = new File(file + "$Adaptive.java");
+                FileUtils.write(tmpFile, code);
+                log.info("Generate file:" + tmpFile);
+            } catch (Throwable e) {
+                log.error("error:" + it.getPackage());
+            }
+        });
+        log.info("End of code generation");
+    }
+
+
+    public static void main(String[] args) {
+        URL r = Thread.currentThread().getContextClassLoader().getResource("");
+        String p = Paths.get(r.getFile()).getParent().getParent().toString() + File.separator + "src" + File.separator + "main" + File.separator + "java";
+        execute(p, null);
+    }
+
+
+    private static String licensedStr = "/*\n" +
+        " * Licensed to the Apache Software Foundation (ASF) under one or more\n" +
+        " * contributor license agreements.  See the NOTICE file distributed with\n" +
+        " * this work for additional information regarding copyright ownership.\n" +
+        " * The ASF licenses this file to You under the Apache License, Version 2.0\n" +
+        " * (the \"License\"); you may not use this file except in compliance with\n" +
+        " * the License.  You may obtain a copy of the License at\n" +
+        " *\n" +
+        " *     http://www.apache.org/licenses/LICENSE-2.0\n" +
+        " *\n" +
+        " * Unless required by applicable law or agreed to in writing, software\n" +
+        " * distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
+        " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
+        " * See the License for the specific language governing permissions and\n" +
+        " * limitations under the License.\n" +
+        " */\n";
+
+}
diff --git a/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/DubboNativeCodeGeneratorMojo.java b/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/DubboNativeCodeGeneratorMojo.java
new file mode 100644
index 0000000..967a821
--- /dev/null
+++ b/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/DubboNativeCodeGeneratorMojo.java
@@ -0,0 +1,88 @@
+/*
+ * 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.dubbo.maven.plugin;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.project.MavenProject;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * generate related self-adaptive code (native image does not support dynamic code generation. Therefore, code needs to be generated before compilation)
+ */
+@Mojo(name = "generate")
+public class DubboNativeCodeGeneratorMojo extends AbstractMojo {
+
+    @Override
+    public void execute() {
+        Log log = getLog();
+        log.info("dubbo native code generator mojo execute");
+        MavenProject project = (MavenProject) this.getPluginContext().get("project");
+        copyNativeConfigFile(log, project);
+        try {
+            generateCode(log, project);
+        } catch (Exception ignored) {
+
+        }
+    }
+
+    private void generateCode(Log log, MavenProject project) throws IOException {
+        String baseDir = project.getBasedir().getPath();
+        File source = new File(baseDir + "/src/main/generated");
+        FileUtils.forceMkdir(source);
+        project.addCompileSourceRoot(source.getAbsolutePath());
+        log.info("Source directory: " + source + " added.");
+        List<String> list = project.getCompileSourceRoots();
+        log.info(list.toString());
+        CodeGenerator.execute(source.getPath(), log);
+    }
+
+    private void copyNativeConfigFile(Log log, MavenProject project) {
+        String[] nativeFiles = {"META-INF/native-image/reflect-config.json",
+            "META-INF/native-image/jni-config.json",
+            "META-INF/native-image/proxy-config.json",
+            "META-INF/native-image/resource-config.json",
+            "META-INF/native-image/serialization-config.json"};
+
+        Arrays.stream(nativeFiles).forEach(nativeFile -> {
+            InputStream is = DubboNativeCodeGeneratorMojo.class.getClassLoader().getResourceAsStream(nativeFile);
+            project.getResources().stream().findFirst().ifPresent(resource -> {
+                String directory = resource.getDirectory();
+                try {
+                    FileUtils.forceMkdir(new File(directory + "/META-INF/native-image/"));
+                    File file = new File(directory + "/" + nativeFile);
+                    if (!file.exists()) {
+                        FileUtils.copyInputStreamToFile(is, file);
+                        log.info("Copy native config file:" + file);
+                    } else {
+                        log.info("Skip copy config file:" + file);
+                    }
+                } catch (Throwable ex) {
+                    log.error("Copy native config file error:" + ex.getMessage());
+                }
+            });
+        });
+    }
+}
diff --git a/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/Test.java b/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/Test.java
new file mode 100644
index 0000000..f5ab791
--- /dev/null
+++ b/dubbo-native-plugin/src/main/java/org/apache/dubbo/maven/plugin/Test.java
@@ -0,0 +1,34 @@
+/*
+ * 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.dubbo.maven.plugin;
+
+import java.util.Set;
+
+/**
+ * @Author goodjava@qq.com
+ * @Date 2021/9/26 14:12
+ */
+public class Test {
+
+    public static void main(String[] args) {
+        ClassFinder finder = new ClassFinder();
+        Set<String> set = finder.findClassSet("org.apache.dubbo", msg -> {
+        });
+        System.out.println(set.size());
+    }
+}
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/jni-config.json b/dubbo-native-plugin/src/main/resources/META-INF/native-image/jni-config.json
similarity index 100%
rename from dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/jni-config.json
rename to dubbo-native-plugin/src/main/resources/META-INF/native-image/jni-config.json
diff --git a/dubbo-native-plugin/src/main/resources/META-INF/native-image/proxy-config.json b/dubbo-native-plugin/src/main/resources/META-INF/native-image/proxy-config.json
new file mode 100644
index 0000000..49f2fc2
--- /dev/null
+++ b/dubbo-native-plugin/src/main/resources/META-INF/native-image/proxy-config.json
@@ -0,0 +1,7 @@
+[
+  [
+    "org.apace.dubbo.graalvm.demo.DemoService",
+    "org.apache.dubbo.rpc.service.EchoService",
+    "org.apache.dubbo.rpc.service.Destroyable"
+  ]
+]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/reflect-config.json b/dubbo-native-plugin/src/main/resources/META-INF/native-image/reflect-config.json
similarity index 100%
rename from dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/reflect-config.json
rename to dubbo-native-plugin/src/main/resources/META-INF/native-image/reflect-config.json
diff --git a/dubbo-native-plugin/src/main/resources/META-INF/native-image/resource-config.json b/dubbo-native-plugin/src/main/resources/META-INF/native-image/resource-config.json
new file mode 100644
index 0000000..07396cb
--- /dev/null
+++ b/dubbo-native-plugin/src/main/resources/META-INF/native-image/resource-config.json
@@ -0,0 +1,163 @@
+{
+  "resources": {
+    "includes": [
+      {
+        "pattern": "\\QDENY_CLASS\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.compiler.Compiler\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.context.ApplicationExt\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.context.ModuleExt\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.infra.InfraAdapter\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.logger.LoggerAdapter\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.serialize.Serialization\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.serialize.hessian2.dubbo.Hessian2FactoryInitializer\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.threadpool.ThreadPool\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.threadpool.manager.ExecutorRepository\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.url.component.param.DynamicParamSource\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataServiceExporter\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.ServiceNameMapping\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.WritableMetadataService\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.AddressListener\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.ProviderFirstParams\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.RegistryClusterIdentifier\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.migration.MigrationAddressComparator\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.integration.RegistryProtocolListener\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Codec2\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Dispatcher\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Transporter\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.exchange.Exchanger\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.Filter\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.InvokerListener\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.ProxyFactory\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.Cluster\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.ConfiguratorFactory\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.LoadBalance\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.ProviderURLMergeProcessor\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.RouterFactory\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.governance.GovernanceRuleRepository\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.router.state.StateRouterFactory\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.model.BuiltinServiceDetector\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.model.ScopeModelInitializer\\E"
+      },
+      {
+        "pattern": "\\QMETA-INF/services/org.apache.dubbo.common.extension.LoadingStrategy\\E"
+      },
+      {
+        "pattern": "\\Qdubbo.properties\\E"
+      },
+      {
+        "pattern": "\\Qlog4j.properties\\E"
+      },
+      {
+        "pattern": "\\Qorg/apache/dubbo/common/Version.class\\E"
+      },
+      {
+        "pattern": "\\Qorg/apache/dubbo/remoting/RemotingException.class\\E"
+      },
+      {
+        "pattern": "\\Qorg/apache/dubbo/remoting/Transporters.class\\E"
+      },
+      {
+        "pattern": "\\Qorg/apache/dubbo/remoting/exchange/Exchangers.class\\E"
+      }
+    ]
+  },
+  "bundles": []
+}
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/serialization-config.json b/dubbo-native-plugin/src/main/resources/META-INF/native-image/serialization-config.json
similarity index 100%
rename from dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/serialization-config.json
rename to dubbo-native-plugin/src/main/resources/META-INF/native-image/serialization-config.json
diff --git a/pom.xml b/pom.xml
index 8ac4631..5a6b419 100644
--- a/pom.xml
+++ b/pom.xml
@@ -155,6 +155,7 @@
         <module>dubbo-spring-boot</module>
         <module>dubbo-native</module>
         <module>dubbo-test</module>
+        <module>dubbo-native-plugin</module>
     </modules>
 
     <dependencyManagement>