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>