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 2023/02/26 07:14:18 UTC
[dubbo] branch 3.2 updated: Dubbo maven plugin with native (#11540)
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.2 by this push:
new 9497802ec3 Dubbo maven plugin with native (#11540)
9497802ec3 is described below
commit 9497802ec338b4dde815c98546a8efbe8ee31873
Author: huazhongming <cr...@gmail.com>
AuthorDate: Sun Feb 26 15:14:11 2023 +0800
Dubbo maven plugin with native (#11540)
* ADD dubbo-maven-plugin
* add dubbo-maven-plugin module
Signed-off-by: crazyhzm <cr...@gmail.com>
* fix license and compiler error
Signed-off-by: crazyhzm <cr...@gmail.com>
* fix license and ci error
Signed-off-by: crazyhzm <cr...@gmail.com>
* fix ci error
Signed-off-by: crazyhzm <cr...@gmail.com>
* Remove proxy-config, hard code
Signed-off-by: crazyhzm <cr...@gmail.com>
* ignoredModulesInDubboAll
Signed-off-by: crazyhzm <cr...@gmail.com>
* throw exception for generated adaptive class sources
Signed-off-by: crazyhzm <cr...@gmail.com>
---------
Signed-off-by: crazyhzm <cr...@gmail.com>
Co-authored-by: Albumen Kevin <jh...@gmail.com>
---
.github/workflows/build-and-test-pr.yml | 8 +-
.github/workflows/build-and-test-scheduled-3.1.yml | 8 +-
.github/workflows/build-and-test-scheduled-3.2.yml | 8 +-
.github/workflows/release-test.yml | 8 +-
.gitignore | 5 -
.licenserc.yaml | 15 +
.../java/org/apache/dubbo/common/utils/Assert.java | 12 +
.../dubbo-demo-native-consumer/pom.xml | 90 +-
.../META-INF/native-image/proxy-config.json | 7 +
.../dubbo-demo-native-provider/pom.xml | 93 +-
dubbo-distribution/dubbo-bom/pom.xml | 6 +
dubbo-maven-plugin/pom.xml | 109 +
.../dubbo/maven/plugin/aot/AbstractAotMojo.java | 219 ++
.../plugin/aot/AbstractDependencyFilterMojo.java | 172 ++
.../dubbo/maven/plugin/aot/CommandLineBuilder.java | 136 +
.../dubbo/maven/plugin/aot/DependencyFilter.java | 83 +
.../maven/plugin/aot/DubboProcessAotMojo.java | 138 +
.../org/apache/dubbo/maven/plugin/aot/Exclude.java | 26 +
.../dubbo/maven/plugin/aot/ExcludeFilter.java | 50 +
.../maven/plugin/aot/FilterableDependency.java | 70 +
.../org/apache/dubbo/maven/plugin/aot/Include.java | 26 +
.../dubbo/maven/plugin/aot/IncludeFilter.java | 46 +
.../aot/JavaCompilerPluginConfiguration.java | 107 +
.../dubbo/maven/plugin/aot/JavaExecutable.java | 71 +
.../maven/plugin/aot/JavaProcessExecutor.java | 102 +
.../maven/plugin/aot/MatchingGroupIdFilter.java | 47 +
.../dubbo/maven/plugin/aot/RunArguments.java | 68 +
.../apache/dubbo/maven/plugin/aot/RunProcess.java | 169 ++
.../META-INF/native-image/jni-config.json | 2 +
.../META-INF/native-image/proxy-config.json | 3 +
.../META-INF/native-image/reflect-config.json | 2925 ++++++++++++++++++++
.../META-INF/native-image/resource-config.json | 169 ++
.../native-image/serialization-config.json | 2 +
.../metrics/MetricsReporterFactory$Adaptive.java | 33 -
.../common/threadpool/ThreadPool$Adaptive.java | 30 -
.../IsolationExecutorSupportFactory$Adaptive.java | 33 -
dubbo-native/pom.xml | 40 -
.../generate/ClassSourceFinder.java} | 6 +-
.../{utils => aot/generate}/CodeGenerator.java | 23 +-
.../metrics/MetricsReporterFactory$Adaptive.java | 33 -
.../common/serialize/Serialization$Adaptive.java | 45 -
.../common/threadpool/ThreadPool$Adaptive.java | 30 -
.../report/MetadataReportFactory$Adaptive.java | 33 -
.../dubbo/monitor/MonitorFactory$Adaptive.java | 30 -
.../dubbo/registry/RegistryFactory$Adaptive.java | 30 -
.../org/apache/dubbo/remoting/Codec$Adaptive.java | 41 -
.../org/apache/dubbo/remoting/Codec2$Adaptive.java | 41 -
.../apache/dubbo/remoting/Dispatcher$Adaptive.java | 30 -
.../dubbo/remoting/Transporter$Adaptive.java | 39 -
.../pu/PortUnificationTransporter$Adaptive.java | 39 -
.../remoting/exchange/Exchanger$Adaptive.java | 39 -
.../org/apache/dubbo/rpc/Protocol$Adaptive.java | 49 -
.../apache/dubbo/rpc/ProxyFactory$Adaptive.java | 50 -
.../apache/dubbo/rpc/cluster/Cluster$Adaptive.java | 37 -
.../rpc/cluster/ConfiguratorFactory$Adaptive.java | 30 -
.../dubbo/rpc/cluster/LoadBalance$Adaptive.java | 31 -
.../dubbo/rpc/cluster/RouterFactory$Adaptive.java | 30 -
.../router/state/StateRouterFactory$Adaptive.java | 30 -
.../IsolationExecutorSupportFactory$Adaptive.java | 33 -
dubbo-test/dubbo-dependencies-all/pom.xml | 5 +
.../java/org/apache/dubbo/dependency/FileTest.java | 1 +
pom.xml | 16 +
62 files changed, 4859 insertions(+), 1048 deletions(-)
diff --git a/.github/workflows/build-and-test-pr.yml b/.github/workflows/build-and-test-pr.yml
index 3dd5536095..1d0174dfd5 100644
--- a/.github/workflows/build-and-test-pr.yml
+++ b/.github/workflows/build-and-test-pr.yml
@@ -431,8 +431,8 @@ jobs:
- name: "Compile and run Dubbo demo for native (Linux)"
run: |
cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider
- ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true
- nohup ./target/demo-native-provider &
+ ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile
+ nohup ./target/dubbo-demo-native-provider &
cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer
- ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true
- ./target/demo-native-consumer
+ ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile
+ ./target/dubbo-demo-native-consumer
diff --git a/.github/workflows/build-and-test-scheduled-3.1.yml b/.github/workflows/build-and-test-scheduled-3.1.yml
index eebfdcc395..7b1d67449f 100644
--- a/.github/workflows/build-and-test-scheduled-3.1.yml
+++ b/.github/workflows/build-and-test-scheduled-3.1.yml
@@ -395,8 +395,8 @@ jobs:
- name: "Compile and run Dubbo demo for native (Linux)"
run: |
cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider
- ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true
- nohup ./target/demo-native-provider &
+ ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile
+ nohup ./target/dubbo-demo-native-provider &
cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer
- ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true
- ./target/demo-native-consumer
+ ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile
+ ./target/dubbo-demo-native-consumer
diff --git a/.github/workflows/build-and-test-scheduled-3.2.yml b/.github/workflows/build-and-test-scheduled-3.2.yml
index 5c8c43dd34..26593e2dc1 100644
--- a/.github/workflows/build-and-test-scheduled-3.2.yml
+++ b/.github/workflows/build-and-test-scheduled-3.2.yml
@@ -395,8 +395,8 @@ jobs:
- name: "Compile and run Dubbo demo for native (Linux)"
run: |
cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider
- ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true
- nohup ./target/demo-native-provider &
+ ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile
+ nohup ./target/dubbo-demo-native-provider &
cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer
- ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true
- ./target/demo-native-consumer
+ ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile
+ ./target/dubbo-demo-native-consumer
diff --git a/.github/workflows/release-test.yml b/.github/workflows/release-test.yml
index 17c591e6c8..08fbec1abc 100644
--- a/.github/workflows/release-test.yml
+++ b/.github/workflows/release-test.yml
@@ -374,8 +374,8 @@ jobs:
- name: "Compile and run Dubbo demo for native (Linux)"
run: |
cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider
- ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true
- nohup ./target/demo-native-provider &
+ ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile
+ nohup ./target/dubbo-demo-native-provider &
cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer
- ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true
- ./target/demo-native-consumer
+ ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile
+ ./target/dubbo-demo-native-consumer
diff --git a/.gitignore b/.gitignore
index 4489022701..1f1a579238 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,8 +48,3 @@ dubbo-demo/dubbo-demo-triple/build/*
# global registry center
.tmp
-dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image
-dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/generated
-dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image
-dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/generated
-
diff --git a/.licenserc.yaml b/.licenserc.yaml
index 3e6ecd2baf..f28b16a727 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -79,6 +79,21 @@ header:
- 'dubbo-test/dubbo-test-common/src/main/java/org/apache/dubbo/test/common/utils/TestSocketUtils.java'
- 'dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriHttp2RemoteFlowController.java'
- 'dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/serial/SerializingExecutor.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/AbstractAotMojo.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/AbstractDependencyFilterMojo.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/CommandLineBuilder.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/DependencyFilter.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/Exclude.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/ExcludeFilter.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/FilterableDependency.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/Include.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/IncludeFilter.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaCompilerPluginConfiguration.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaExecutable.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaProcessExecutor.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/MatchingGroupIdFilter.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/RunArguments.java'
+ - 'dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/RunProcess.java'
comment: on-failure
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/Assert.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/Assert.java
index 42c7166c2c..9c5ec040ac 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/Assert.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/Assert.java
@@ -17,6 +17,8 @@
package org.apache.dubbo.common.utils;
+import java.util.function.Supplier;
+
public abstract class Assert {
protected Assert() {
@@ -46,4 +48,14 @@ public abstract class Assert {
}
}
+ public static void assertTrue(boolean expression, Supplier<String> messageSupplier) {
+ if (!expression) {
+ throw new IllegalStateException(nullSafeGet(messageSupplier));
+ }
+ }
+
+ private static String nullSafeGet(Supplier<String> messageSupplier) {
+ return (messageSupplier != null ? messageSupplier.get() : null);
+ }
+
}
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 ca585c6368..279701893a 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
@@ -59,10 +59,6 @@
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-remoting-netty4</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-serialization-hessian2</artifactId>
- </dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-serialization-fastjson2</artifactId>
@@ -94,17 +90,6 @@
</dependencies>
<profiles>
-
- <profile>
- <id>dev</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <properties>
- <profileActive>dev</profileActive>
- </properties>
- </profile>
-
<profile>
<id>native</id>
<properties>
@@ -114,13 +99,16 @@
<plugins>
<plugin>
<groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-native-plugin</artifactId>
+ <artifactId>dubbo-maven-plugin</artifactId>
<version>${project.version}</version>
+ <configuration>
+ <mainClass>com.apache.dubbo.demo.graalvm.consumer.Application</mainClass>
+ </configuration>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
- <goal>generate</goal>
+ <goal>dubbo-process-aot</goal>
</goals>
</execution>
</executions>
@@ -144,69 +132,19 @@
</plugin>
<plugin>
- <groupId>org.graalvm.nativeimage</groupId>
- <artifactId>native-image-maven-plugin</artifactId>
- <version>21.2.0</version>
- <executions>
- <execution>
- <goals>
- <goal>native-image</goal>
- </goals>
- <phase>package</phase>
- </execution>
- </executions>
+ <groupId>org.graalvm.buildtools</groupId>
+ <artifactId>native-maven-plugin</artifactId>
+ <version>0.9.19</version>
<configuration>
- <skip>false</skip>
- <imageName>demo-native-consumer</imageName>
+ <classesDirectory>${project.build.outputDirectory}</classesDirectory>
+ <metadataRepository>
+ <enabled>true</enabled>
+ </metadataRepository>
+ <requiredVersion>22.3</requiredVersion>
<mainClass>com.apache.dubbo.demo.graalvm.consumer.Application</mainClass>
- <buildArgs>
- --no-fallback
-
- --initialize-at-build-time=org.slf4j.MDC
- --initialize-at-build-time=org.apache.log4j.MDC
- --initialize-at-build-time=org.slf4j.LoggerFactory
- --initialize-at-build-time=org.slf4j.impl.StaticLoggerBinder
- --initialize-at-build-time=org.apache.log4j.helpers.Loader
- --initialize-at-build-time=org.apache.log4j.Logger
- --initialize-at-build-time=org.apache.log4j.helpers.LogLog
- --initialize-at-build-time=org.apache.log4j.LogManager
- --initialize-at-build-time=org.apache.log4j.spi.LoggingEvent
- --initialize-at-build-time=org.slf4j.impl.Log4jLoggerFactory
- --initialize-at-build-time=org.slf4j.impl.Log4jLoggerAdapter
- --initialize-at-build-time=org.eclipse.collections.api.factory.Sets
- --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
- --initialize-at-run-time=io.netty.channel.epoll.EpollEventArray
- --initialize-at-run-time=io.netty.channel.DefaultFileRegion
- --initialize-at-run-time=io.netty.channel.kqueue.KQueueEventArray
- --initialize-at-run-time=io.netty.channel.kqueue.KQueueEventLoop
- --initialize-at-run-time=io.netty.channel.kqueue.Native
- --initialize-at-run-time=io.netty.channel.unix.Errors
- --initialize-at-run-time=io.netty.channel.unix.IovArray
- --initialize-at-run-time=io.netty.channel.unix.Limits
- --initialize-at-run-time=io.netty.channel.unix.Socket
- --initialize-at-run-time=io.netty.channel.ChannelHandlerMask
- --initialize-at-run-time=io.netty.internal.tcnative.CertificateVerifier
- --initialize-at-run-time=io.netty.internal.tcnative.AsyncSSLPrivateKeyMethod
- --initialize-at-run-time=io.netty.handler.ssl.ReferenceCountedOpenSslEngine
- --initialize-at-run-time=io.netty.handler.ssl.OpenSslPrivateKeyMethod
- --initialize-at-run-time=io.netty.internal.tcnative.CertificateVerifier
- --initialize-at-run-time=io.netty.internal.tcnative.SSL
- --initialize-at-run-time=io.netty.handler.ssl.OpenSslAsyncPrivateKeyMethod
- --initialize-at-run-time=io.netty.internal.tcnative.SSLPrivateKeyMethod
-
- --report-unsupported-elements-at-runtime
- --allow-incomplete-classpath
- --enable-url-protocols=http
- -H:+ReportExceptionStackTraces
- -H:+AllowJRTFileSystem
- </buildArgs>
</configuration>
</plugin>
+
</plugins>
</build>
</profile>
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
new file mode 100644
index 0000000000..49f2fc2d51
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/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/pom.xml b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
index 4dff085cc6..b35faa8482 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
@@ -58,10 +58,6 @@
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-remoting-netty4</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-serialization-hessian2</artifactId>
- </dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-serialization-fastjson2</artifactId>
@@ -94,17 +90,6 @@
<profiles>
-
- <profile>
- <id>dev</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <properties>
- <profileActive>dev</profileActive>
- </properties>
- </profile>
-
<profile>
<id>native</id>
<properties>
@@ -115,13 +100,16 @@
<plugins>
<plugin>
<groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-native-plugin</artifactId>
+ <artifactId>dubbo-maven-plugin</artifactId>
<version>${project.version}</version>
+ <configuration>
+ <mainClass>org.apache.dubbo.demo.graalvm.provider.Application</mainClass>
+ </configuration>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
- <goal>generate</goal>
+ <goal>dubbo-process-aot</goal>
</goals>
</execution>
</executions>
@@ -129,7 +117,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>3.10.1</version>
+ <version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
@@ -143,71 +131,20 @@
</compilerArguments>
</configuration>
</plugin>
-
<plugin>
- <groupId>org.graalvm.nativeimage</groupId>
- <artifactId>native-image-maven-plugin</artifactId>
- <version>21.2.0</version>
- <executions>
- <execution>
- <goals>
- <goal>native-image</goal>
- </goals>
- <phase>package</phase>
- </execution>
- </executions>
+ <groupId>org.graalvm.buildtools</groupId>
+ <artifactId>native-maven-plugin</artifactId>
+ <version>0.9.19</version>
<configuration>
- <skip>false</skip>
- <imageName>demo-native-provider</imageName>
+ <classesDirectory>${project.build.outputDirectory}</classesDirectory>
+ <metadataRepository>
+ <enabled>true</enabled>
+ </metadataRepository>
+ <requiredVersion>22.3</requiredVersion>
<mainClass>org.apache.dubbo.demo.graalvm.provider.Application</mainClass>
- <buildArgs>
- --no-fallback
-
- --initialize-at-build-time=org.slf4j.MDC
- --initialize-at-build-time=org.apache.log4j.MDC
- --initialize-at-build-time=org.slf4j.LoggerFactory
- --initialize-at-build-time=org.slf4j.impl.StaticLoggerBinder
- --initialize-at-build-time=org.apache.log4j.helpers.Loader
- --initialize-at-build-time=org.apache.log4j.Logger
- --initialize-at-build-time=org.apache.log4j.helpers.LogLog
- --initialize-at-build-time=org.apache.log4j.LogManager
- --initialize-at-build-time=org.apache.log4j.spi.LoggingEvent
- --initialize-at-build-time=org.slf4j.impl.Log4jLoggerFactory
- --initialize-at-build-time=org.slf4j.impl.Log4jLoggerAdapter
- --initialize-at-build-time=org.eclipse.collections.api.factory.Sets
- --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
- --initialize-at-run-time=io.netty.channel.epoll.EpollEventArray
- --initialize-at-run-time=io.netty.channel.DefaultFileRegion
- --initialize-at-run-time=io.netty.channel.kqueue.KQueueEventArray
- --initialize-at-run-time=io.netty.channel.kqueue.KQueueEventLoop
- --initialize-at-run-time=io.netty.channel.kqueue.Native
- --initialize-at-run-time=io.netty.channel.unix.Errors
- --initialize-at-run-time=io.netty.channel.unix.IovArray
- --initialize-at-run-time=io.netty.channel.unix.Limits
- --initialize-at-run-time=io.netty.channel.unix.Socket
- --initialize-at-run-time=io.netty.channel.ChannelHandlerMask
- --initialize-at-run-time=io.netty.internal.tcnative.CertificateVerifier
- --initialize-at-run-time=io.netty.internal.tcnative.AsyncSSLPrivateKeyMethod
- --initialize-at-run-time=io.netty.handler.ssl.ReferenceCountedOpenSslEngine
- --initialize-at-run-time=io.netty.handler.ssl.OpenSslPrivateKeyMethod
- --initialize-at-run-time=io.netty.internal.tcnative.CertificateVerifier
- --initialize-at-run-time=io.netty.internal.tcnative.SSL
- --initialize-at-run-time=io.netty.handler.ssl.OpenSslAsyncPrivateKeyMethod
- --initialize-at-run-time=io.netty.internal.tcnative.SSLPrivateKeyMethod
-
- --report-unsupported-elements-at-runtime
- --allow-incomplete-classpath
- --enable-url-protocols=http
- -H:+ReportExceptionStackTraces
- -H:+AllowJRTFileSystem
- </buildArgs>
</configuration>
</plugin>
+
</plugins>
</build>
diff --git a/dubbo-distribution/dubbo-bom/pom.xml b/dubbo-distribution/dubbo-bom/pom.xml
index 4b5b5fcd51..988e6cc411 100644
--- a/dubbo-distribution/dubbo-bom/pom.xml
+++ b/dubbo-distribution/dubbo-bom/pom.xml
@@ -282,6 +282,12 @@
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-maven-plugin</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
<!-- plugin -->
<dependency>
<groupId>org.apache.dubbo</groupId>
diff --git a/dubbo-maven-plugin/pom.xml b/dubbo-maven-plugin/pom.xml
new file mode 100644
index 0000000000..e15d57d96f
--- /dev/null
+++ b/dubbo-maven-plugin/pom.xml
@@ -0,0 +1,109 @@
+<!--
+ 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">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>dubbo-parent</artifactId>
+ <groupId>org.apache.dubbo</groupId>
+ <version>${revision}</version>
+ </parent>
+
+ <artifactId>dubbo-maven-plugin</artifactId>
+
+ <properties>
+ </properties>
+ <description>Dubbo Maven Plugin</description>
+ <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.8.7</version>
+ <scope>provided</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-annotations</artifactId>
+ <version>3.7.1</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-common-artifact-filters</artifactId>
+ <version>3.2.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-common</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.11.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>3.7.1</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>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>8</source>
+ <target>8</target>
+ </configuration>
+ </plugin>
+ </plugins>
+
+ </build>
+
+</project>
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/AbstractAotMojo.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/AbstractAotMojo.java
new file mode 100644
index 0000000000..efccafd249
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/AbstractAotMojo.java
@@ -0,0 +1,219 @@
+/*
+ * Copyright 2012-2022 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
+import org.apache.maven.toolchain.ToolchainManager;
+
+import javax.tools.Diagnostic;
+import javax.tools.DiagnosticListener;
+import javax.tools.JavaCompiler;
+import javax.tools.JavaFileObject;
+import javax.tools.StandardJavaFileManager;
+import javax.tools.ToolProvider;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Abstract base class for AOT processing MOJOs.
+ *
+ * @author Phillip Webb
+ * @author Scott Frederick
+ */
+public abstract class AbstractAotMojo extends AbstractDependencyFilterMojo {
+
+ /**
+ * The current Maven session. This is used for toolchain manager API calls.
+ */
+ @Parameter(defaultValue = "${session}", readonly = true)
+ private MavenSession session;
+
+ /**
+ * The toolchain manager to use to locate a custom JDK.
+ */
+ @Component
+ private ToolchainManager toolchainManager;
+
+ /**
+ * Skip the execution.
+ */
+ @Parameter(property = "dubbo.aot.skip", defaultValue = "false")
+ private boolean skip;
+
+ /**
+ * List of JVM system properties to pass to the AOT process.
+ */
+ @Parameter
+ private Map<String, String> systemPropertyVariables;
+
+ /**
+ * JVM arguments that should be associated with the AOT process. On command line, make
+ * sure to wrap multiple values between quotes.
+ */
+ @Parameter(property = "dubbo.aot.jvmArguments")
+ private String jvmArguments;
+
+
+ /**
+ * Arguments that should be provided to the AOT compile process. On command line, make
+ * sure to wrap multiple values between quotes.
+ */
+ @Parameter(property = "dubbo.aot.compilerArguments")
+ private String compilerArguments;
+
+ @Override
+ public void execute() throws MojoExecutionException, MojoFailureException {
+ if (this.skip) {
+ getLog().debug("Skipping AOT execution as per configuration");
+ return;
+ }
+ try {
+ executeAot();
+ } catch (Exception ex) {
+ throw new MojoExecutionException(ex.getMessage(), ex);
+ }
+ }
+
+ protected abstract void executeAot() throws Exception;
+
+ protected void generateAotAssets(URL[] classPath, String processorClassName, String... arguments) throws Exception {
+ List<String> command = CommandLineBuilder.forMainClass(processorClassName)
+ .withSystemProperties(this.systemPropertyVariables)
+ .withJvmArguments(new RunArguments(this.jvmArguments).asArray()).withClasspath(classPath)
+ .withArguments(arguments).build();
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("Generating AOT assets using command: " + command);
+ }
+ JavaProcessExecutor processExecutor = new JavaProcessExecutor(this.session, this.toolchainManager);
+ getLog().info("dir: " + this.project.getBasedir());
+ processExecutor.run(this.project.getBasedir(), command, Collections.emptyMap());
+ }
+
+ protected final void compileSourceFiles(URL[] classPath, File sourcesDirectory, File outputDirectory)
+ throws Exception {
+ List<File> sourceFiles;
+ try (Stream<Path> pathStream = Files.walk(sourcesDirectory.toPath())) {
+ sourceFiles = pathStream.filter(Files::isRegularFile).map(Path::toFile).collect(Collectors.toList());
+ }
+ if (sourceFiles.isEmpty()) {
+ return;
+ }
+ JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+ try (StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null)) {
+ JavaCompilerPluginConfiguration compilerConfiguration = new JavaCompilerPluginConfiguration(this.project);
+ List<String> options = new ArrayList<>();
+ options.add("-cp");
+ options.add(CommandLineBuilder.ClasspathBuilder.build(Arrays.asList(classPath)));
+ options.add("-d");
+ options.add(outputDirectory.toPath().toAbsolutePath().toString());
+ String releaseVersion = compilerConfiguration.getReleaseVersion();
+ if (releaseVersion != null) {
+ options.add("--release");
+ options.add(releaseVersion);
+ }
+ else {
+ options.add("--source");
+ options.add(compilerConfiguration.getSourceMajorVersion());
+ options.add("--target");
+ options.add(compilerConfiguration.getTargetMajorVersion());
+ }
+ options.addAll(new RunArguments(this.compilerArguments).getArgs());
+ Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(sourceFiles);
+ Errors errors = new Errors();
+ JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, errors, options, null, compilationUnits);
+ boolean result = task.call();
+ if (!result || errors.hasReportedErrors()) {
+ throw new IllegalStateException("Unable to compile generated source" + errors);
+ }
+ }
+ }
+
+ protected final List<URL> getClassPath(File[] directories, ArtifactsFilter... artifactFilters)
+ throws MojoExecutionException {
+ List<URL> urls = new ArrayList<>();
+ Arrays.stream(directories).map(this::toURL).forEach(urls::add);
+ urls.addAll(getDependencyURLs(artifactFilters));
+ return urls;
+ }
+
+ protected final void copyAll(Path from, Path to) throws IOException {
+ if (!Files.exists(from)) {
+ return;
+ }
+ List<Path> files;
+ try (Stream<Path> pathStream = Files.walk(from)) {
+ files = pathStream.filter(Files::isRegularFile).collect(Collectors.toList());
+ }
+ for (Path file : files) {
+ String relativeFileName = file.subpath(from.getNameCount(), file.getNameCount()).toString();
+ getLog().debug("Copying '" + relativeFileName + "' to " + to);
+ Path target = to.resolve(relativeFileName);
+ Files.createDirectories(target.getParent());
+ Files.copy(file, target, StandardCopyOption.REPLACE_EXISTING);
+ }
+ }
+
+ /**
+ * {@link DiagnosticListener} used to collect errors.
+ */
+ protected static class Errors implements DiagnosticListener<JavaFileObject> {
+
+ private final StringBuilder message = new StringBuilder();
+
+ @Override
+ public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
+ if (diagnostic.getKind() == Diagnostic.Kind.ERROR) {
+ this.message.append("\n");
+ this.message.append(diagnostic.getMessage(Locale.getDefault()));
+ if (diagnostic.getSource() != null) {
+ this.message.append(" ");
+ this.message.append(diagnostic.getSource().getName());
+ this.message.append(" ");
+ this.message.append(diagnostic.getLineNumber()).append(":").append(diagnostic.getColumnNumber());
+ }
+ }
+ }
+
+ boolean hasReportedErrors() {
+ return this.message.length() > 0;
+ }
+
+ @Override
+ public String toString() {
+ return this.message.toString();
+ }
+
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/AbstractDependencyFilterMojo.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/AbstractDependencyFilterMojo.java
new file mode 100644
index 0000000000..84ba4ac26c
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/AbstractDependencyFilterMojo.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2012-2022 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.artifact.filter.collection.AbstractArtifactFeatureFilter;
+import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
+import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
+import org.apache.maven.shared.artifact.filter.collection.FilterArtifacts;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/**
+ * A base mojo filtering the dependencies of the project.
+ *
+ * @author Stephane Nicoll
+ * @author David Turanski
+ */
+public abstract class AbstractDependencyFilterMojo extends AbstractMojo {
+
+ /**
+ * The Maven project.
+ */
+ @Parameter(defaultValue = "${project}", readonly = true, required = true)
+ protected MavenProject project;
+
+ /**
+ * Collection of artifact definitions to include. The {@link Include} element defines
+ * mandatory {@code groupId} and {@code artifactId} properties and an optional
+ * mandatory {@code groupId} and {@code artifactId} properties and an optional
+ * {@code classifier} property.
+ */
+ @Parameter(property = "dubbo.includes")
+ private List<Include> includes;
+
+ /**
+ * Collection of artifact definitions to exclude. The {@link Exclude} element defines
+ * mandatory {@code groupId} and {@code artifactId} properties and an optional
+ * {@code classifier} property.
+ */
+ @Parameter(property = "dubbo.excludes")
+ private List<Exclude> excludes;
+
+ /**
+ * Comma separated list of groupId names to exclude (exact match).
+ */
+ @Parameter(property = "dubbo.excludeGroupIds", defaultValue = "")
+ private String excludeGroupIds;
+
+ protected void setExcludes(List<Exclude> excludes) {
+ this.excludes = excludes;
+ }
+
+ protected void setIncludes(List<Include> includes) {
+ this.includes = includes;
+ }
+
+ protected void setExcludeGroupIds(String excludeGroupIds) {
+ this.excludeGroupIds = excludeGroupIds;
+ }
+
+ protected List<URL> getDependencyURLs(ArtifactsFilter... additionalFilters) throws MojoExecutionException {
+ Set<Artifact> artifacts = filterDependencies(this.project.getArtifacts(), additionalFilters);
+ List<URL> urls = new ArrayList<>();
+ for (Artifact artifact : artifacts) {
+ if (artifact.getFile() != null) {
+ urls.add(toURL(artifact.getFile()));
+ }
+ }
+ return urls;
+ }
+
+ protected final Set<Artifact> filterDependencies(Set<Artifact> dependencies, ArtifactsFilter... additionalFilters)
+ throws MojoExecutionException {
+ try {
+ Set<Artifact> filtered = new LinkedHashSet<>(dependencies);
+ filtered.retainAll(getFilters(additionalFilters).filter(dependencies));
+ return filtered;
+ }
+ catch (ArtifactFilterException ex) {
+ throw new MojoExecutionException(ex.getMessage(), ex);
+ }
+ }
+
+ protected URL toURL(File file) {
+ try {
+ return file.toURI().toURL();
+ }
+ catch (MalformedURLException ex) {
+ throw new IllegalStateException("Invalid URL for " + file, ex);
+ }
+ }
+
+ /**
+ * Return artifact filters configured for this MOJO.
+ * @param additionalFilters optional additional filters to apply
+ * @return the filters
+ */
+ private FilterArtifacts getFilters(ArtifactsFilter... additionalFilters) {
+ FilterArtifacts filters = new FilterArtifacts();
+ for (ArtifactsFilter additionalFilter : additionalFilters) {
+ filters.addFilter(additionalFilter);
+ }
+ filters.addFilter(new MatchingGroupIdFilter(cleanFilterConfig(this.excludeGroupIds)));
+ if (this.includes != null && !this.includes.isEmpty()) {
+ filters.addFilter(new IncludeFilter(this.includes));
+ }
+ if (this.excludes != null && !this.excludes.isEmpty()) {
+ filters.addFilter(new ExcludeFilter(this.excludes));
+ }
+ return filters;
+ }
+
+ private String cleanFilterConfig(String content) {
+ if (content == null || content.trim().isEmpty()) {
+ return "";
+ }
+ StringBuilder cleaned = new StringBuilder();
+ StringTokenizer tokenizer = new StringTokenizer(content, ",");
+ while (tokenizer.hasMoreElements()) {
+ cleaned.append(tokenizer.nextToken().trim());
+ if (tokenizer.hasMoreElements()) {
+ cleaned.append(",");
+ }
+ }
+ return cleaned.toString();
+ }
+
+ /**
+ * {@link ArtifactFilter} to exclude test scope dependencies.
+ */
+ protected static class ExcludeTestScopeArtifactFilter extends AbstractArtifactFeatureFilter {
+
+ ExcludeTestScopeArtifactFilter() {
+ super("", Artifact.SCOPE_TEST);
+ }
+
+ @Override
+ protected String getArtifactFeature(Artifact artifact) {
+ return artifact.getScope();
+ }
+
+ }
+
+}
+
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/CommandLineBuilder.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/CommandLineBuilder.java
new file mode 100644
index 0000000000..8c759d2d4e
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/CommandLineBuilder.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2012-2022 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import java.io.File;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * Helper class to build the command-line arguments of a java process.
+ *
+ * @author Stephane Nicoll
+ */
+final class CommandLineBuilder {
+
+ private final List<String> options = new ArrayList<>();
+
+ private final List<URL> classpathElements = new ArrayList<>();
+
+ private final String mainClass;
+
+ private final List<String> arguments = new ArrayList<>();
+
+ private CommandLineBuilder(String mainClass) {
+ this.mainClass = mainClass;
+ }
+
+ static CommandLineBuilder forMainClass(String mainClass) {
+ return new CommandLineBuilder(mainClass);
+ }
+
+ CommandLineBuilder withJvmArguments(String... jvmArguments) {
+ if (jvmArguments != null) {
+ this.options.addAll(Arrays.stream(jvmArguments).filter(Objects::nonNull).collect(Collectors.toList()));
+ }
+ return this;
+ }
+
+ CommandLineBuilder withSystemProperties(Map<String, String> systemProperties) {
+ if (systemProperties != null) {
+ systemProperties.entrySet().stream().map((e) -> SystemPropertyFormatter.format(e.getKey(), e.getValue()))
+ .forEach(this.options::add);
+ }
+ return this;
+ }
+
+ CommandLineBuilder withClasspath(URL... elements) {
+ this.classpathElements.addAll(Arrays.asList(elements));
+ return this;
+ }
+
+ CommandLineBuilder withArguments(String... arguments) {
+ if (arguments != null) {
+ this.arguments.addAll(Arrays.stream(arguments).filter(Objects::nonNull).collect(Collectors.toList()));
+ }
+ return this;
+ }
+
+ List<String> build() {
+ List<String> commandLine = new ArrayList<>();
+ if (!this.options.isEmpty()) {
+ commandLine.addAll(this.options);
+ }
+ if (!this.classpathElements.isEmpty()) {
+ commandLine.add("-cp");
+ commandLine.add(ClasspathBuilder.build(this.classpathElements));
+ }
+ commandLine.add(this.mainClass);
+ if (!this.arguments.isEmpty()) {
+ commandLine.addAll(this.arguments);
+ }
+ return commandLine;
+ }
+
+ static class ClasspathBuilder {
+
+ static String build(List<URL> classpathElements) {
+ StringBuilder classpath = new StringBuilder();
+ for (URL element : classpathElements) {
+ if (classpath.length() > 0) {
+ classpath.append(File.pathSeparator);
+ }
+ classpath.append(toFile(element));
+ }
+ return classpath.toString();
+ }
+
+ private static File toFile(URL element) {
+ try {
+ return new File(element.toURI());
+ }
+ catch (URISyntaxException ex) {
+ throw new IllegalArgumentException(ex);
+ }
+ }
+
+ }
+
+ /**
+ * Format System properties.
+ */
+ private static class SystemPropertyFormatter {
+
+ static String format(String key, String value) {
+ if (key == null) {
+ return "";
+ }
+ if (value == null || value.isEmpty()) {
+ return String.format("-D%s", key);
+ }
+ return String.format("-D%s=\"%s\"", key, value);
+ }
+
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/DependencyFilter.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/DependencyFilter.java
new file mode 100644
index 0000000000..54ea0a7147
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/DependencyFilter.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2012-2020 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.shared.artifact.filter.collection.AbstractArtifactsFilter;
+import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
+import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Base class for {@link ArtifactsFilter} based on a {@link org.apache.dubbo.maven.plugin.aot.FilterableDependency} list.
+ *
+ * @author Stephane Nicoll
+ * @author David Turanski
+ */
+public abstract class DependencyFilter extends AbstractArtifactsFilter {
+
+ private final List<? extends FilterableDependency> filters;
+
+ /**
+ * Create a new instance with the list of {@link FilterableDependency} instance(s) to
+ * use.
+ * @param dependencies the source dependencies
+ */
+ public DependencyFilter(List<? extends FilterableDependency> dependencies) {
+ this.filters = dependencies;
+ }
+
+ @Override
+ public Set<Artifact> filter(Set<Artifact> artifacts) throws ArtifactFilterException {
+ Set<Artifact> result = new HashSet<>();
+ for (Artifact artifact : artifacts) {
+ if (!filter(artifact)) {
+ result.add(artifact);
+ }
+ }
+ return result;
+ }
+
+ protected abstract boolean filter(Artifact artifact);
+
+ /**
+ * Check if the specified {@link Artifact} matches the
+ * specified {@link org.apache.dubbo.maven.plugin.aot.FilterableDependency}. Returns
+ * {@code true} if it should be excluded
+ * @param artifact the Maven {@link Artifact}
+ * @param dependency the {@link org.apache.dubbo.maven.plugin.aot.FilterableDependency}
+ * @return {@code true} if the artifact matches the dependency
+ */
+ protected final boolean equals(Artifact artifact, FilterableDependency dependency) {
+ if (!dependency.getGroupId().equals(artifact.getGroupId())) {
+ return false;
+ }
+ if (!dependency.getArtifactId().equals(artifact.getArtifactId())) {
+ return false;
+ }
+ return (dependency.getClassifier() == null
+ || artifact.getClassifier() != null && dependency.getClassifier().equals(artifact.getClassifier()));
+ }
+
+ protected final List<? extends FilterableDependency> getFilters() {
+ return this.filters;
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/DubboProcessAotMojo.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/DubboProcessAotMojo.java
new file mode 100644
index 0000000000..5b4f26b8b4
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/DubboProcessAotMojo.java
@@ -0,0 +1,138 @@
+/*
+ * 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.aot;
+
+
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.project.MavenProject;
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Mojo(name = "dubbo-process-aot", defaultPhase = LifecyclePhase.PREPARE_PACKAGE, threadSafe = true,
+ requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME,
+ requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME)
+public class DubboProcessAotMojo extends AbstractAotMojo {
+
+ private static final String AOT_PROCESSOR_CLASS_NAME = "org.apache.dubbo.aot.generate.CodeGenerator";
+
+ /**
+ * Directory containing the classes and resource files that should be packaged into
+ * the archive.
+ */
+ @Parameter(defaultValue = "${project.build.outputDirectory}", required = true)
+ private File classesDirectory;
+
+ /**
+ * Directory containing the generated sources.
+ */
+ @Parameter(defaultValue = "${project.build.directory}/dubbo-aot/main/sources", required = true)
+ private File generatedSources;
+
+ /**
+ * Directory containing the generated resources.
+ */
+ @Parameter(defaultValue = "${project.build.directory}/dubbo-aot/main/resources", required = true)
+ private File generatedResources;
+
+ /**
+ * Directory containing the generated classes.
+ */
+ @Parameter(defaultValue = "${project.build.directory}/dubbo-aot/main/classes", required = true)
+ private File generatedClasses;
+
+ /**
+ * Name of the main class to use as the source for the AOT process. If not specified
+ * the first compiled class found that contains a 'main' method will be used.
+ */
+ @Parameter(property = "dubbo.aot.main-class")
+ private String mainClass;
+
+
+ /**
+ * Application arguments that should be taken into account for AOT processing.
+ */
+ @Parameter
+ private String[] arguments;
+
+
+ @Override
+ protected void executeAot() throws Exception {
+ URL[] classPath = getClassPath().toArray(new URL[0]);
+ generateAotAssets(classPath, AOT_PROCESSOR_CLASS_NAME, getAotArguments(mainClass));
+ compileSourceFiles(classPath, this.generatedSources, this.classesDirectory);
+ copyNativeConfigFile(project);
+ copyAll(this.generatedResources.toPath(), this.classesDirectory.toPath());
+ copyAll(this.generatedClasses.toPath(), this.classesDirectory.toPath());
+ }
+
+ private String[] getAotArguments(String applicationClass) {
+ List<String> aotArguments = new ArrayList<>();
+ aotArguments.add(applicationClass);
+ aotArguments.add(this.generatedSources.toString());
+ aotArguments.add(this.generatedResources.toString());
+ aotArguments.add(this.generatedClasses.toString());
+ aotArguments.add(this.project.getGroupId());
+ aotArguments.add(this.project.getArtifactId());
+ aotArguments.addAll(new RunArguments(this.arguments).getArgs());
+ return aotArguments.toArray(new String[0]);
+ }
+
+ private List<URL> getClassPath() throws Exception {
+ File[] directories = new File[]{this.classesDirectory, this.generatedClasses};
+ return getClassPath(directories, new ExcludeTestScopeArtifactFilter());
+ }
+
+ private void copyNativeConfigFile(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 = this.getClass().getClassLoader().getResourceAsStream(nativeFile);
+ project.getResources().stream().findFirst().ifPresent(resource -> {
+ try {
+ String path = generatedResources + File.separator + "META-INF" + File.separator + "native-image" + File.separator
+ + File.separator + this.project.getGroupId() + File.separator + this.project.getArtifactId();
+ FileUtils.forceMkdir(new File(path));
+ String[] str = nativeFile.split("/");
+ File file = new File(path + File.separator + str[str.length - 1]);
+ if (!file.exists()) {
+ FileUtils.copyInputStreamToFile(is, file);
+ getLog().info("Copy native config file:" + file);
+ } else {
+ getLog().info("Skip copy config file:" + file);
+ }
+ } catch (Throwable ex) {
+ getLog().error("Copy native config file error:" + ex.getMessage());
+ }
+ });
+ });
+ }
+
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/Exclude.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/Exclude.java
new file mode 100644
index 0000000000..ce1910577d
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/Exclude.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2012-2019 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+/**
+ * A model for a dependency to exclude.
+ *
+ * @author Stephane Nicoll
+ */
+public class Exclude extends FilterableDependency {
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/ExcludeFilter.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/ExcludeFilter.java
new file mode 100644
index 0000000000..841c9a303b
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/ExcludeFilter.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2012-2019 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import org.apache.maven.artifact.Artifact;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * An {DependencyFilter} that filters out any artifact matching an {@link Exclude}.
+ *
+ * @author Stephane Nicoll
+ * @author David Turanski
+ */
+public class ExcludeFilter extends DependencyFilter {
+
+ public ExcludeFilter(Exclude... excludes) {
+ this(Arrays.asList(excludes));
+ }
+
+ public ExcludeFilter(List<Exclude> excludes) {
+ super(excludes);
+ }
+
+ @Override
+ protected boolean filter(Artifact artifact) {
+ for (FilterableDependency dependency : getFilters()) {
+ if (equals(artifact, dependency)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/FilterableDependency.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/FilterableDependency.java
new file mode 100644
index 0000000000..58521297d8
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/FilterableDependency.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2012-2019 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import org.apache.maven.plugins.annotations.Parameter;
+
+/**
+ * A model for a dependency to include or exclude.
+ *
+ * @author Stephane Nicoll
+ * @author David Turanski
+ */
+abstract class FilterableDependency {
+
+ /**
+ * The groupId of the artifact to exclude.
+ */
+ @Parameter(required = true)
+ private String groupId;
+
+ /**
+ * The artifactId of the artifact to exclude.
+ */
+ @Parameter(required = true)
+ private String artifactId;
+
+ /**
+ * The classifier of the artifact to exclude.
+ */
+ @Parameter
+ private String classifier;
+
+ String getGroupId() {
+ return this.groupId;
+ }
+
+ void setGroupId(String groupId) {
+ this.groupId = groupId;
+ }
+
+ String getArtifactId() {
+ return this.artifactId;
+ }
+
+ void setArtifactId(String artifactId) {
+ this.artifactId = artifactId;
+ }
+
+ String getClassifier() {
+ return this.classifier;
+ }
+
+ void setClassifier(String classifier) {
+ this.classifier = classifier;
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/Include.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/Include.java
new file mode 100644
index 0000000000..1e27fc97e8
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/Include.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2012-2019 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+/**
+ * A model for a dependency to include.
+ *
+ * @author David Turanski
+ */
+public class Include extends FilterableDependency {
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/IncludeFilter.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/IncludeFilter.java
new file mode 100644
index 0000000000..e2fd85014f
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/IncludeFilter.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2012-2019 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
+
+import java.util.List;
+
+/**
+ * An {@link ArtifactsFilter} that filters out any artifact not matching an
+ * {@link Include}.
+ *
+ * @author David Turanski
+ */
+public class IncludeFilter extends DependencyFilter {
+
+ public IncludeFilter(List<Include> includes) {
+ super(includes);
+ }
+
+ @Override
+ protected boolean filter(Artifact artifact) {
+ for (FilterableDependency dependency : getFilters()) {
+ if (equals(artifact, dependency)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaCompilerPluginConfiguration.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaCompilerPluginConfiguration.java
new file mode 100644
index 0000000000..5f842ff853
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaCompilerPluginConfiguration.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2012-2022 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+import java.util.Arrays;
+
+/**
+ * Provides access to the Maven Java Compiler plugin configuration.
+ *
+ * @author Scott Frederick
+ */
+class JavaCompilerPluginConfiguration {
+
+ private final MavenProject project;
+
+ JavaCompilerPluginConfiguration(MavenProject project) {
+ this.project = project;
+ }
+
+ String getSourceMajorVersion() {
+ String version = getConfigurationValue("source");
+
+ if (version == null) {
+ version = getPropertyValue("maven.compiler.source");
+ }
+
+ return majorVersionFor(version);
+ }
+
+ String getTargetMajorVersion() {
+ String version = getConfigurationValue("target");
+
+ if (version == null) {
+ version = getPropertyValue("maven.compiler.target");
+ }
+
+ return majorVersionFor(version);
+ }
+
+ String getReleaseVersion() {
+ String version = getConfigurationValue("release");
+
+ if (version == null) {
+ version = getPropertyValue("maven.compiler.release");
+ }
+
+ return majorVersionFor(version);
+ }
+
+ private String getConfigurationValue(String propertyName) {
+ Plugin plugin = this.project.getPlugin("org.apache.maven.plugins:maven-compiler-plugin");
+ if (plugin != null) {
+ Object pluginConfiguration = plugin.getConfiguration();
+ if (pluginConfiguration instanceof Xpp3Dom) {
+ return getNodeValue((Xpp3Dom)pluginConfiguration, propertyName);
+ }
+ }
+ return null;
+ }
+
+ private String getPropertyValue(String propertyName) {
+ if (this.project.getProperties().containsKey(propertyName)) {
+ return this.project.getProperties().get(propertyName).toString();
+ }
+ return null;
+ }
+
+ private String getNodeValue(Xpp3Dom dom, String... childNames) {
+ Xpp3Dom childNode = dom.getChild(childNames[0]);
+
+ if (childNode == null) {
+ return null;
+ }
+
+ if (childNames.length > 1) {
+ return getNodeValue(childNode, Arrays.copyOfRange(childNames, 1, childNames.length));
+ }
+
+ return childNode.getValue();
+ }
+
+ private String majorVersionFor(String version) {
+ if (version != null && version.startsWith("1.")) {
+ return version.substring("1.".length());
+ }
+ return version;
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaExecutable.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaExecutable.java
new file mode 100644
index 0000000000..d8bafe2e04
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaExecutable.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2012-2022 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+
+import org.apache.dubbo.common.utils.Assert;
+import org.apache.dubbo.common.utils.StringUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+
+/**
+ * Provides access to the java binary executable, regardless of OS.
+ *
+ * @author Phillip Webb
+ */
+public class JavaExecutable {
+
+ private final File file;
+
+ public JavaExecutable() {
+ String javaHome = System.getProperty("java.home");
+ Assert.assertTrue(StringUtils.isNotEmpty(javaHome), "Unable to find java executable due to missing 'java.home'");
+ this.file = findInJavaHome(javaHome);
+ }
+
+ private File findInJavaHome(String javaHome) {
+ File bin = new File(new File(javaHome), "bin");
+ File command = new File(bin, "java.exe");
+ command = command.exists() ? command : new File(bin, "java");
+ Assert.assertTrue(command.exists(), () -> "Unable to find java in " + javaHome);
+ return command;
+ }
+
+ /**
+ * Create a new {@link ProcessBuilder} that will run with the Java executable.
+ * @param arguments the command arguments
+ * @return a {@link ProcessBuilder}
+ */
+ public ProcessBuilder processBuilder(String... arguments) {
+ ProcessBuilder processBuilder = new ProcessBuilder(toString());
+ processBuilder.command().addAll(Arrays.asList(arguments));
+ return processBuilder;
+ }
+
+ @Override
+ public String toString() {
+ try {
+ return this.file.getCanonicalPath();
+ }
+ catch (IOException ex) {
+ throw new IllegalStateException(ex);
+ }
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaProcessExecutor.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaProcessExecutor.java
new file mode 100644
index 0000000000..7dda3cd3df
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/JavaProcessExecutor.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2012-2022 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.toolchain.Toolchain;
+import org.apache.maven.toolchain.ToolchainManager;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
+/**
+ * Ease the execution of a Java process using Maven's toolchain support.
+ *
+ * @author Stephane Nicoll
+ */
+class JavaProcessExecutor {
+
+ private static final int EXIT_CODE_SIGINT = 130;
+
+ private final MavenSession mavenSession;
+
+ private final ToolchainManager toolchainManager;
+
+ private final Consumer<RunProcess> runProcessCustomizer;
+
+ JavaProcessExecutor(MavenSession mavenSession, ToolchainManager toolchainManager) {
+ this(mavenSession, toolchainManager, null);
+ }
+
+ private JavaProcessExecutor(MavenSession mavenSession, ToolchainManager toolchainManager,
+ Consumer<RunProcess> runProcessCustomizer) {
+ this.mavenSession = mavenSession;
+ this.toolchainManager = toolchainManager;
+ this.runProcessCustomizer = runProcessCustomizer;
+ }
+
+ JavaProcessExecutor withRunProcessCustomizer(Consumer<RunProcess> customizer) {
+ Consumer<RunProcess> combinedCustomizer = (this.runProcessCustomizer != null)
+ ? this.runProcessCustomizer.andThen(customizer) : customizer;
+ return new JavaProcessExecutor(this.mavenSession, this.toolchainManager, combinedCustomizer);
+ }
+
+ int run(File workingDirectory, List<String> args, Map<String, String> environmentVariables)
+ throws MojoExecutionException {
+ RunProcess runProcess = new RunProcess(workingDirectory, getJavaExecutable());
+ if (this.runProcessCustomizer != null) {
+ this.runProcessCustomizer.accept(runProcess);
+ }
+ try {
+ int exitCode = runProcess.run(true, args, environmentVariables);
+ if (!hasTerminatedSuccessfully(exitCode)) {
+ throw new MojoExecutionException("Process terminated with exit code: " + exitCode);
+ }
+ return exitCode;
+ }
+ catch (IOException ex) {
+ throw new MojoExecutionException("Process execution failed", ex);
+ }
+ }
+
+ RunProcess runAsync(File workingDirectory, List<String> args, Map<String, String> environmentVariables)
+ throws MojoExecutionException {
+ try {
+ RunProcess runProcess = new RunProcess(workingDirectory, getJavaExecutable());
+ runProcess.run(false, args, environmentVariables);
+ return runProcess;
+ }
+ catch (IOException ex) {
+ throw new MojoExecutionException("Process execution failed", ex);
+ }
+ }
+
+ private boolean hasTerminatedSuccessfully(int exitCode) {
+ return (exitCode == 0 || exitCode == EXIT_CODE_SIGINT);
+ }
+
+ private String getJavaExecutable() {
+ Toolchain toolchain = this.toolchainManager.getToolchainFromBuildContext("jdk", this.mavenSession);
+ String javaExecutable = (toolchain != null) ? toolchain.findTool("java") : null;
+ return (javaExecutable != null) ? javaExecutable : new JavaExecutable().toString();
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/MatchingGroupIdFilter.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/MatchingGroupIdFilter.java
new file mode 100644
index 0000000000..9254c9271b
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/MatchingGroupIdFilter.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2012-2019 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.shared.artifact.filter.collection.AbstractArtifactFeatureFilter;
+
+/**
+ * An {@link org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter
+ * ArtifactsFilter} that filters by matching groupId.
+ *
+ * Preferred over the
+ * {@link org.apache.maven.shared.artifact.filter.collection.GroupIdFilter} due to that
+ * classes use of {@link String#startsWith} to match on prefix.
+ *
+ * @author Mark Ingram
+ */
+public class MatchingGroupIdFilter extends AbstractArtifactFeatureFilter {
+
+ /**
+ * Create a new instance with the CSV groupId values that should be excluded.
+ * @param exclude the group values to exclude
+ */
+ public MatchingGroupIdFilter(String exclude) {
+ super("", exclude);
+ }
+
+ @Override
+ protected String getArtifactFeature(Artifact artifact) {
+ return artifact.getGroupId();
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/RunArguments.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/RunArguments.java
new file mode 100644
index 0000000000..224620533d
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/RunArguments.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2012-2019 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+
+import java.util.Arrays;
+import java.util.Deque;
+import java.util.LinkedList;
+import java.util.Objects;
+
+/**
+ * Parse and expose arguments specified in a single string.
+ *
+ * @author Stephane Nicoll
+ */
+class RunArguments {
+
+ private static final String[] NO_ARGS = {};
+
+ private final Deque<String> args = new LinkedList<>();
+
+ RunArguments(String arguments) {
+ this(parseArgs(arguments));
+ }
+
+ RunArguments(String[] args) {
+ if (args != null) {
+ Arrays.stream(args).filter(Objects::nonNull).forEach(this.args::add);
+ }
+ }
+
+ Deque<String> getArgs() {
+ return this.args;
+ }
+
+ String[] asArray() {
+ return this.args.toArray(new String[0]);
+ }
+
+ private static String[] parseArgs(String arguments) {
+ if (arguments == null || arguments.trim().isEmpty()) {
+ return NO_ARGS;
+ }
+ try {
+ arguments = arguments.replace('\n', ' ').replace('\t', ' ');
+ return CommandLineUtils.translateCommandline(arguments);
+ }
+ catch (Exception ex) {
+ throw new IllegalArgumentException("Failed to parse arguments [" + arguments + "]", ex);
+ }
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/RunProcess.java b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/RunProcess.java
new file mode 100644
index 0000000000..621d4dbc5b
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/aot/RunProcess.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2012-2022 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.aot;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * Utility used to run a process.
+ *
+ * @author Phillip Webb
+ * @author Dave Syer
+ * @author Andy Wilkinson
+ * @author Stephane Nicoll
+ * @author Dmytro Nosan
+ */
+public class RunProcess {
+
+ private static final long JUST_ENDED_LIMIT = 500;
+
+ private final File workingDirectory;
+
+ private final String[] command;
+
+ private volatile Process process;
+
+ private volatile long endTime;
+
+ /**
+ * Creates new {@link RunProcess} instance for the specified command.
+ * @param command the program to execute and its arguments
+ */
+ public RunProcess(String... command) {
+ this(null, command);
+ }
+
+ /**
+ * Creates new {@link RunProcess} instance for the specified working directory and
+ * command.
+ * @param workingDirectory the working directory of the child process or {@code null}
+ * to run in the working directory of the current Java process
+ * @param command the program to execute and its arguments
+ */
+ public RunProcess(File workingDirectory, String... command) {
+ this.workingDirectory = workingDirectory;
+ this.command = command;
+ }
+
+ public int run(boolean waitForProcess, String... args) throws IOException {
+ return run(waitForProcess, Arrays.asList(args), Collections.emptyMap());
+ }
+
+ public int run(boolean waitForProcess, Collection<String> args, Map<String, String> environmentVariables)
+ throws IOException {
+ ProcessBuilder builder = new ProcessBuilder(this.command);
+ builder.directory(this.workingDirectory);
+ builder.command().addAll(args);
+ builder.environment().putAll(environmentVariables);
+ builder.redirectErrorStream(true);
+ builder.inheritIO();
+ try {
+ Process process = builder.start();
+ this.process = process;
+ if (waitForProcess) {
+ try {
+ return process.waitFor();
+ }
+ catch (InterruptedException ex) {
+ Thread.currentThread().interrupt();
+ return 1;
+ }
+ }
+ return 5;
+ }
+ finally {
+ if (waitForProcess) {
+ this.endTime = System.currentTimeMillis();
+ this.process = null;
+ }
+ }
+ }
+
+ /**
+ * Return the running process.
+ * @return the process or {@code null}
+ */
+ public Process getRunningProcess() {
+ return this.process;
+ }
+
+ /**
+ * Return if the process was stopped.
+ * @return {@code true} if stopped
+ */
+ public boolean handleSigInt() {
+ if (allowChildToHandleSigInt()) {
+ return true;
+ }
+ return doKill();
+ }
+
+ private boolean allowChildToHandleSigInt() {
+ Process process = this.process;
+ if (process == null) {
+ return true;
+ }
+ long end = System.currentTimeMillis() + 5000;
+ while (System.currentTimeMillis() < end) {
+ if (!process.isAlive()) {
+ return true;
+ }
+ try {
+ Thread.sleep(500);
+ }
+ catch (InterruptedException ex) {
+ Thread.currentThread().interrupt();
+ return false;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Kill this process.
+ */
+ public void kill() {
+ doKill();
+ }
+
+ private boolean doKill() {
+ // destroy the running process
+ Process process = this.process;
+ if (process != null) {
+ try {
+ process.destroy();
+ process.waitFor();
+ this.process = null;
+ return true;
+ }
+ catch (InterruptedException ex) {
+ Thread.currentThread().interrupt();
+ }
+ }
+ return false;
+ }
+
+ public boolean hasJustEnded() {
+ return System.currentTimeMillis() < (this.endTime + JUST_ENDED_LIMIT);
+ }
+
+}
diff --git a/dubbo-maven-plugin/src/main/resources/META-INF/native-image/jni-config.json b/dubbo-maven-plugin/src/main/resources/META-INF/native-image/jni-config.json
new file mode 100644
index 0000000000..0d4f101c7a
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/resources/META-INF/native-image/jni-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/dubbo-maven-plugin/src/main/resources/META-INF/native-image/proxy-config.json b/dubbo-maven-plugin/src/main/resources/META-INF/native-image/proxy-config.json
new file mode 100644
index 0000000000..41b42e677b
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/resources/META-INF/native-image/proxy-config.json
@@ -0,0 +1,3 @@
+[
+
+]
diff --git a/dubbo-maven-plugin/src/main/resources/META-INF/native-image/reflect-config.json b/dubbo-maven-plugin/src/main/resources/META-INF/native-image/reflect-config.json
new file mode 100644
index 0000000000..64b4fd5431
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/resources/META-INF/native-image/reflect-config.json
@@ -0,0 +1,2925 @@
+[
+ {
+ "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.serialize.hessian2.Hessian2ScopeModelInitializer",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.serialize.fastjson2.Fastjson2ScopeModelInitializer",
+ "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.Hessian2FactoryManager",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.FrameworkModel"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.serialize.fastjson2.FastJson2Serialization",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.serialize.fastjson2.Fastjson2CreatorManager",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.FrameworkModel"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.serialize.fastjson2.Fastjson2SecurityManager",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.FrameworkModel"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.utils.SerializeSecurityConfigurator",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.ModuleModel"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.utils.SerializeSecurityManager",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ ]
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.utils.DefaultSerializeClassChecker",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.FrameworkModel"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.utils.SerializeClassChecker",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "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": [
+ "org.apache.dubbo.rpc.model.ApplicationModel"
+ ]
+ }
+ ]
+ },
+ {
+ "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,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.ApplicationModel"
+ ]
+ }
+ ]
+ },
+ {
+ "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": [
+ "org.apache.dubbo.rpc.model.ApplicationModel"
+ ]
+ }
+ ]
+ },
+ {
+ "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": [
+ "org.apache.dubbo.rpc.model.ApplicationModel"
+ ]
+ }
+ ]
+ },
+ {
+ "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.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",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "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,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.ApplicationModel"
+ ]
+ }
+ ]
+ },
+ {
+ "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": [
+ "org.apache.dubbo.rpc.model.ApplicationModel"
+ ]
+ }
+ ]
+ },
+ {
+ "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",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.ModuleModel"
+ ]
+ }
+ ]
+ },
+ {
+ "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.AppStateRouterFactory",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.rpc.cluster.router.condition.config.ServiceStateRouterFactory",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.rpc.cluster.router.file.FileStateRouterFactory"
+ },
+ {
+ "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.StandardMeshRuleRouterFactory",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.rpc.cluster.router.mock.MockStateRouterFactory",
+ "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.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.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": [
+ "org.apache.dubbo.rpc.model.FrameworkModel"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.rpc.AdaptiveMetrics",
+ "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.logging.log4j.Level",
+ "allPublicMethods": true
+ },
+ {
+ "name": "org.apache.log4j.helpers.Loader"
+ },
+ {
+ "name": "org.apache.log4j.spi.OptionHandler"
+ },
+ {
+ "name": "org.apache.zookeeper.ClientCnxnSocketNIO",
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.zookeeper.client.ZKClientConfig"
+ ]
+ },
+ {
+ "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": []
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.rpc.cluster.router.RouterSnapshotSwitcher",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.threadpool.manager.FrameworkExecutorRepository",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.convert.ConverterUtil",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.FrameworkModel"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.rpc.cluster.router.mesh.route.MeshRuleManager",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.ModuleModel"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.config.context.ModuleConfigManager",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.ModuleModel"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.common.store.support.SimpleDataStore",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.metrics.collector.DefaultMetricsCollector",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "org.apache.dubbo.config.deploy.DefaultMetricsServiceExporter",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "com.alibaba.fastjson.JSON",
+ "allPublicMethods": true
+ },
+ {
+ "name": "java.util.Collections$UnmodifiableMap",
+ "allPublicMethods": true
+ },
+ {
+ "name": "java.util.Collections$UnmodifiableCollection",
+ "allPublicMethods": true
+ }
+]
diff --git a/dubbo-maven-plugin/src/main/resources/META-INF/native-image/resource-config.json b/dubbo-maven-plugin/src/main/resources/META-INF/native-image/resource-config.json
new file mode 100644
index 0000000000..51f17b21af
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/resources/META-INF/native-image/resource-config.json
@@ -0,0 +1,169 @@
+{
+ "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.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.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"
+ },
+ {
+ "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.store.DataStore\\E"
+ },
+ {
+ "pattern": "\\QMETA-INF/dubbo/internal/org.apache.dubbo.metrics.service.MetricsServiceExporter\\E"
+ },
+ {
+ "pattern": "\\Qsecurity/serialize.blockedlist\\E"
+ },
+ {
+ "pattern": "\\Qsecurity/serialize.allowlist\\E"
+ }
+ ]
+ },
+ "bundles": []
+}
diff --git a/dubbo-maven-plugin/src/main/resources/META-INF/native-image/serialization-config.json b/dubbo-maven-plugin/src/main/resources/META-INF/native-image/serialization-config.json
new file mode 100644
index 0000000000..0d4f101c7a
--- /dev/null
+++ b/dubbo-maven-plugin/src/main/resources/META-INF/native-image/serialization-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/dubbo-native-plugin/src/main/java/org/apache/dubbo/common/metrics/MetricsReporterFactory$Adaptive.java b/dubbo-native-plugin/src/main/java/org/apache/dubbo/common/metrics/MetricsReporterFactory$Adaptive.java
deleted file mode 100644
index ed54214c78..0000000000
--- a/dubbo-native-plugin/src/main/java/org/apache/dubbo/common/metrics/MetricsReporterFactory$Adaptive.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.common.metrics;
-
-import org.apache.dubbo.metrics.report.MetricsReporter;
-import org.apache.dubbo.metrics.report.MetricsReporterFactory;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class MetricsReporterFactory$Adaptive implements MetricsReporterFactory {
-public MetricsReporter createMetricsReporter(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = ( url.getProtocol() == null ? "nop" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (MetricsReporterFactory) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), MetricsReporterFactory.class);
-MetricsReporterFactory extension = (MetricsReporterFactory)scopeModel.getExtensionLoader(MetricsReporterFactory.class).getExtension(extName);
-return extension.createMetricsReporter(arg0);
-}
-}
diff --git a/dubbo-native-plugin/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool$Adaptive.java b/dubbo-native-plugin/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool$Adaptive.java
deleted file mode 100644
index 194958ed19..0000000000
--- a/dubbo-native-plugin/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool$Adaptive.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.common.threadpool;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class ThreadPool$Adaptive implements org.apache.dubbo.common.threadpool.ThreadPool {
-public java.util.concurrent.Executor getExecutor(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = url.getParameter("threadpool", "fixed");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.common.threadpool.ThreadPool) name from url (" + url.toString() + ") use keys([threadpool])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.common.threadpool.ThreadPool.class);
-org.apache.dubbo.common.threadpool.ThreadPool extension = (org.apache.dubbo.common.threadpool.ThreadPool)scopeModel.getExtensionLoader(org.apache.dubbo.common.threadpool.ThreadPool.class).getExtension(extName);
-return extension.getExecutor(arg0);
-}
-}
diff --git a/dubbo-native-plugin/src/main/java/org/apache/dubbo/rpc/executor/IsolationExecutorSupportFactory$Adaptive.java b/dubbo-native-plugin/src/main/java/org/apache/dubbo/rpc/executor/IsolationExecutorSupportFactory$Adaptive.java
deleted file mode 100644
index 6360d71c54..0000000000
--- a/dubbo-native-plugin/src/main/java/org/apache/dubbo/rpc/executor/IsolationExecutorSupportFactory$Adaptive.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.rpc.executor;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class IsolationExecutorSupportFactory$Adaptive implements org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory {
-public org.apache.dubbo.rpc.executor.ExecutorSupport getIsolationExecutorSupport(org.apache.dubbo.common.URL arg0) {
-throw new UnsupportedOperationException("The method public static org.apache.dubbo.rpc.executor.ExecutorSupport org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory.getIsolationExecutorSupport(org.apache.dubbo.common.URL) of interface org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory is not adaptive method!");
-}
-public org.apache.dubbo.rpc.executor.ExecutorSupport createIsolationExecutorSupport(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = ( url.getProtocol() == null ? "adaptive" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory.class);
-org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory extension = (org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory.class).getExtension(extName);
-return extension.createIsolationExecutorSupport(arg0);
-}
-}
diff --git a/dubbo-native/pom.xml b/dubbo-native/pom.xml
index 73e37cb332..449148f20a 100644
--- a/dubbo-native/pom.xml
+++ b/dubbo-native/pom.xml
@@ -30,51 +30,11 @@
<dependencies>
-
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
<version>${project.parent.version}</version>
</dependency>
-
-
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-metadata-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
-
-
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-monitor-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-registry-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
-
-
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-remoting-zookeeper</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-test-check</artifactId>
- <version>${project.parent.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-metrics-default</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
</dependencies>
</project>
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/utils/ClassFinder.java b/dubbo-native/src/main/java/org/apache/dubbo/aot/generate/ClassSourceFinder.java
similarity index 95%
rename from dubbo-native/src/main/java/org/apache/dubbo/utils/ClassFinder.java
rename to dubbo-native/src/main/java/org/apache/dubbo/aot/generate/ClassSourceFinder.java
index 75ef3277e8..545c427442 100644
--- a/dubbo-native/src/main/java/org/apache/dubbo/utils/ClassFinder.java
+++ b/dubbo-native/src/main/java/org/apache/dubbo/aot/generate/ClassSourceFinder.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dubbo.utils;
+package org.apache.dubbo.aot.generate;
import java.io.File;
@@ -26,7 +26,7 @@ import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
-public class ClassFinder {
+public class ClassSourceFinder {
public Set<String> findClassSet(String packageName) {
packageName = packageName.replace(".", "/");
@@ -42,7 +42,7 @@ public class ClassFinder {
findClassesByFile(packageName, resource.getPath(), result);
} else if ("jar".equals(protocol)) {
JarFile jar = ((JarURLConnection) resource.openConnection()).getJarFile();
- System.out.println("findClassSet jar:"+jar.getName());
+ System.out.println("findClassSet jar:" + jar.getName());
findClassesByJar(packageName, jar, result);
}
}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/utils/CodeGenerator.java b/dubbo-native/src/main/java/org/apache/dubbo/aot/generate/CodeGenerator.java
similarity index 81%
rename from dubbo-native/src/main/java/org/apache/dubbo/utils/CodeGenerator.java
rename to dubbo-native/src/main/java/org/apache/dubbo/aot/generate/CodeGenerator.java
index aae60bb5b2..2e6a68cb97 100644
--- a/dubbo-native/src/main/java/org/apache/dubbo/utils/CodeGenerator.java
+++ b/dubbo-native/src/main/java/org/apache/dubbo/aot/generate/CodeGenerator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dubbo.utils;
+package org.apache.dubbo.aot.generate;
import org.apache.dubbo.common.extension.Adaptive;
import org.apache.dubbo.common.extension.AdaptiveClassCodeGenerator;
@@ -27,7 +27,6 @@ import java.io.File;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
-import java.net.URL;
import java.nio.charset.Charset;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -42,13 +41,12 @@ import java.util.stream.Collectors;
*/
public class CodeGenerator {
+ private static final String PACKAGE_NAME_PREFIX = "org.apache.dubbo";
+
public static void main(String[] args) {
- URL r = Thread.currentThread().getContextClassLoader().getResource("");
- String targetClassPath = new File(r.getFile()).getAbsolutePath();
- String p = Paths.get(targetClassPath).getParent().getParent().toString() + File.separator + "src" + File.separator + "main" + File.separator + "java";
- System.out.println(p);
+ String generatedSources = args[1];
- List<Class<?>> classes = new ClassFinder().findClassSet("org.apache.dubbo").stream().map(it -> {
+ List<Class<?>> classes = new ClassSourceFinder().findClassSet(PACKAGE_NAME_PREFIX).stream().map(it -> {
try {
return Class.forName(it);
} catch (Throwable e) {
@@ -73,23 +71,20 @@ public class CodeGenerator {
}
AdaptiveClassCodeGenerator codeGenerator = new AdaptiveClassCodeGenerator(it, value);
String code = codeGenerator.generate(true);
- System.out.println(code);
- System.out.println("-----:" + it.getPackage());
try {
- String file = p + File.separator + it.getName().replaceAll("\\.", Matcher.quoteReplacement(File.separator));
+ String file = generatedSources + File.separator + it.getName().replaceAll("\\.", Matcher.quoteReplacement(File.separator));
String dir = Paths.get(file).getParent().toString();
FileUtils.forceMkdir(new File(dir));
- code = licensedStr + code + "\n";
+ code = LICENSED_STR + code + "\n";
FileUtils.write(new File(file + "$Adaptive.java"), code, Charset.defaultCharset());
} catch (IOException e) {
- e.printStackTrace();
+ throw new IllegalStateException("Failed to generated adaptive class sources", e);
}
});
- System.out.println(classes.size());
}
- private static String licensedStr = "/*\n" +
+ private static final String LICENSED_STR = "/*\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" +
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/common/metrics/MetricsReporterFactory$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/common/metrics/MetricsReporterFactory$Adaptive.java
deleted file mode 100644
index ed54214c78..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/common/metrics/MetricsReporterFactory$Adaptive.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.common.metrics;
-
-import org.apache.dubbo.metrics.report.MetricsReporter;
-import org.apache.dubbo.metrics.report.MetricsReporterFactory;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class MetricsReporterFactory$Adaptive implements MetricsReporterFactory {
-public MetricsReporter createMetricsReporter(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = ( url.getProtocol() == null ? "nop" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (MetricsReporterFactory) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), MetricsReporterFactory.class);
-MetricsReporterFactory extension = (MetricsReporterFactory)scopeModel.getExtensionLoader(MetricsReporterFactory.class).getExtension(extName);
-return extension.createMetricsReporter(arg0);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/common/serialize/Serialization$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/common/serialize/Serialization$Adaptive.java
deleted file mode 100644
index ae3a0b6d6a..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/common/serialize/Serialization$Adaptive.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.common.serialize;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class Serialization$Adaptive implements org.apache.dubbo.common.serialize.Serialization {
-public byte getContentTypeId() {
-throw new UnsupportedOperationException("The method public abstract byte org.apache.dubbo.common.serialize.Serialization.getContentTypeId() of interface org.apache.dubbo.common.serialize.Serialization is not adaptive method!");
-}
-public java.lang.String getContentType() {
-throw new UnsupportedOperationException("The method public abstract java.lang.String org.apache.dubbo.common.serialize.Serialization.getContentType() of interface org.apache.dubbo.common.serialize.Serialization is not adaptive method!");
-}
-public org.apache.dubbo.common.serialize.ObjectInput deserialize(org.apache.dubbo.common.URL arg0, java.io.InputStream arg1) throws java.io.IOException {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = url.getParameter("serialization", "adaptive");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.common.serialize.Serialization) name from url (" + url.toString() + ") use keys([serialization])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.common.serialize.Serialization.class);
-org.apache.dubbo.common.serialize.Serialization extension = (org.apache.dubbo.common.serialize.Serialization)scopeModel.getExtensionLoader(org.apache.dubbo.common.serialize.Serialization.class).getExtension(extName);
-return extension.deserialize(arg0, arg1);
-}
-public org.apache.dubbo.common.serialize.ObjectOutput serialize(org.apache.dubbo.common.URL arg0, java.io.OutputStream arg1) throws java.io.IOException {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = url.getParameter("serialization", "adaptive");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.common.serialize.Serialization) name from url (" + url.toString() + ") use keys([serialization])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.common.serialize.Serialization.class);
-org.apache.dubbo.common.serialize.Serialization extension = (org.apache.dubbo.common.serialize.Serialization)scopeModel.getExtensionLoader(org.apache.dubbo.common.serialize.Serialization.class).getExtension(extName);
-return extension.serialize(arg0, arg1);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool$Adaptive.java
deleted file mode 100644
index 194958ed19..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool$Adaptive.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.common.threadpool;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class ThreadPool$Adaptive implements org.apache.dubbo.common.threadpool.ThreadPool {
-public java.util.concurrent.Executor getExecutor(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = url.getParameter("threadpool", "fixed");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.common.threadpool.ThreadPool) name from url (" + url.toString() + ") use keys([threadpool])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.common.threadpool.ThreadPool.class);
-org.apache.dubbo.common.threadpool.ThreadPool extension = (org.apache.dubbo.common.threadpool.ThreadPool)scopeModel.getExtensionLoader(org.apache.dubbo.common.threadpool.ThreadPool.class).getExtension(extName);
-return extension.getExecutor(arg0);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/metadata/report/MetadataReportFactory$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/metadata/report/MetadataReportFactory$Adaptive.java
deleted file mode 100644
index 0816ad1ec3..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/metadata/report/MetadataReportFactory$Adaptive.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.metadata.report;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class MetadataReportFactory$Adaptive implements org.apache.dubbo.metadata.report.MetadataReportFactory {
-public org.apache.dubbo.metadata.report.MetadataReport getMetadataReport(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = ( url.getProtocol() == null ? "redis" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.metadata.report.MetadataReportFactory) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.metadata.report.MetadataReportFactory.class);
-org.apache.dubbo.metadata.report.MetadataReportFactory extension = (org.apache.dubbo.metadata.report.MetadataReportFactory)scopeModel.getExtensionLoader(org.apache.dubbo.metadata.report.MetadataReportFactory.class).getExtension(extName);
-return extension.getMetadataReport(arg0);
-}
-public void destroy() {
-throw new UnsupportedOperationException("The method public default void org.apache.dubbo.metadata.report.MetadataReportFactory.destroy() of interface org.apache.dubbo.metadata.report.MetadataReportFactory is not adaptive method!");
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/monitor/MonitorFactory$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/monitor/MonitorFactory$Adaptive.java
deleted file mode 100644
index 081064d92a..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/monitor/MonitorFactory$Adaptive.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.monitor;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class MonitorFactory$Adaptive implements org.apache.dubbo.monitor.MonitorFactory {
-public org.apache.dubbo.monitor.Monitor getMonitor(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = ( url.getProtocol() == null ? "dubbo" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.monitor.MonitorFactory) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.monitor.MonitorFactory.class);
-org.apache.dubbo.monitor.MonitorFactory extension = (org.apache.dubbo.monitor.MonitorFactory)scopeModel.getExtensionLoader(org.apache.dubbo.monitor.MonitorFactory.class).getExtension(extName);
-return extension.getMonitor(arg0);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/registry/RegistryFactory$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/registry/RegistryFactory$Adaptive.java
deleted file mode 100644
index 8b3ebc963e..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/registry/RegistryFactory$Adaptive.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.registry;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class RegistryFactory$Adaptive implements org.apache.dubbo.registry.RegistryFactory {
-public org.apache.dubbo.registry.Registry getRegistry(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = ( url.getProtocol() == null ? "adaptive" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.registry.RegistryFactory) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.registry.RegistryFactory.class);
-org.apache.dubbo.registry.RegistryFactory extension = (org.apache.dubbo.registry.RegistryFactory)scopeModel.getExtensionLoader(org.apache.dubbo.registry.RegistryFactory.class).getExtension(extName);
-return extension.getRegistry(arg0);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/remoting/Codec$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/remoting/Codec$Adaptive.java
deleted file mode 100644
index 25c3b4146f..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/remoting/Codec$Adaptive.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.remoting;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class Codec$Adaptive implements org.apache.dubbo.remoting.Codec {
-public java.lang.Object decode(org.apache.dubbo.remoting.Channel arg0, java.io.InputStream arg1) throws java.io.IOException {
-if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.remoting.Channel argument == null");
-if (arg0.getUrl() == null) throw new IllegalArgumentException("org.apache.dubbo.remoting.Channel argument getUrl() == null");
-org.apache.dubbo.common.URL url = arg0.getUrl();
-String extName = url.getParameter("codec", "adaptive");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.Codec) name from url (" + url.toString() + ") use keys([codec])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.Codec.class);
-org.apache.dubbo.remoting.Codec extension = (org.apache.dubbo.remoting.Codec)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.Codec.class).getExtension(extName);
-return extension.decode(arg0, arg1);
-}
-public void encode(org.apache.dubbo.remoting.Channel arg0, java.io.OutputStream arg1, java.lang.Object arg2) throws java.io.IOException {
-if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.remoting.Channel argument == null");
-if (arg0.getUrl() == null) throw new IllegalArgumentException("org.apache.dubbo.remoting.Channel argument getUrl() == null");
-org.apache.dubbo.common.URL url = arg0.getUrl();
-String extName = url.getParameter("codec", "adaptive");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.Codec) name from url (" + url.toString() + ") use keys([codec])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.Codec.class);
-org.apache.dubbo.remoting.Codec extension = (org.apache.dubbo.remoting.Codec)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.Codec.class).getExtension(extName);
-extension.encode(arg0, arg1, arg2);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/remoting/Codec2$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/remoting/Codec2$Adaptive.java
deleted file mode 100644
index cffc978798..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/remoting/Codec2$Adaptive.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.remoting;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class Codec2$Adaptive implements org.apache.dubbo.remoting.Codec2 {
-public java.lang.Object decode(org.apache.dubbo.remoting.Channel arg0, org.apache.dubbo.remoting.buffer.ChannelBuffer arg1) throws java.io.IOException {
-if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.remoting.Channel argument == null");
-if (arg0.getUrl() == null) throw new IllegalArgumentException("org.apache.dubbo.remoting.Channel argument getUrl() == null");
-org.apache.dubbo.common.URL url = arg0.getUrl();
-String extName = url.getParameter("codec", "adaptive");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.Codec2) name from url (" + url.toString() + ") use keys([codec])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.Codec2.class);
-org.apache.dubbo.remoting.Codec2 extension = (org.apache.dubbo.remoting.Codec2)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.Codec2.class).getExtension(extName);
-return extension.decode(arg0, arg1);
-}
-public void encode(org.apache.dubbo.remoting.Channel arg0, org.apache.dubbo.remoting.buffer.ChannelBuffer arg1, java.lang.Object arg2) throws java.io.IOException {
-if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.remoting.Channel argument == null");
-if (arg0.getUrl() == null) throw new IllegalArgumentException("org.apache.dubbo.remoting.Channel argument getUrl() == null");
-org.apache.dubbo.common.URL url = arg0.getUrl();
-String extName = url.getParameter("codec", "adaptive");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.Codec2) name from url (" + url.toString() + ") use keys([codec])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.Codec2.class);
-org.apache.dubbo.remoting.Codec2 extension = (org.apache.dubbo.remoting.Codec2)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.Codec2.class).getExtension(extName);
-extension.encode(arg0, arg1, arg2);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/remoting/Dispatcher$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/remoting/Dispatcher$Adaptive.java
deleted file mode 100644
index 51269145d4..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/remoting/Dispatcher$Adaptive.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.remoting;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class Dispatcher$Adaptive implements org.apache.dubbo.remoting.Dispatcher {
-public org.apache.dubbo.remoting.ChannelHandler dispatch(org.apache.dubbo.remoting.ChannelHandler arg0, org.apache.dubbo.common.URL arg1) {
-if (arg1 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg1;
-String extName = url.getParameter("dispatcher", url.getParameter("dispather", url.getParameter("channel.handler", "all")));
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.Dispatcher) name from url (" + url.toString() + ") use keys([dispatcher, dispather, channel.handler])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.Dispatcher.class);
-org.apache.dubbo.remoting.Dispatcher extension = (org.apache.dubbo.remoting.Dispatcher)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.Dispatcher.class).getExtension(extName);
-return extension.dispatch(arg0, arg1);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/remoting/Transporter$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/remoting/Transporter$Adaptive.java
deleted file mode 100644
index 6a858aebf4..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/remoting/Transporter$Adaptive.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.remoting;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class Transporter$Adaptive implements org.apache.dubbo.remoting.Transporter {
-public org.apache.dubbo.remoting.Client connect(org.apache.dubbo.common.URL arg0, org.apache.dubbo.remoting.ChannelHandler arg1) throws org.apache.dubbo.remoting.RemotingException {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = url.getParameter("client", url.getParameter("transporter", "netty"));
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.Transporter) name from url (" + url.toString() + ") use keys([client, transporter])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.Transporter.class);
-org.apache.dubbo.remoting.Transporter extension = (org.apache.dubbo.remoting.Transporter)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.Transporter.class).getExtension(extName);
-return extension.connect(arg0, arg1);
-}
-public org.apache.dubbo.remoting.RemotingServer bind(org.apache.dubbo.common.URL arg0, org.apache.dubbo.remoting.ChannelHandler arg1) throws org.apache.dubbo.remoting.RemotingException {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = url.getParameter("server", url.getParameter("transporter", "netty"));
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.Transporter) name from url (" + url.toString() + ") use keys([server, transporter])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.Transporter.class);
-org.apache.dubbo.remoting.Transporter extension = (org.apache.dubbo.remoting.Transporter)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.Transporter.class).getExtension(extName);
-return extension.bind(arg0, arg1);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/remoting/api/pu/PortUnificationTransporter$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/remoting/api/pu/PortUnificationTransporter$Adaptive.java
deleted file mode 100644
index d5c1cc0a7a..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/remoting/api/pu/PortUnificationTransporter$Adaptive.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.remoting.api.pu;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class PortUnificationTransporter$Adaptive implements org.apache.dubbo.remoting.api.pu.PortUnificationTransporter {
-public org.apache.dubbo.remoting.api.connection.AbstractConnectionClient connect(org.apache.dubbo.common.URL arg0, org.apache.dubbo.remoting.ChannelHandler arg1) throws org.apache.dubbo.remoting.RemotingException {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = url.getParameter("client", url.getParameter("transporter", "netty4"));
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.api.pu.PortUnificationTransporter) name from url (" + url.toString() + ") use keys([client, transporter])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.api.pu.PortUnificationTransporter.class);
-org.apache.dubbo.remoting.api.pu.PortUnificationTransporter extension = (org.apache.dubbo.remoting.api.pu.PortUnificationTransporter)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.api.pu.PortUnificationTransporter.class).getExtension(extName);
-return extension.connect(arg0, arg1);
-}
-public org.apache.dubbo.remoting.api.pu.AbstractPortUnificationServer bind(org.apache.dubbo.common.URL arg0, org.apache.dubbo.remoting.ChannelHandler arg1) throws org.apache.dubbo.remoting.RemotingException {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = url.getParameter("server", url.getParameter("transporter", "netty4"));
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.api.pu.PortUnificationTransporter) name from url (" + url.toString() + ") use keys([server, transporter])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.api.pu.PortUnificationTransporter.class);
-org.apache.dubbo.remoting.api.pu.PortUnificationTransporter extension = (org.apache.dubbo.remoting.api.pu.PortUnificationTransporter)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.api.pu.PortUnificationTransporter.class).getExtension(extName);
-return extension.bind(arg0, arg1);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/remoting/exchange/Exchanger$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/remoting/exchange/Exchanger$Adaptive.java
deleted file mode 100644
index 015bf179fa..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/remoting/exchange/Exchanger$Adaptive.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.remoting.exchange;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class Exchanger$Adaptive implements org.apache.dubbo.remoting.exchange.Exchanger {
-public org.apache.dubbo.remoting.exchange.ExchangeClient connect(org.apache.dubbo.common.URL arg0, org.apache.dubbo.remoting.exchange.ExchangeHandler arg1) throws org.apache.dubbo.remoting.RemotingException {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = url.getParameter("exchanger", "header");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.exchange.Exchanger) name from url (" + url.toString() + ") use keys([exchanger])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.exchange.Exchanger.class);
-org.apache.dubbo.remoting.exchange.Exchanger extension = (org.apache.dubbo.remoting.exchange.Exchanger)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.exchange.Exchanger.class).getExtension(extName);
-return extension.connect(arg0, arg1);
-}
-public org.apache.dubbo.remoting.exchange.ExchangeServer bind(org.apache.dubbo.common.URL arg0, org.apache.dubbo.remoting.exchange.ExchangeHandler arg1) throws org.apache.dubbo.remoting.RemotingException {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = url.getParameter("exchanger", "header");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.exchange.Exchanger) name from url (" + url.toString() + ") use keys([exchanger])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.remoting.exchange.Exchanger.class);
-org.apache.dubbo.remoting.exchange.Exchanger extension = (org.apache.dubbo.remoting.exchange.Exchanger)scopeModel.getExtensionLoader(org.apache.dubbo.remoting.exchange.Exchanger.class).getExtension(extName);
-return extension.bind(arg0, arg1);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/rpc/Protocol$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/rpc/Protocol$Adaptive.java
deleted file mode 100644
index 16367fa414..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/rpc/Protocol$Adaptive.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.rpc;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class Protocol$Adaptive implements org.apache.dubbo.rpc.Protocol {
-public int getDefaultPort() {
-throw new UnsupportedOperationException("The method public abstract int org.apache.dubbo.rpc.Protocol.getDefaultPort() of interface org.apache.dubbo.rpc.Protocol is not adaptive method!");
-}
-public org.apache.dubbo.rpc.Exporter export(org.apache.dubbo.rpc.Invoker arg0) throws org.apache.dubbo.rpc.RpcException {
-if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument == null");
-if (arg0.getUrl() == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument getUrl() == null");
-org.apache.dubbo.common.URL url = arg0.getUrl();
-String extName = ( url.getProtocol() == null ? "dubbo" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.Protocol) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.Protocol.class);
-org.apache.dubbo.rpc.Protocol extension = (org.apache.dubbo.rpc.Protocol)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.Protocol.class).getExtension(extName);
-return extension.export(arg0);
-}
-public org.apache.dubbo.rpc.Invoker refer(java.lang.Class arg0, org.apache.dubbo.common.URL arg1) throws org.apache.dubbo.rpc.RpcException {
-if (arg1 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg1;
-String extName = ( url.getProtocol() == null ? "dubbo" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.Protocol) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.Protocol.class);
-org.apache.dubbo.rpc.Protocol extension = (org.apache.dubbo.rpc.Protocol)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.Protocol.class).getExtension(extName);
-return extension.refer(arg0, arg1);
-}
-public void destroy() {
-throw new UnsupportedOperationException("The method public abstract void org.apache.dubbo.rpc.Protocol.destroy() of interface org.apache.dubbo.rpc.Protocol is not adaptive method!");
-}
-public java.util.List getServers() {
-throw new UnsupportedOperationException("The method public default java.util.List org.apache.dubbo.rpc.Protocol.getServers() of interface org.apache.dubbo.rpc.Protocol is not adaptive method!");
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/rpc/ProxyFactory$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/rpc/ProxyFactory$Adaptive.java
deleted file mode 100644
index 101925d8ab..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/rpc/ProxyFactory$Adaptive.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.rpc;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class ProxyFactory$Adaptive implements org.apache.dubbo.rpc.ProxyFactory {
-public java.lang.Object getProxy(org.apache.dubbo.rpc.Invoker arg0) throws org.apache.dubbo.rpc.RpcException {
-if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument == null");
-if (arg0.getUrl() == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument getUrl() == null");
-org.apache.dubbo.common.URL url = arg0.getUrl();
-String extName = url.getParameter("proxy", "javassist");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.ProxyFactory) name from url (" + url.toString() + ") use keys([proxy])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.ProxyFactory.class);
-org.apache.dubbo.rpc.ProxyFactory extension = (org.apache.dubbo.rpc.ProxyFactory)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.ProxyFactory.class).getExtension(extName);
-return extension.getProxy(arg0);
-}
-public java.lang.Object getProxy(org.apache.dubbo.rpc.Invoker arg0, boolean arg1) throws org.apache.dubbo.rpc.RpcException {
-if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument == null");
-if (arg0.getUrl() == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument getUrl() == null");
-org.apache.dubbo.common.URL url = arg0.getUrl();
-String extName = url.getParameter("proxy", "javassist");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.ProxyFactory) name from url (" + url.toString() + ") use keys([proxy])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.ProxyFactory.class);
-org.apache.dubbo.rpc.ProxyFactory extension = (org.apache.dubbo.rpc.ProxyFactory)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.ProxyFactory.class).getExtension(extName);
-return extension.getProxy(arg0, arg1);
-}
-public org.apache.dubbo.rpc.Invoker getInvoker(java.lang.Object arg0, java.lang.Class arg1, org.apache.dubbo.common.URL arg2) throws org.apache.dubbo.rpc.RpcException {
-if (arg2 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg2;
-String extName = url.getParameter("proxy", "javassist");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.ProxyFactory) name from url (" + url.toString() + ") use keys([proxy])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.ProxyFactory.class);
-org.apache.dubbo.rpc.ProxyFactory extension = (org.apache.dubbo.rpc.ProxyFactory)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.ProxyFactory.class).getExtension(extName);
-return extension.getInvoker(arg0, arg1, arg2);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/Cluster$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/Cluster$Adaptive.java
deleted file mode 100644
index e8b087d611..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/Cluster$Adaptive.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.rpc.cluster;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class Cluster$Adaptive implements org.apache.dubbo.rpc.cluster.Cluster {
-public org.apache.dubbo.rpc.Invoker join(org.apache.dubbo.rpc.cluster.Directory arg0, boolean arg1) throws org.apache.dubbo.rpc.RpcException {
-if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.cluster.Directory argument == null");
-if (arg0.getUrl() == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.cluster.Directory argument getUrl() == null");
-org.apache.dubbo.common.URL url = arg0.getUrl();
-String extName = url.getParameter("cluster", "failover");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.cluster.Cluster) name from url (" + url.toString() + ") use keys([cluster])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.cluster.Cluster.class);
-org.apache.dubbo.rpc.cluster.Cluster extension = (org.apache.dubbo.rpc.cluster.Cluster)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.cluster.Cluster.class).getExtension(extName);
-return extension.join(arg0, arg1);
-}
-public org.apache.dubbo.rpc.cluster.Cluster getCluster(org.apache.dubbo.rpc.model.ScopeModel arg0, java.lang.String arg1) {
-throw new UnsupportedOperationException("The method public static org.apache.dubbo.rpc.cluster.Cluster org.apache.dubbo.rpc.cluster.Cluster.getCluster(org.apache.dubbo.rpc.model.ScopeModel,java.lang.String) of interface org.apache.dubbo.rpc.cluster.Cluster is not adaptive method!");
-}
-public org.apache.dubbo.rpc.cluster.Cluster getCluster(org.apache.dubbo.rpc.model.ScopeModel arg0, java.lang.String arg1, boolean arg2) {
-throw new UnsupportedOperationException("The method public static org.apache.dubbo.rpc.cluster.Cluster org.apache.dubbo.rpc.cluster.Cluster.getCluster(org.apache.dubbo.rpc.model.ScopeModel,java.lang.String,boolean) of interface org.apache.dubbo.rpc.cluster.Cluster is not adaptive method!");
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/ConfiguratorFactory$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/ConfiguratorFactory$Adaptive.java
deleted file mode 100644
index f4dec3f001..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/ConfiguratorFactory$Adaptive.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.rpc.cluster;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class ConfiguratorFactory$Adaptive implements org.apache.dubbo.rpc.cluster.ConfiguratorFactory {
-public org.apache.dubbo.rpc.cluster.Configurator getConfigurator(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = ( url.getProtocol() == null ? "adaptive" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.cluster.ConfiguratorFactory) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.cluster.ConfiguratorFactory.class);
-org.apache.dubbo.rpc.cluster.ConfiguratorFactory extension = (org.apache.dubbo.rpc.cluster.ConfiguratorFactory)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.cluster.ConfiguratorFactory.class).getExtension(extName);
-return extension.getConfigurator(arg0);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/LoadBalance$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/LoadBalance$Adaptive.java
deleted file mode 100644
index f941ecd4a3..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/LoadBalance$Adaptive.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.rpc.cluster;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class LoadBalance$Adaptive implements org.apache.dubbo.rpc.cluster.LoadBalance {
-public org.apache.dubbo.rpc.Invoker select(java.util.List arg0, org.apache.dubbo.common.URL arg1, org.apache.dubbo.rpc.Invocation arg2) throws org.apache.dubbo.rpc.RpcException {
-if (arg1 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg1;
-if (arg2 == null) throw new IllegalArgumentException("invocation == null"); String methodName = arg2.getMethodName();
-String extName = url.getMethodParameter(methodName, "loadbalance", "random");
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.cluster.LoadBalance) name from url (" + url.toString() + ") use keys([loadbalance])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.cluster.LoadBalance.class);
-org.apache.dubbo.rpc.cluster.LoadBalance extension = (org.apache.dubbo.rpc.cluster.LoadBalance)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.cluster.LoadBalance.class).getExtension(extName);
-return extension.select(arg0, arg1, arg2);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/RouterFactory$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/RouterFactory$Adaptive.java
deleted file mode 100644
index a4aa21c140..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/RouterFactory$Adaptive.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.rpc.cluster;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class RouterFactory$Adaptive implements org.apache.dubbo.rpc.cluster.RouterFactory {
-public org.apache.dubbo.rpc.cluster.Router getRouter(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = ( url.getProtocol() == null ? "adaptive" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.cluster.RouterFactory) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.cluster.RouterFactory.class);
-org.apache.dubbo.rpc.cluster.RouterFactory extension = (org.apache.dubbo.rpc.cluster.RouterFactory)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.cluster.RouterFactory.class).getExtension(extName);
-return extension.getRouter(arg0);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/router/state/StateRouterFactory$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/router/state/StateRouterFactory$Adaptive.java
deleted file mode 100644
index c33747dc83..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/rpc/cluster/router/state/StateRouterFactory$Adaptive.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.rpc.cluster.router.state;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class StateRouterFactory$Adaptive implements org.apache.dubbo.rpc.cluster.router.state.StateRouterFactory {
-public org.apache.dubbo.rpc.cluster.router.state.StateRouter getRouter(java.lang.Class arg0, org.apache.dubbo.common.URL arg1) {
-if (arg1 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg1;
-String extName = ( url.getProtocol() == null ? "adaptive" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.cluster.router.state.StateRouterFactory) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.cluster.router.state.StateRouterFactory.class);
-org.apache.dubbo.rpc.cluster.router.state.StateRouterFactory extension = (org.apache.dubbo.rpc.cluster.router.state.StateRouterFactory)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.cluster.router.state.StateRouterFactory.class).getExtension(extName);
-return extension.getRouter(arg0, arg1);
-}
-}
diff --git a/dubbo-native/src/main/java/org/apache/dubbo/rpc/executor/IsolationExecutorSupportFactory$Adaptive.java b/dubbo-native/src/main/java/org/apache/dubbo/rpc/executor/IsolationExecutorSupportFactory$Adaptive.java
deleted file mode 100644
index fbf3bcf235..0000000000
--- a/dubbo-native/src/main/java/org/apache/dubbo/rpc/executor/IsolationExecutorSupportFactory$Adaptive.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.rpc.executor;
-import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
-public class IsolationExecutorSupportFactory$Adaptive implements org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory {
-public org.apache.dubbo.rpc.executor.ExecutorSupport createIsolationExecutorSupport(org.apache.dubbo.common.URL arg0) {
-if (arg0 == null) throw new IllegalArgumentException("url == null");
-org.apache.dubbo.common.URL url = arg0;
-String extName = ( url.getProtocol() == null ? "adaptive" : url.getProtocol() );
-if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory) name from url (" + url.toString() + ") use keys([protocol])");
-ScopeModel scopeModel = ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory.class);
-org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory extension = (org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory)scopeModel.getExtensionLoader(org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory.class).getExtension(extName);
-return extension.createIsolationExecutorSupport(arg0);
-}
-public org.apache.dubbo.rpc.executor.ExecutorSupport getIsolationExecutorSupport(org.apache.dubbo.common.URL arg0) {
-throw new UnsupportedOperationException("The method public static org.apache.dubbo.rpc.executor.ExecutorSupport org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory.getIsolationExecutorSupport(org.apache.dubbo.common.URL) of interface org.apache.dubbo.rpc.executor.IsolationExecutorSupportFactory is not adaptive method!");
-}
-}
diff --git a/dubbo-test/dubbo-dependencies-all/pom.xml b/dubbo-test/dubbo-dependencies-all/pom.xml
index 8922e63208..5e9a515d5a 100644
--- a/dubbo-test/dubbo-dependencies-all/pom.xml
+++ b/dubbo-test/dubbo-dependencies-all/pom.xml
@@ -184,6 +184,11 @@
<artifactId>dubbo-native-plugin</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-maven-plugin</artifactId>
+ </dependency>
+
<!-- plugin -->
<dependency>
<groupId>org.apache.dubbo</groupId>
diff --git a/dubbo-test/dubbo-test-modules/src/test/java/org/apache/dubbo/dependency/FileTest.java b/dubbo-test/dubbo-test-modules/src/test/java/org/apache/dubbo/dependency/FileTest.java
index 4a69205f85..4f912e3001 100644
--- a/dubbo-test/dubbo-test-modules/src/test/java/org/apache/dubbo/dependency/FileTest.java
+++ b/dubbo-test/dubbo-test-modules/src/test/java/org/apache/dubbo/dependency/FileTest.java
@@ -57,6 +57,7 @@ class FileTest {
ignoredModulesInDubboAll.add(Pattern.compile("dubbo-metadata-processor"));
ignoredModulesInDubboAll.add(Pattern.compile("dubbo-native.*"));
ignoredModulesInDubboAll.add(Pattern.compile("dubbo-spring-boot.*"));
+ ignoredModulesInDubboAll.add(Pattern.compile("dubbo-maven-plugin"));
}
@Test
diff --git a/pom.xml b/pom.xml
index 9323273df3..eea92a1f98 100644
--- a/pom.xml
+++ b/pom.xml
@@ -161,6 +161,7 @@
<module>dubbo-kubernetes</module>
<module>dubbo-xds</module>
<module>dubbo-native-plugin</module>
+ <module>dubbo-maven-plugin</module>
</modules>
<dependencyManagement>
@@ -318,6 +319,21 @@
<skip>${checkstyle.skip}</skip>
<excludes>
**/JSONWriter.java,
+ **/org/apache/dubbo/maven/plugin/aot/AbstractAotMojo.java,
+ **/org/apache/dubbo/maven/plugin/aot/AbstractDependencyFilterMojo.java,
+ **/org/apache/dubbo/maven/plugin/aot/CommandLineBuilder.java,
+ **/org/apache/dubbo/maven/plugin/aot/DependencyFilter.java,
+ **/org/apache/dubbo/maven/plugin/aot/Exclude.java,
+ **/org/apache/dubbo/maven/plugin/aot/ExcludeFilter.java,
+ **/org/apache/dubbo/maven/plugin/aot/FilterableDependency.java,
+ **/org/apache/dubbo/maven/plugin/aot/Include.java,
+ **/org/apache/dubbo/maven/plugin/aot/IncludeFilter.java,
+ **/org/apache/dubbo/maven/plugin/aot/JavaCompilerPluginConfiguration.java,
+ **/org/apache/dubbo/maven/plugin/aot/JavaExecutable.java,
+ **/org/apache/dubbo/maven/plugin/aot/JavaProcessExecutor.java,
+ **/org/apache/dubbo/maven/plugin/aot/MatchingGroupIdFilter.java,
+ **/org/apache/dubbo/maven/plugin/aot/RunArguments.java,
+ **/org/apache/dubbo/maven/plugin/aot/RunProcess.java,
**/org/apache/dubbo/common/threadpool/serial/SerializingExecutor.java,
**/org/apache/dubbo/common/threadlocal/InternalThreadLocal.java,
**/org/apache/dubbo/common/threadlocal/InternalThreadLocalMap.java,