You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2023/04/11 17:53:54 UTC

[dubbo-initializer] 21/23: 1.Remove unnecessary component dependencies in metadata.yaml 2.Add GRPC protocol and Hessian serialization

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

liujun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/dubbo-initializer.git

commit d6a4ac4491b350e7f0f43c02817329a9dc4fd39a
Author: ICD <15...@163.com>
AuthorDate: Tue Apr 11 16:38:44 2023 +0800

    1.Remove unnecessary component dependencies in metadata.yaml
    2.Add GRPC protocol and Hessian serialization
---
 .../extension/SampleCodeContributor.java           |   18 +
 .../build/maven/ApiMavenPluginCustomizer.java      |    2 +-
 .../DubboMavenProjectGenerationConfiguration.java  |   17 +-
 ...r.java => RootMavenDependenciesCustomizer.java} |    2 +-
 ...boSourceCodeProjectGenerationConfiguration.java |   12 +-
 ...oProjectSampleCodesGenerationConfiguration.java |   33 +
 .../ProtoBufCodeContributor.java}                  |   45 +-
 .../ApiMavenDependenciesCustomizer.java}           |   13 +-
 ...oDependencyProjectGenerationConfiguration.java} |   38 +-
 .../DubboGrpcBuildCustomizer.java}                 |   27 +-
 .../DubboGrpcDependenciesCustomizer.java           |   53 +
 .../dependency/DubboGrpcPluginCustomizer.java      |   76 +
 .../DubboRegisterZookeeperBuildCustomizer.java     |   72 -
 ...sumerDubboRegisterZookeeperBuildCustomizer.java |   47 -
 .../src/main/resources/META-INF/spring.factories   |    2 +-
 .../src/main/resources/metadata.yaml               | 2317 +++++---------------
 .../api/java/DemoService.java.mustache             |   10 +
 .../api/java/RequestData.java.mustache             |   26 +
 .../api/java/ResponseData.java.mustache            |   26 +
 .../java/DemoServiceImpl.java.mustache             |   15 +
 .../resources/application.properties.mustache      |    4 +
 .../api/proto/DemoService.proto.mustache           |   22 +
 .../java/DemoServiceImpl.java.mustache             |   19 +
 .../resources/application.properties.mustache      |    4 +
 .../resources/application.properties.mustache      |    3 +
 .../resources/application.properties.mustache      |    4 +
 .../resources/application.properties.mustache      |    3 +
 .../resources/application.properties.mustache      |    3 +
 .../resources/application.properties.mustache      |    3 -
 .../codes/dubbo/api/java/DemoService.java.mustache |    7 -
 .../codes/dubbo/java/DemoServiceImpl.java.mustache |   12 -
 .../resources/application.properties.mustache      |    1 -
 proto/DemoService.proto/DemoService.proto          |   22 +
 33 files changed, 987 insertions(+), 1971 deletions(-)

diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/SampleCodeContributor.java b/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/SampleCodeContributor.java
index b1ede7b..07d0491 100644
--- a/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/SampleCodeContributor.java
+++ b/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/SampleCodeContributor.java
@@ -125,6 +125,10 @@ public class SampleCodeContributor implements ProjectContributor {
             List<RepoRenderResult.TemplateRenderResult> resources = result.getResults("resources");
             resources.forEach(res -> writeResources(res, language, projectRoot, structure));
 
+            // write protobuf file
+            List<RepoRenderResult.TemplateRenderResult> proto = result.getResults("proto");
+            proto.forEach(res -> writeProtoBuf(res, language, projectRoot, structure));
+
             // write root
             if (module.isRoot()) {
                 List<RepoRenderResult.TemplateRenderResult> roots = result.getResults("root");
@@ -133,6 +137,7 @@ public class SampleCodeContributor implements ProjectContributor {
         });
     }
 
+
     protected boolean filter(RepoRenderResult.TemplateRenderResult templateRenderResult) {
 
         return !(templateRenderResult.getFileName().endsWith("md") && templateRenderResult.getFileName().startsWith("README"));
@@ -252,6 +257,19 @@ public class SampleCodeContributor implements ProjectContributor {
         }
     }
 
+    protected void writeProtoBuf(RepoRenderResult.TemplateRenderResult result, Language language, Path projectRoot, SourceStructure structure) {
+        String content = result.getContent();
+        Path path = result.getPath();
+
+        Path rootDirectory = structure.getRootDirectory();
+        path = rootDirectory.resolve(path);
+        try {
+            doWirte(path, content, false);
+        } catch (IOException e) {
+            throw new BizRuntimeException(ErrorCodeEnum.SYSTEM_ERROR, "write protobuf error", e);
+        }
+    }
+
     protected Path reslovePackagePath(Path sourceRoot, String content) {
         Path path = sourceRoot;
         Matcher matcher = Pattern.compile(PACKAGE_PATTEN).matcher(content);
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/ApiMavenPluginCustomizer.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/ApiMavenPluginCustomizer.java
index 8084e78..40acad4 100644
--- a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/ApiMavenPluginCustomizer.java
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/ApiMavenPluginCustomizer.java
@@ -39,6 +39,6 @@ public class ApiMavenPluginCustomizer implements BuildCustomizer<MavenBuild> {
 
     @Override
     public int getOrder() {
-        return LOWEST_PRECEDENCE;
+        return 3;
     }
 }
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DubboMavenProjectGenerationConfiguration.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DubboMavenProjectGenerationConfiguration.java
index 34b6b92..e71583a 100644
--- a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DubboMavenProjectGenerationConfiguration.java
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DubboMavenProjectGenerationConfiguration.java
@@ -18,9 +18,11 @@ package org.apache.dubbo.initializer.generation.extension.build.maven;
 
 import com.alibaba.initializer.generation.InitializerProjectGenerationConfiguration;
 import com.alibaba.initializer.generation.condition.ConditionalOnRequestedArchitecture;
+import io.spring.initializr.generator.buildsystem.Build;
+import io.spring.initializr.generator.buildsystem.Dependency;
 import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
 import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
-import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
+import io.spring.initializr.generator.spring.build.BuildCustomizer;
 import org.apache.dubbo.initializer.generation.condition.ConditionalOnRequestedModule;
 import org.springframework.context.annotation.Bean;
 
@@ -46,9 +48,16 @@ public class DubboMavenProjectGenerationConfiguration {
     }
 
     @Bean
-    @ConditionalOnRequestedModule({"root", "api"})
-    public DefaultMavenDependenciesCustomizer defaultMavenDependenciesCustomizer() {
-        return new DefaultMavenDependenciesCustomizer();
+    @ConditionalOnRequestedModule("root")
+    public RootMavenDependenciesCustomizer rootMavenDependenciesCustomizer() {
+        return new RootMavenDependenciesCustomizer();
+    }
+
+
+    @Bean
+    @ConditionalOnRequestedModule("service")
+    public BuildCustomizer<Build> defaultStarterBuildCustomizer() {
+        return build -> build.dependencies().add("dubbo-starter", Dependency.withCoordinates("org.apache.dubbo", "dubbo-spring-boot-starter").build());
     }
 
 }
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DefaultMavenDependenciesCustomizer.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/RootMavenDependenciesCustomizer.java
similarity index 95%
copy from initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DefaultMavenDependenciesCustomizer.java
copy to initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/RootMavenDependenciesCustomizer.java
index d2ff94a..f8c9901 100644
--- a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DefaultMavenDependenciesCustomizer.java
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/RootMavenDependenciesCustomizer.java
@@ -29,7 +29,7 @@ import io.spring.initializr.generator.spring.build.BuildCustomizer;
  * @author Weix Sun
  * @see io.spring.initializr.generator.spring.build.DefaultStarterBuildCustomizer,io.spring.initializr.generator.spring.build.DependencyManagementBuildCustomizer
  */
-public class DefaultMavenDependenciesCustomizer implements BuildCustomizer<MavenBuild> {
+public class RootMavenDependenciesCustomizer implements BuildCustomizer<MavenBuild> {
 
     static final String DEFAULT_STARTER = "root_starter";
     static final String TEST_STARTER = "test";
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/DubboSourceCodeProjectGenerationConfiguration.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/DubboSourceCodeProjectGenerationConfiguration.java
index 96f11a0..caeada2 100644
--- a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/DubboSourceCodeProjectGenerationConfiguration.java
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/DubboSourceCodeProjectGenerationConfiguration.java
@@ -3,7 +3,6 @@ package org.apache.dubbo.initializer.generation.extension.codes;
 import com.alibaba.initializer.generation.InitializerProjectGenerationConfiguration;
 import com.alibaba.initializer.generation.condition.ConditionalOnModule;
 import com.alibaba.initializer.generation.condition.ConditionalOnRequestedArchitecture;
-import com.alibaba.initializer.generation.extension.SampleCodeContributor;
 import io.spring.initializr.generator.condition.ConditionalOnLanguage;
 import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
 import io.spring.initializr.generator.language.Annotation;
@@ -18,15 +17,10 @@ import org.springframework.context.annotation.Bean;
 @ConditionalOnLanguage(JavaLanguage.ID)
 public class DubboSourceCodeProjectGenerationConfiguration {
     @Bean
-    @ConditionalOnRequestedDependency("dubbo")
     public MainApplicationTypeCustomizer<TypeDeclaration> enableDubboAnnotator() {
-        return (typeDeclaration) -> {
-            typeDeclaration.annotate(Annotation.name("org.apache.dubbo.config.spring.context.annotation.EnableDubbo"));
-        };
+        return (typeDeclaration) -> typeDeclaration.annotate(Annotation.name("org.apache.dubbo.config.spring.context.annotation.EnableDubbo"));
     }
 
-//    @Bean
-//    public DubboSampleCodeContributor dubboSampleCodeContributor() {
-//        return new DubboSampleCodeContributor();
-//    }
+
+
 }
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/sample/DubboProjectSampleCodesGenerationConfiguration.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/sample/DubboProjectSampleCodesGenerationConfiguration.java
new file mode 100644
index 0000000..24f9391
--- /dev/null
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/sample/DubboProjectSampleCodesGenerationConfiguration.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 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.initializer.generation.extension.codes.sample;
+
+import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
+import org.springframework.context.annotation.Bean;
+
+/**
+ *  @author <a href="mailto:15835991162@163.com">ErDan Wang</a>
+ */
+@ProjectGenerationConfiguration
+public class DubboProjectSampleCodesGenerationConfiguration {
+
+//    @Bean
+//    public ProtoBufCodeContributor protoBufCodeContributor() {
+//        return new ProtoBufCodeContributor();
+//    }
+
+}
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/DubboSampleCodeContributor.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/sample/ProtoBufCodeContributor.java
similarity index 82%
rename from initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/DubboSampleCodeContributor.java
rename to initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/sample/ProtoBufCodeContributor.java
index 890e4dc..91ebdf5 100644
--- a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/DubboSampleCodeContributor.java
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/codes/sample/ProtoBufCodeContributor.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.initializer.generation.extension.codes;
+package org.apache.dubbo.initializer.generation.extension.codes.sample;
 
 import com.alibaba.initializer.core.constants.ErrorCodeEnum;
 import com.alibaba.initializer.core.exception.BizRuntimeException;
@@ -56,7 +56,7 @@ import static com.alibaba.initializer.generation.constants.BootstrapTemplateRend
 /**
  * @author @author <a href="mailto:15835991162@163.com">ErDan Wang</a>
  */
-public class DubboSampleCodeContributor implements ProjectContributor {
+public class ProtoBufCodeContributor implements ProjectContributor {
 
     @Value("${application.democode-path}")
     private String templates;
@@ -106,19 +106,10 @@ public class DubboSampleCodeContributor implements ProjectContributor {
             CodeTemplateRepo repo = loader.load(uri);
             RepoRenderResult result = renderer.render(repo, params);
 
-            // write code
+            // write protobuf file
             List<RepoRenderResult.TemplateRenderResult> codes = result.getResults(language.id());
             codes.forEach(res -> writeCode(res, language, projectRoot, structure));
 
-            // write resources
-            List<RepoRenderResult.TemplateRenderResult> resources = result.getResults("resources");
-            resources.forEach(res -> writeResources(res, language, projectRoot, structure));
-
-            // write root
-            if (module.isRoot()) {
-                List<RepoRenderResult.TemplateRenderResult> roots = result.getResults("root");
-                roots.forEach(res -> writeRoot(res, language, projectRoot, structure));
-            }
         });
     }
 
@@ -127,12 +118,6 @@ public class DubboSampleCodeContributor implements ProjectContributor {
         return !(templateRenderResult.getFileName().endsWith("md") && templateRenderResult.getFileName().startsWith("README"));
     }
 
-    protected Multimap<Dependency, String> getReposWithDoubleUris(Map<Dependency, String> dependencyRepoUris) {
-        Multimap<Dependency, String> doubleUris = HashMultimap.create();
-
-        return null;
-    }
-
     protected Map<Dependency, String> getRepos(InitializerProjectDescription description) {
         Map<String, Dependency> dependencyMap = description.getRequestedDependencies();
         Architecture arch = description.getArchitecture();
@@ -217,30 +202,6 @@ public class DubboSampleCodeContributor implements ProjectContributor {
         }
     }
 
-    protected void writeResources(RepoRenderResult.TemplateRenderResult result, Language language, Path projectRoot, SourceStructure structure) {
-        String content = result.getContent();
-        Path path = result.getPath();
-
-        path = structure.getResourcesDirectory().resolve(path.subpath(1, path.getNameCount()));
-
-        try {
-            doWirte(path, content, true);
-        } catch (IOException e) {
-            throw new BizRuntimeException(ErrorCodeEnum.SYSTEM_ERROR, "write code error", e);
-        }
-    }
-
-    protected void writeRoot(RepoRenderResult.TemplateRenderResult result, Language language, Path projectRoot, SourceStructure structure) {
-        Path path = projectRoot.resolve(result.getPath().subpath(1, result.getPath().getNameCount()));
-
-        String content = result.getContent();
-        try {
-            doWirte(path, content, true);
-        } catch (IOException e) {
-            throw new BizRuntimeException(ErrorCodeEnum.SYSTEM_ERROR, "write code error", e);
-        }
-    }
-
     protected Path reslovePackagePath(Path sourceRoot, String content) {
         Path path = sourceRoot;
         Matcher matcher = Pattern.compile(PACKAGE_PATTEN).matcher(content);
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DefaultMavenDependenciesCustomizer.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/ApiMavenDependenciesCustomizer.java
similarity index 73%
rename from initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DefaultMavenDependenciesCustomizer.java
rename to initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/ApiMavenDependenciesCustomizer.java
index d2ff94a..f94fa68 100644
--- a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DefaultMavenDependenciesCustomizer.java
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/ApiMavenDependenciesCustomizer.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.initializer.generation.extension.build.maven;
+package org.apache.dubbo.initializer.generation.extension.dependency;
 
 import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
 import io.spring.initializr.generator.spring.build.BuildCustomizer;
@@ -29,19 +29,10 @@ import io.spring.initializr.generator.spring.build.BuildCustomizer;
  * @author Weix Sun
  * @see io.spring.initializr.generator.spring.build.DefaultStarterBuildCustomizer,io.spring.initializr.generator.spring.build.DependencyManagementBuildCustomizer
  */
-public class DefaultMavenDependenciesCustomizer implements BuildCustomizer<MavenBuild> {
-
-    static final String DEFAULT_STARTER = "root_starter";
-    static final String TEST_STARTER = "test";
+public class ApiMavenDependenciesCustomizer implements BuildCustomizer<MavenBuild> {
 
     @Override
     public void customize(MavenBuild build) {
-//        if (build.dependencies().has(DEFAULT_STARTER)) {
-//            build.dependencies().remove(DEFAULT_STARTER);
-//        }
-//        if (build.dependencies().has(TEST_STARTER)) {
-//            build.dependencies().remove(TEST_STARTER);
-//        }
         // Remove all dependencies, after the 'dependencies.bom' analysis is completed
         build.dependencies().ids().toList().forEach(id -> build.dependencies().remove(id));
     }
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/dubbregisterzookeeper/DubboRegisterZookeeperProjectGenerationConfiguration.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboDependencyProjectGenerationConfiguration.java
similarity index 54%
rename from initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/dubbregisterzookeeper/DubboRegisterZookeeperProjectGenerationConfiguration.java
rename to initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboDependencyProjectGenerationConfiguration.java
index a39d539..2d7a662 100644
--- a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/dubbregisterzookeeper/DubboRegisterZookeeperProjectGenerationConfiguration.java
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboDependencyProjectGenerationConfiguration.java
@@ -14,38 +14,46 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.initializer.generation.extension.dependency.dubbregisterzookeeper;
+package org.apache.dubbo.initializer.generation.extension.dependency;
 
 import com.alibaba.initializer.generation.condition.ConditionalOnRequestedArchitecture;
 import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
 import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
 import org.apache.dubbo.initializer.generation.condition.ConditionalOnRequestedModule;
-import org.apache.dubbo.initializer.generation.extension.dependency.dubbregisterzookeeper.architecture.pic.consumer.ConsumerDubboRegisterZookeeperBuildCustomizer;
-
 import org.springframework.context.annotation.Bean;
 
 /**
- * {@link ProjectGenerationConfiguration} for generation of projects that use 'dubbo-register-zookeeper'.
- *
- * @author Weix Sun
+ * @author <a href="mailto:15835991162@163.com">ErDan Wang</a>
  */
 @ProjectGenerationConfiguration
-@ConditionalOnRequestedDependency("dubbo-register-zookeeper")
-@ConditionalOnRequestedArchitecture("pic")
-class DubboRegisterZookeeperProjectGenerationConfiguration {
+@ConditionalOnRequestedArchitecture("dubbo")
+class DubboDependencyProjectGenerationConfiguration {
 
+	@Bean
+	@ConditionalOnRequestedDependency("dubbo-protocol-grpc")
+	public DubboGrpcBuildCustomizer dubboGrpcBuildCustomizer() {
+		return new DubboGrpcBuildCustomizer();
+	}
 
 	@Bean
-	@ConditionalOnRequestedModule("root")
-	DubboRegisterZookeeperBuildCustomizer dubboRegisterZookeeperBuildCustomizer() {
-		return new DubboRegisterZookeeperBuildCustomizer();
+	@ConditionalOnRequestedDependency("dubbo-protocol-grpc")
+	@ConditionalOnRequestedModule("api")
+	public DubboGrpcPluginCustomizer dubboGrpcPluginCustomizer() {
+		return new DubboGrpcPluginCustomizer();
 	}
 
 	@Bean
-	@ConditionalOnRequestedModule("consumer")
-	ConsumerDubboRegisterZookeeperBuildCustomizer ConsumerDubboRegisterZookeeperBuildCustomizer() {
-		return new ConsumerDubboRegisterZookeeperBuildCustomizer();
+	@ConditionalOnRequestedDependency("dubbo-protocol-grpc")
+	public DubboGrpcDependenciesCustomizer dubboGrpcDependenciesCustomizer() {
+		return new DubboGrpcDependenciesCustomizer();
 	}
 
+//	@Bean
+//	@ConditionalOnRequestedDependency("dubbo-protocol-default")
+//	@ConditionalOnRequestedModule("api")
+//	public ApiMavenDependenciesCustomizer defaultMavenDependenciesCustomizer() {
+//		return new ApiMavenDependenciesCustomizer();
+//	}
+
 
 }
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/ApiMavenPluginCustomizer.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboGrpcBuildCustomizer.java
similarity index 53%
copy from initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/ApiMavenPluginCustomizer.java
copy to initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboGrpcBuildCustomizer.java
index 8084e78..827bc18 100644
--- a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/ApiMavenPluginCustomizer.java
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboGrpcBuildCustomizer.java
@@ -14,31 +14,30 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.initializer.generation.extension.build.maven;
+package org.apache.dubbo.initializer.generation.extension.dependency;
 
+import io.spring.initializr.generator.buildsystem.Dependency;
 import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
 import io.spring.initializr.generator.spring.build.BuildCustomizer;
 
+import java.util.HashSet;
+import java.util.Set;
+
 /**
- * after MavenComplierPluginCustomizer,SpringBootBomMavenCustomizer
- * <pre>
- * 1.Remove other all plugins from api module pom.xml
- * </pre>
+ * 1.Add grpc-netty dependency exclude
  *
- * @author Weix Sun
- * @see com.alibaba.initializer.generation.extension.build.maven.MavenComplierPluginCustomizer,com.alibaba.initializer.generation.extension.build.maven.SpringBootBomMavenCustomizer
+ * @author <a href="mailto:15835991162@163.com">ErDan Wang</a>
  */
-public class ApiMavenPluginCustomizer implements BuildCustomizer<MavenBuild> {
+public class DubboGrpcBuildCustomizer implements BuildCustomizer<MavenBuild> {
 
 
     @Override
     public void customize(MavenBuild build) {
-        build.plugins().remove("org.apache.maven.plugins", "maven-compiler-plugin");
-        build.plugins().remove("org.springframework.boot", "spring-boot-maven-plugin");
+        //1.Add grpc-netty dependency exclude
+        Set<Dependency.Exclusion> exclusions = new HashSet<>();
+        exclusions.add(new Dependency.Exclusion("io.netty", "netty-codec-http2"));
+        exclusions.add(new Dependency.Exclusion("io.netty", "netty-handler-proxy"));
+        build.dependencies().add("grpc-netty", Dependency.withCoordinates("io.grpc", "grpc-netty").exclusions(exclusions));
     }
 
-    @Override
-    public int getOrder() {
-        return LOWEST_PRECEDENCE;
-    }
 }
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboGrpcDependenciesCustomizer.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboGrpcDependenciesCustomizer.java
new file mode 100644
index 0000000..c27bf7c
--- /dev/null
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboGrpcDependenciesCustomizer.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 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.initializer.generation.extension.dependency;
+
+import com.alibaba.initializer.metadata.Module;
+import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
+import io.spring.initializr.generator.spring.build.BuildCustomizer;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 1.Apart from GRPC dependencies, remove other dependencies of the API
+ * 2.GRPC dependency removal for serivce
+ *
+ * @author <a href="mailto:15835991162@163.com">ErDan Wang</a>
+ * after  DependencyManagementBuildCustomizer
+ * @see io.spring.initializr.generator.spring.build.DependencyManagementBuildCustomizer
+ */
+public class DubboGrpcDependenciesCustomizer implements BuildCustomizer<MavenBuild> {
+
+
+    @Autowired
+    private Module module;
+
+    @Override
+    public void customize(MavenBuild build) {
+        // 1.Apart from GRPC dependencies, remove other dependencies of the API
+        // 2.GRPC dependency removal for serivce
+        build.dependencies().ids().toList().forEach(id -> {
+            boolean has = (id.equalsIgnoreCase("grpc-netty-shaded") || id.equalsIgnoreCase("grpc-protobuf") || id.equalsIgnoreCase("grpc-stub") || id.equalsIgnoreCase("grpc-netty") || id.equalsIgnoreCase("dubbo-common"));
+            if ((module.isMain() && has) || (!module.isMain() && !has))
+                build.dependencies().remove(id);
+        });
+    }
+
+    @Override
+    public int getOrder() {
+        return LOWEST_PRECEDENCE;
+    }
+}
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboGrpcPluginCustomizer.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboGrpcPluginCustomizer.java
new file mode 100644
index 0000000..1d1019d
--- /dev/null
+++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/DubboGrpcPluginCustomizer.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 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.initializer.generation.extension.dependency;
+
+import com.alibaba.initializer.metadata.Module;
+import io.spring.initializr.generator.buildsystem.Dependency;
+import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
+import io.spring.initializr.generator.spring.build.BuildCustomizer;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * 1.Add protobuf Plugin for the API module   after  ApiMavenPluginCustomizer
+ *
+ * @author <a href="mailto:15835991162@163.com">ErDan Wang</a>
+ */
+public class DubboGrpcPluginCustomizer implements BuildCustomizer<MavenBuild> {
+
+    @Autowired
+    private Module module;
+
+    @Override
+    public void customize(MavenBuild build) {
+        build.plugins().add("kr.motd.maven", "os-maven-plugin", builder -> {
+            builder.execution("os-maven-plugin", executionBuilder -> {
+                executionBuilder.phase("initialize");
+                executionBuilder.goal("detect");
+            });
+            builder.version("1.7.1");
+        });
+        build.plugins().add("org.xolstice.maven.plugins", "protobuf-maven-plugin",
+                builder -> {
+                    builder.configuration(configuration -> {
+                                configuration.add("protocArtifact", "com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}");
+                                configuration.add("pluginId", "grpc-java");
+                                configuration.add("pluginArtifact", "io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}");
+                                configuration.add("protocPlugins", nestedConfiguration -> nestedConfiguration.add("protocPlugin", nestedConfiguration1 -> {
+                                    nestedConfiguration1.add("id", "dubbo-grpc");
+                                    nestedConfiguration1.add("groupId", "org.apache.dubbo");
+                                    nestedConfiguration1.add("artifactId", "dubbo-compiler");
+                                    nestedConfiguration1.add("version", "0.0.1");
+                                    nestedConfiguration1.add("mainClass", "org.apache.dubbo.gen.grpc.DubboGrpcGenerator");
+                                }));
+                            }
+
+                    );
+                    builder.execution("protobuf-maven-plugin", executionBuilder -> {
+                        executionBuilder.goal("compile");
+                        executionBuilder.goal("compile-custom");
+                    });
+                    builder.version("0.6.1");
+                }
+        );
+    }
+
+    @Override
+    public int getOrder() {
+        return 4;
+    }
+}
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/dubbregisterzookeeper/DubboRegisterZookeeperBuildCustomizer.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/dubbregisterzookeeper/DubboRegisterZookeeperBuildCustomizer.java
deleted file mode 100644
index 2eebc3f..0000000
--- a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/dubbregisterzookeeper/DubboRegisterZookeeperBuildCustomizer.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * 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.initializer.generation.extension.dependency.dubbregisterzookeeper;
-
-import java.util.List;
-
-import io.spring.initializr.generator.buildsystem.Build;
-import io.spring.initializr.generator.buildsystem.Dependency;
-import io.spring.initializr.generator.buildsystem.DependencyScope;
-import io.spring.initializr.generator.spring.build.BuildCustomizer;
-import io.spring.initializr.generator.version.VersionReference;
-
-import org.springframework.core.Ordered;
-
-/**
- * after DependencyManagementBuildCustomizer
- * @author Weix Sun
- *
- * @see io.spring.initializr.generator.spring.build.DependencyManagementBuildCustomizer
- */
-class DubboRegisterZookeeperBuildCustomizer implements BuildCustomizer<Build>, Ordered {
-
-	private static final int DependencyManagementBuildCustomizer_After = Ordered.LOWEST_PRECEDENCE - 5 + 5;
-
-	@Override
-	public void customize(Build build) {
-		build.properties().version("slf4j-log4j12.version", "1.7.25");
-
-		// Remove all dependencies, after the 'dependencies.bom' analysis is completed
-		List<String> ids = build.dependencies().ids().toList();
-		ids.forEach(id -> build.dependencies().remove(id));
-
-		// Add additional dependencies
-		build.dependencies().add("org.slf4j_slf4j-api", "org.slf4j", "slf4j-api", DependencyScope.COMPILE);
-
-		Dependency slf4jlog4j12Dependency =
-				Dependency.withCoordinates("org.slf4j", "slf4j-log4j12")
-						.version(VersionReference.ofProperty("slf4j-log4j12.version")).build();
-		build.dependencies().add("org.slf4j_slf4j-log4j12", slf4jlog4j12Dependency);
-
-		build.dependencies().add("log4j_log4j", "log4j", "log4j", DependencyScope.COMPILE);
-
-//		// Remove redundant dependencies, after the 'dependencies.bom' analysis is completed
-//		build.dependencies().remove("dubbo-register-zookeeper");
-//		build.dependencies().remove("metrics-core");
-//		build.dependencies().remove("test");
-
-
-
-
-	}
-
-	@Override
-	public int getOrder() {
-		return DependencyManagementBuildCustomizer_After;
-	}
-
-}
diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/dubbregisterzookeeper/architecture/pic/consumer/ConsumerDubboRegisterZookeeperBuildCustomizer.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/dubbregisterzookeeper/architecture/pic/consumer/ConsumerDubboRegisterZookeeperBuildCustomizer.java
deleted file mode 100644
index 40262ad..0000000
--- a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/dependency/dubbregisterzookeeper/architecture/pic/consumer/ConsumerDubboRegisterZookeeperBuildCustomizer.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.initializer.generation.extension.dependency.dubbregisterzookeeper.architecture.pic.consumer;
-
-import io.spring.initializr.generator.buildsystem.Build;
-import io.spring.initializr.generator.buildsystem.Dependency;
-import io.spring.initializr.generator.buildsystem.DependencyScope;
-import io.spring.initializr.generator.spring.build.BuildCustomizer;
-import io.spring.initializr.generator.version.VersionReference;
-
-import org.springframework.core.Ordered;
-
-/**
- * after DependencyManagementBuildCustomizer
- * @author Weix Sun
- *
- * @see io.spring.initializr.generator.spring.build.DependencyManagementBuildCustomizer
- */
-public class ConsumerDubboRegisterZookeeperBuildCustomizer implements BuildCustomizer<Build>, Ordered {
-
-	private static final int DependencyManagementBuildCustomizer_After = Ordered.LOWEST_PRECEDENCE - 5 + 5;
-
-	@Override
-	public void customize(Build build) {
-		build.dependencies().remove("metrics-core");
-	}
-
-	@Override
-	public int getOrder() {
-		return DependencyManagementBuildCustomizer_After;
-	}
-
-}
diff --git a/initializer-generator/src/main/resources/META-INF/spring.factories b/initializer-generator/src/main/resources/META-INF/spring.factories
index 3780841..48df3bf 100644
--- a/initializer-generator/src/main/resources/META-INF/spring.factories
+++ b/initializer-generator/src/main/resources/META-INF/spring.factories
@@ -8,7 +8,7 @@ io.spring.start.site.extension.build.gradle.GradleProjectGenerationConfiguration
 org.apache.dubbo.initializer.generation.extension.build.maven.DubboMavenProjectGenerationConfiguration,\
 org.apache.dubbo.initializer.generation.extension.codes.DubboSourceCodeProjectGenerationConfiguration,\
 org.apache.dubbo.initializer.generation.extension.codes.language.DubboJavaProjectGenerationConfiguration,\
-org.apache.dubbo.initializer.generation.extension.dependency.dubbregisterzookeeper.DubboRegisterZookeeperProjectGenerationConfiguration,\
+org.apache.dubbo.initializer.generation.extension.dependency.DubboDependencyProjectGenerationConfiguration,\
 com.alibaba.initializer.generation.extension.build.maven.ArchedMavenProjectGenerationConfiguration,\
 io.spring.start.site.extension.build.maven.MavenProjectGenerationConfiguration,\
 com.alibaba.initializer.generation.extension.architecture.ArchitectureProjectGenerationConfiguration,\
diff --git a/initializer-generator/src/main/resources/metadata.yaml b/initializer-generator/src/main/resources/metadata.yaml
index 34a3b06..655c762 100644
--- a/initializer-generator/src/main/resources/metadata.yaml
+++ b/initializer-generator/src/main/resources/metadata.yaml
@@ -7,7 +7,7 @@ initializr:
         versionProperty: dubbo.version
         mappings:
           - compatibilityRange: "2.3.0.M1"
-            version: 3.0.7
+            version: 3.1.7
       apache-dubbo-zookeeper:
         groupId: org.apache.dubbo
         artifactId: dubbo-dependencies-zookeeper
@@ -15,182 +15,16 @@ initializr:
         additionalBoms: [ apache-dubbo ]
         mappings:
           - compatibilityRange: "2.3.0.M1"
-            version: 3.0.7
-      codecentric-spring-boot-admin:
-        groupId: de.codecentric
-        artifactId: spring-boot-admin-dependencies
-        versionProperty: spring-boot-admin.version
-        mappings:
-          - compatibilityRange: "[2.3.0.M1,2.5.0-M1)"
-            version: 2.4.3
-          - compatibilityRange: "[2.5.0.M1,2.6.0-M1)"
-            version: 2.5.6
-          - compatibilityRange: "[2.6.0.M1,2.7.0-M1)"
-            version: 2.6.8
-          - compatibilityRange: "[2.7.0.M1,3.0.0-M1)"
-            version: 2.7.4
-          - compatibilityRange: "[3.0.0-M1,3.1.0-M1)"
-            version: 3.0.0-M4
-      solace-spring-boot:
-        groupId: com.solace.spring.boot
-        artifactId: solace-spring-boot-bom
-        versionProperty: solace-spring-boot.version
-        mappings:
-          - compatibilityRange: "[2.3.0.M1,2.6.0-M1)"
-            version: 1.1.0
-          - compatibilityRange: "[2.6.0.M1,3.0.0-M1)"
-            version: 1.2.2
-      solace-spring-cloud:
-        groupId: com.solace.spring.cloud
-        artifactId: solace-spring-cloud-bom
-        versionProperty: solace-spring-cloud.version
-        mappings:
-          - compatibilityRange: "[2.3.0.M1,2.4.0-M1)"
-            version: 1.1.1
-          - compatibilityRange: "[2.4.0.M1,2.6.0-M1)"
-            version: 2.1.0
-          - compatibilityRange: "[2.6.0.M1,3.0.0-M1)"
-            version: 2.3.2
-      spring-cloud:
-        groupId: org.springframework.cloud
-        artifactId: spring-cloud-dependencies
-        versionProperty: spring-cloud.version
-        order: 50
-        mappings:
-          - compatibilityRange: "[2.2.0.RELEASE,2.4.0.M1)"
-            version: Hoxton.SR12
-          - compatibilityRange: "[2.4.0.M1,2.6.0-M1)"
-            version: 2020.0.6
-          - compatibilityRange: "[2.6.0-M1,2.6.0-M3)"
-            version: 2021.0.0-M1
-            repositories: spring-milestones
-          - compatibilityRange: "[2.6.0-M3,2.6.0-RC1)"
-            version: 2021.0.0-M3
-            repositories: spring-milestones
-          - compatibilityRange: "[2.6.0-RC1,2.6.1)"
-            version: 2021.0.0-RC1
-            repositories: spring-milestones
-          - compatibilityRange: "[2.6.1,3.0.0-M1)"
-            version: 2021.0.5
-          - compatibilityRange: "[3.0.0-M1,3.0.0-M2)"
-            version: 2022.0.0-M1
-            repositories: spring-milestones
-          - compatibilityRange: "[3.0.0-M2,3.0.0-M3)"
-            version: 2022.0.0-M2
-            repositories: spring-milestones
-          - compatibilityRange: "[3.0.0-M3,3.0.0-M4)"
-            version: 2022.0.0-M3
-            repositories: spring-milestones
-          - compatibilityRange: "[3.0.0-M4,3.0.0-M5)"
-            version: 2022.0.0-M4
-            repositories: spring-milestones
-          - compatibilityRange: "[3.0.0-M5,3.0.0-RC1)"
-            version: 2022.0.0-M5
-            repositories: spring-milestones
-          - compatibilityRange: "[3.0.0-RC1,3.0.0-RC2)"
-            version: 2022.0.0-RC1
-            repositories: spring-milestones
-          - compatibilityRange: "[3.0.0-RC2,3.1.0-M1)"
-            version: 2022.0.0-RC2
-            repositories: spring-milestones
-      spring-cloud-azure:
-        groupId: com.azure.spring
-        artifactId: spring-cloud-azure-dependencies
-        versionProperty: spring-cloud-azure.version
-        mappings:
-          - compatibilityRange: "[2.5.0.M1,2.7.0-M1)"
-            version: 4.3.0
-          - compatibilityRange: "[2.7.0-M1,3.0.0-M1)"
-            version: 4.4.1
-          - compatibilityRange: "[3.0.0-M1,3.1.0-M1)"
-            version: 6.0.0-beta.3
-      spring-cloud-gcp:
-        groupId: com.google.cloud
-        artifactId: spring-cloud-gcp-dependencies
-        versionProperty: spring-cloud-gcp.version
-        additionalBoms: [ spring-cloud ]
-        mappings:
-          - compatibilityRange: "[2.4.0-M1,2.6.0-M1)"
-            version: 2.0.11
-          - compatibilityRange: "[2.6.0-M1,3.0.0-M1)"
-            version: 3.4.0
-      spring-cloud-services:
-        groupId: io.pivotal.spring.cloud
-        artifactId: spring-cloud-services-dependencies
-        versionProperty: spring-cloud-services.version
-        additionalBoms: [ spring-cloud ]
-        mappings:
-          - compatibilityRange: "[2.3.0.RELEASE,2.4.0-M1)"
-            version: 2.3.0.RELEASE
-          - compatibilityRange: "[2.4.0-M1,2.5.0-M1)"
-            version: 2.4.1
-          - compatibilityRange: "[2.5.0-M1,2.6.0-M1)"
-            version: 3.3.0
-          - compatibilityRange: "[2.6.0-M1,2.7.0-M1)"
-            version: 3.4.0
-          - compatibilityRange: "[2.7.0-M1,3.0.0-M1)"
-            version: 3.5.0
-      spring-shell:
-        groupId: org.springframework.shell
-        artifactId: spring-shell-dependencies
-        versionProperty: spring-shell.version
-        mappings:
-          - compatibilityRange: "[2.7.0,3.0.0-M1)"
-            version: 2.1.3
-          - compatibilityRange: "[3.0.0-M1,3.1.0-M1)"
-            version: 3.0.0-M2
-            repositories: spring-milestones
-      testcontainers:
-        groupId: org.testcontainers
-        artifactId: testcontainers-bom
-        version: 1.17.6
-        versionProperty: testcontainers.version
-      vaadin:
-        groupId: com.vaadin
-        artifactId: vaadin-bom
-        versionProperty: vaadin.version
-        mappings:
-          - compatibilityRange: "[2.1.0.RELEASE,2.6.0-M1)"
-            version: 14.9.2
-          - compatibilityRange: "[2.6.0-M1,2.8.0-M1)"
-            version: 23.2.10
-      wavefront:
-        groupId: com.wavefront
-        artifactId: wavefront-spring-boot-bom
-        versionProperty: wavefront.version
-        mappings:
-          - compatibilityRange: "[2.1.0.RELEASE,2.4.0-M1)"
-            version: 2.0.2
-          - compatibilityRange: "[2.4.0-M1,2.5.0-M1)"
-            version: 2.1.1
-          - compatibilityRange: "[2.5.0-M1,2.7.0-M1)"
-            version: 2.2.2
-          - compatibilityRange: "[2.7.0-M1,3.0.0-M1)"
-            version: 2.3.1
-      spring-cloud-alibaba:
-        groupId: com.alibaba.cloud
-        artifactId: spring-cloud-alibaba-dependencies
-        versionProperty: spring-cloud-alibaba.version
+            version: 3.1.7
+      io-grpc:
+        groupId: io.grpc
+        artifactId: grpc-bom
+        versionProperty: grpc.version
+        additionalBoms: [ apache-dubbo ]
+        order: 2
         mappings:
-          - compatibilityRange: "[2.6.11, 2.6.11]"
-            version: 2021.0.4.0
-          - compatibilityRange: "[2.6.0,2.6.11)"
-            version: 2021.0.1.0
-          - compatibilityRange: "[2.4.0,2.6.0)"
-            version: 2021.1
-          - compatibilityRange: "[2.2.0.RELEASE,2.4.0)"
-            version: 2.2.9.RELEASE
-          - compatibilityRange: "[2.1.0.M1,2.2.0.RELEASE)"
-            version: 2.1.4.RELEASE
-          - compatibilityRange: "[2.0.0.M1,2.1.0.M1)"
-            version: 2.0.4.RELEASE
-          - compatibilityRange: "[1.5.0.RELEASE,2.0.0.M1)"
-            version: 1.5.1.RELEASE
-      aliyun-spring-boot:
-        groupId: com.alibaba.cloud
-        artifactId: aliyun-spring-boot-dependencies
-        versionProperty: aliyun-spring-boot.version
-        version: 1.0.0
+          - compatibilityRange: "2.3.0.M1"
+            version: 1.44.1
     maven:
       parent:
         includeSpringBootBom: true
@@ -223,1560 +57,594 @@ initializr:
     - name: Dubbo Core
       bom: apache-dubbo
       content:
-      - name: Dubbo Spring Boot
-        id: dubbo
-        groupId: org.apache.dubbo
-        artifactId: dubbo-spring-boot-starter
-        description: Dubbo Spring Boot
-        starter: false
-        archCfg:
-          dubbo:
-            modules:
-              api:
-                code: true
-              service:
-                code: true
-    - name: Dubbo Registry
-      content:
-      - name: Zookeeper 注册中心
-        id: dubbo-zookeeper
-        groupId: org.apache.dubbo
-        artifactId: dubbo-dependencies-zookeeper
-        type: pom
-        description: 使用Zookeeper作为Dubbo注册中心
-        starter: false
-        compatibilityRange: "[2.0.0.RELEASE,3.1.0-M1)"
-        bom: apache-dubbo-zookeeper
-        codeOnly: false
-        #dependencies: [ "metrics-core" ]
-      - name: metrics-core
-        id: metrics-core
-        groupId: io.dropwizard.metrics
-        artifactId: metrics-core
-        starter: false
-        hide: true
-    - name: Dubbo Protocols
-      content:
-      - name: protocol1
-        id: protocol1
-        description: protocol1
-        starter: false
-    - name: Dubbo Serialization
-      content:
-      - name: serialization1
-        id: serialization1
-        description: serialization1
-        starter: false
-    - name: Alibaba Cloud
-      bom: aliyun-spring-boot
-      content:
-        - name: Alibaba Cloud RDS
-          id: sca-rds
-          description: 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。
-          groupId: com.alibaba.cloud
-          artifactId: aliyun-rds-spring-boot-starter
-          starter: false
-          links:
-            - rel: reference
-              href: https://github.com/alibaba/aliyun-spring-boot/tree/master/aliyun-spring-boot-samples/aliyun-rds-spring-boot-sample
-        - name: Alibaba Cloud Redis
-          id: sca-redis
-          description: 高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。
-          groupId: com.alibaba.cloud
-          artifactId: aliyun-redis-spring-boot-starter
-          starter: false
-          links:
-            - rel: reference
-              href: https://github.com/alibaba/aliyun-spring-boot/tree/master/aliyun-spring-boot-samples/aliyun-redis-spring-boot-sample
-        - name: Alibaba Cloud OSS
-          id: sca-oss
-          description: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务.
-          groupId: com.alibaba.cloud
-          artifactId: aliyun-oss-spring-boot-starter
-          starter: false
-          links:
-            - rel: reference
-              href: https://github.com/alibaba/aliyun-spring-boot/tree/master/aliyun-spring-boot-samples/aliyun-oss-spring-boot-sample
-        - name: Alibaba Cloud SMS
-          id: sca-sms
-          description: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道.
-          groupId: com.alibaba.cloud
-          artifactId: aliyun-sms-spring-boot-starter
+        - name: Dubbo Spring Boot Starter
+          id: dubbo-starter
+          groupId: org.apache.dubbo
+          artifactId: dubbo-spring-boot-starter
+          description: Dubbo Spring Boot starter
           starter: false
-          links:
-            - rel: reference
-              href: https://github.com/alibaba/aliyun-spring-boot/tree/master/aliyun-spring-boot-samples/aliyun-sms-spring-boot-sample
-        - name: Alibaba Cloud SchedulerX
-          id: sca-schedulerx
-          description: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时任务调度服务.
-          groupId: com.alibaba.cloud
-          artifactId: aliyun-schedulerx-spring-boot-starter
-          starter: false
-          links:
-            - rel: reference
-              href: https://github.com/alibaba/aliyun-spring-boot/tree/master/aliyun-spring-boot-samples/aliyun-schedulerx-spring-boot-sample
-    - name: Spring Cloud Alibaba
-      bom: spring-cloud-alibaba
-      compatibilityRange: "[2.0.0.RELEASE,2.6.11]"
+          hide: true
+    - name: Dubbo Registry
       content:
-        - name: Nacos Service Discovery
-          id: sca-nacos-discovery
-          description: 通过nacos实现的服务发现平台.
-          groupId: com.alibaba.cloud
-          artifactId: spring-cloud-starter-alibaba-nacos-discovery
-          starter: false
-          links:
-            - rel: reference
-              href: https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_discovery
-            - rel: guide
-              href: https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme.md
-              description: Nacos Service Discovery Example
-        - name: Spring Cloud Alibaba Sentinel
-          id: sca-sentinel
-          description: 提供 Sentinel 自动接入和配置支持,提供 Spring Web/WebFlux、Feign、RestTemplate、注解等适配
-          groupId: com.alibaba.cloud
-          artifactId: spring-cloud-starter-alibaba-sentinel
-          starter: false
-          links:
-            - rel: reference
-              href: https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_sentinel
-            - rel: guide
-              href: https://github.com/alibaba/spring-cloud-alibaba/tree/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example
-              description: Sentinel Example
-        - name: Spring Cloud Alibaba Sentinel DataSource
-          id: sca-sentinel-datasource
-          groupId: com.alibaba.cloud
-          artifactId: spring-cloud-alibaba-sentinel-datasource
-          description: 提供 Sentinel 动态数据源接入支持,方便用户整合 Nacos 等数据源动态管理规则
-          starter: false
-        - name: Spring Cloud Alibaba Sentinel Dubbo Adapter
-          id: sca-sentinel-dubbo-adapter
-          groupId: com.alibaba.csp
-          artifactId: sentinel-apache-dubbo-adapter
-          description: 提供 Sentinel 对 Dubbo 的适配能力
-          starter: false
-        - name: Spring Cloud Alibaba Sentinel Gateway
-          id: sca-sentinel-gateway
-          groupId: com.alibaba.cloud
-          artifactId: spring-cloud-alibaba-sentinel-gateway
-          description: 提供 Sentinel 网关流控自动接入支持,目前支持 Spring Cloud Gateway 和 Zuul
-          starter: false
-        - name: Spring Cloud Alibaba Seata
-          id: sca-seata
-          description: 阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案.
-          groupId: com.alibaba.cloud
-          artifactId: spring-cloud-starter-alibaba-seata
+        - name: Zookeeper 注册中心
+          id: dubbo-registry-zookeeper
+          groupId: org.apache.dubbo
+          artifactId: dubbo-dependencies-zookeeper
+          type: pom
+          description: 使用Zookeeper作为Dubbo注册中心
           starter: false
-        - name: Spring Cloud Alibaba RocketMQ
-          id: sca-rocketmq
-          description: 一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务.
-          groupId: com.alibaba.cloud
-          artifactId: spring-cloud-starter-stream-rocketmq
-          starter: false
-          links:
-            - rel: reference
-              href: https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc-zh/rocketmq.adoc
-            - rel: guide
-              href: https://help.aliyun.com/product/29530.html
-              description: RocketMQ 文档首页
-            - rel: WebConsole
-              href: https://ons.console.aliyun.com
-              description: RocketMQ Web 控制台
-        - name: Nacos Configuration
-          id: sca-nacos-config
-          description: 通过Alibaba Nacos实现配置管理:支持分布式系统中的外部化配置、配置更改时自动刷新功能
-          groupId: com.alibaba.cloud
-          artifactId: spring-cloud-starter-alibaba-nacos-config
-          starter: false
-          links:
-            - rel: reference
-              href: https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_config
-            - rel: guide
-              href: https://github.com/alibaba/spring-cloud-alibaba/tree/master/spring-cloud-alibaba-examples/nacos-example/nacos-config-example
-              description: Nacos Configuration Example
-    - name: Developer Tools
+          compatibilityRange: "[2.0.0.RELEASE,3.1.0-M1)"
+          bom: apache-dubbo-zookeeper
+        - name: Nocos 注册中心
+          id: dubbo-registry-nacos
+          groupId: org.apache.dubbo
+          artifactId: dubbo-registry-nacos
+          description: 使用Nacos作为Dubbo注册中心
+          starter: false
+          bom: apache-dubbo
+        - name: metrics-core
+          id: metrics-core
+          groupId: io.dropwizard.metrics
+          artifactId: metrics-core
+          starter: false
+          hide: true
+    - name: Dubbo Protocols
       content:
-        - name: Arthas
-          id: arthas
-          groupId: com.taobao.arthas
-          artifactId: arthas-spring-boot-starter
-          version: 3.6.7
-          scope: runtime
-          description: Arthas 是Alibaba开源的Java诊断工具,允许开发者在不修改代码或重启服务器的基础上,实现Java应用程序的运行时诊断,深受开发者喜爱;
-          starter: true
-          links:
-            - rel: reference
-              href: https://arthas.gitee.io/index.html
-        - name: GraalVM Native Support
-          id: native
-          compatibilityRange: "2.4.3"
-          groupId: org.springframework.experimental
-          artifactId: spring-native
-          description: Support for compiling Spring applications to native executables using the GraalVM native-image compiler.
-          facets:
-            - native
-          starter: false
-          repository: spring-releases
-          mappings:
-            - compatibilityRange: "[2.4.3,2.4.4)"
-              version: 0.9.0
-              repository: spring-releases
-            - compatibilityRange: "[2.4.4,2.4.5)"
-              version: 0.9.1
-              repository: spring-releases
-            - compatibilityRange: "[2.4.5,2.5.0-M1)"
-              version: 0.9.2
-              repository: spring-releases
-            - compatibilityRange: "[2.5.0-M1,2.5.2)"
-              version: 0.10.0
-              repository: spring-releases
-            - compatibilityRange: "[2.5.2,2.5.3)"
-              version: 0.10.1
-              repository: spring-releases
-            - compatibilityRange: "[2.5.3,2.5.4)"
-              version: 0.10.2
-              repository: spring-releases
-            - compatibilityRange: "[2.5.4,2.5.5)"
-              version: 0.10.3
-              repository: spring-releases
-            - compatibilityRange: "[2.5.5,2.5.6)"
-              version: 0.10.4
-              repository: spring-releases
-            - compatibilityRange: "[2.5.6,2.5.9)"
-              version: 0.10.5
-              repository: spring-releases
-            - compatibilityRange: "[2.5.9,2.6.0-M1)"
-              version: 0.10.6
-              repository: spring-releases
-            - compatibilityRange: "[2.6.0-M1,2.6.0-RC1)"
-              version: 0.11.0-M1
-              repository: spring-milestones
-            - compatibilityRange: "[2.6.0-RC1,2.6.0)"
-              version: 0.11.0-M2
-              repository: spring-milestones
-            - compatibilityRange: "[2.6.0,2.6.1)"
-              version: 0.11.0-RC1
-              repository: spring-milestones
-            - compatibilityRange: "[2.6.1,2.6.2)"
-              version: 0.11.0
-              repository: spring-releases
-            - compatibilityRange: "[2.6.2,2.6.3)"
-              version: 0.11.1
-              repository: spring-releases
-            - compatibilityRange: "[2.6.3,2.6.4)"
-              version: 0.11.2
-              repository: spring-releases
-            - compatibilityRange: "[2.6.4,2.6.6)"
-              version: 0.11.3
-              repository: spring-releases
-            - compatibilityRange: "[2.6.6,2.7.0-M1)"
-              version: 0.11.5
-              repository: spring-releases
-            - compatibilityRange: "[2.7.0-M1,2.7.1)"
-              version: 0.12.0
-            - compatibilityRange: "[2.7.1,3.0.0-M1)"
-              version: 0.12.1
-            - compatibilityRange: "3.0.0-M1"
-              groupId: org.springframework.boot
-              artifactId: spring-boot
-        - name: Spring Boot DevTools
-          id: devtools
-          groupId: org.springframework.boot
-          artifactId: spring-boot-devtools
-          scope: runtime
-          description: Provides fast application restarts, LiveReload, and configurations for enhanced development experience.
-          starter: false
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#using.devtools
-        - name: Lombok
-          id: lombok
-          groupId: org.projectlombok
-          artifactId: lombok
-          scope: annotationProcessor
-          description: Java annotation library which helps to reduce boilerplate code.
-          facets:
-            - native
+        - name: Dubbo 协议
+          id: dubbo-protocol-default
+          description: Dubbo 缺省协议
           starter: false
-        - name: Spring Configuration Processor
-          id: configuration-processor
-          groupId: org.springframework.boot
-          artifactId: spring-boot-configuration-processor
-          scope: annotationProcessor
-          description: Generate metadata for developers to offer contextual help and "code completion" when working with custom configuration keys (ex.application.properties/.yml files).
-          starter: false
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#appendix.configuration-metadata.annotation-processor
-    - name: Web
-      content:
-        - name: Spring Web
-          id: web
-          description: Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container.
-          facets:
-            - web
-            - json
-            - native
+          codeOnly: true
           archCfg:
-            mvc:
+            dubbo:
               modules:
-                web:
+                api:
                   code: true
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/rest-service/
-              description: Building a RESTful Web Service
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web
-            - rel: guide
-              href: https://spring.io/guides/gs/serving-web-content/
-              description: Serving Web Content with Spring MVC
-            - rel: guide
-              href: https://spring.io/guides/tutorials/rest/
-              description: Building REST services with Spring
-        - name: Spring Reactive Web
-          id: webflux
-          description: Build reactive web applications with Spring WebFlux and Netty.
-          facets:
-            - json
-            - reactive
-            - native
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/reactive-rest-service/
-              description: Building a Reactive RESTful Web Service
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.reactive
-        - name: Spring for GraphQL
-          id: graphql
-          compatibilityRange: "2.7.0.M1"
-          description: Build GraphQL applications with Spring for GraphQL and GraphQL Java.
-          facets:
-            - json
-        - name: Rest Repositories
-          id: data-rest
-          facets:
-            - json
-          description: Exposing Spring Data repositories over REST via Spring Data REST.
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-data-rest/
-              description: Accessing JPA Data with REST
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-neo4j-data-rest/
-              description: Accessing Neo4j Data with REST
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-mongodb-data-rest/
-              description: Accessing MongoDB Data with REST
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto.data-access.exposing-spring-data-repositories-as-rest
-        - name: Spring Session
-          id: session
-          groupId: org.springframework.session
-          artifactId: spring-session-core
-          description: Provides an API and implementations for managing user session information.
-          starter: false
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-session/reference/
-        - name: Rest Repositories HAL Explorer
-          id: data-rest-explorer
-          description: Browsing Spring Data REST repositories in your browser.
-          starter: false
-          groupId: org.springframework.data
-          artifactId: spring-data-rest-hal-explorer
-        - name: Spring HATEOAS
-          id: hateoas
-          description: Eases the creation of RESTful APIs that follow the HATEOAS principle when working with Spring / Spring MVC.
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/rest-hateoas/
-              description: Building a Hypermedia-Driven RESTful Web Service
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.spring-hateoas
-        - name: Spring Web Services
-          id: web-services
-          description: Facilitates contract-first SOAP development. Allows for the creation of flexible web services using one of the many ways to manipulate XML payloads.
-          aliases:
-           - ws
-          links:
-           - rel: guide
-             href: https://spring.io/guides/gs/producing-web-service/
-             description: Producing a SOAP web service
-           - rel: reference
-             href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#io.webservices
-        - name: Jersey
-          id: jersey
-          description: Framework for developing RESTful Web Services in Java that provides support for JAX-RS APIs.
-          facets:
-            - json
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.servlet.jersey
-        - name: Vaadin
-          id: vaadin
-          facets:
-            - web
-          groupId: com.vaadin
-          artifactId: vaadin-spring-boot-starter
-          description: A web framework that allows you to write UI in pure Java without getting bogged down in JS, HTML, and CSS.
-          bom: vaadin
-          compatibilityRange: "[2.0.0.RELEASE,2.8.0-M1)"
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/crud-with-vaadin/
-              description: Creating CRUD UI with Vaadin
-            - rel: reference
-              href: https://vaadin.com/spring
-    - name: Template Engines
-      content:
-        - name: Thymeleaf
-          id: thymeleaf
-          description: A modern server-side Java template engine for both web and standalone environments. Allows HTML to be correctly displayed in browsers and as static prototypes.
-          facets:
-            - native
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/handling-form-submission/
-              description: Handling Form Submission
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.servlet.spring-mvc.template-engines
-        - name: Apache Freemarker
-          id: freemarker
-          description: Java library to generate text output (HTML web pages, e-mails, configuration files, source code, etc.) based on templates and changing data.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.servlet.spring-mvc.template-engines
-        - name: Mustache
-          id: mustache
-          description: Logic-less Templates. There are no if statements, else clauses, or for loops. Instead there are only tags.
-          facets:
-            - native
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.servlet.spring-mvc.template-engines
-        - name: Groovy Templates
-          id: groovy-templates
-          description: Groovy templating engine.
-          facets:
-            - web
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.servlet.spring-mvc.template-engines
-    - name: Security
-      content:
-        - name: Spring Security
-          id: security
-          description: Highly customizable authentication and access-control framework for Spring applications.
-          facets:
-            - native
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/securing-web/
-              description: Securing a Web Application
-            - rel: guide
-              href: https://spring.io/guides/tutorials/spring-boot-oauth2/
-              description: Spring Boot and OAuth2
-            - rel: guide
-              href: https://spring.io/guides/gs/authenticating-ldap/
-              description: Authenticating a User with LDAP
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.security
-        - name: OAuth2 Client
-          id: oauth2-client
-          description: Spring Boot integration for Spring Security's OAuth2/OpenID Connect client features.
-          facets:
-            - native
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.security.oauth2.client
-        - name: OAuth2 Resource Server
-          id: oauth2-resource-server
-          description: Spring Boot integration for Spring Security's OAuth2 resource server features.
-          facets:
-            - native
-          compatibilityRange: 2.1.0.M2
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.security.oauth2.server
-        - name: Spring LDAP
-          id: data-ldap
-          description: Makes it easier to build Spring based applications that use the Lightweight Directory Access Protocol.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.ldap
-        - name: Okta
-          id: okta
-          description: Okta specific configuration for Spring Security/Spring Boot OAuth2 features. Enable your Spring Boot application to work with Okta via OAuth 2.0/OIDC.
-          groupId: com.okta.spring
-          artifactId: okta-spring-boot-starter
-          compatibilityRange: "[2.1.2.RELEASE,3.0.0-M1)"
-          mappings:
-            - compatibilityRange: "[2.2.0.RELEASE,2.4.0-M1)"
-              version: 1.4.0
-            - compatibilityRange: "[2.4.0-M1,2.4.1)"
-              version: 1.5.1
-            - compatibilityRange: "[2.4.1,2.5.0-M1)"
-              version: 2.0.1
-            - compatibilityRange: "[2.5.0-M1,3.0.0-M1)"
-              version: 2.1.6
-          links:
-            - rel: guide
-              href: https://github.com/okta/samples-java-spring/tree/master/okta-hosted-login
-              description: Okta-Hosted Login Page Example
-            - rel: guide
-              href: https://github.com/okta/samples-java-spring/tree/master/custom-login
-              description: Custom Login Page Example
-            - rel: guide
-              href: https://github.com/okta/samples-java-spring/tree/master/resource-server
-              description: Okta Spring Security Resource Server Example
-            - rel: reference
-              href: https://github.com/okta/okta-spring-boot#readme
-              description: Okta Spring Boot documentation
-    - name: SQL
-      content:
-        - name: JDBC API
-          id: jdbc
-          description: Database Connectivity API that defines how a client may connect and query a database.
-          facets:
-            - native
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/relational-data-access/
-              description: Accessing Relational Data using JDBC with Spring
-            - rel: guide
-              href: https://spring.io/guides/gs/managing-transactions/
-              description: Managing Transactions
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.sql
-        - name: Spring Data JPA
-          id: data-jpa
-          description: Persist data in SQL stores with Java Persistence API using Spring Data and Hibernate.
-          facets:
-            - jpa
-            - native
-          aliases:
-            - jpa
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-data-jpa/
-              description: Accessing Data with JPA
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.sql.jpa-and-spring-data
-        - name: Spring Data JDBC
-          id: data-jdbc
-          description: Persist data in SQL stores with plain JDBC using Spring Data.
-          facets:
-            - native
-          links:
-            - rel: guide
-              href: https://github.com/spring-projects/spring-data-examples/tree/master/jdbc/basics
-              description: Using Spring Data JDBC
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.sql.jdbc
-        - name: Spring Data R2DBC
-          id: data-r2dbc
-          description: Provides Reactive Relational Database Connectivity to persist data in SQL stores using Spring Data in reactive applications.
-          facets:
-            - reactive
-            - native
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-data-r2dbc/
-              description: Accessing data with R2DBC
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.sql.r2dbc
-            - rel: home
-              href: https://r2dbc.io
-              description: R2DBC Homepage
-        - name: MyBatis Framework
-          id: mybatis
-          compatibilityRange: "[2.0.0.RELEASE,3.1.0-M1)"
-          description: Persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations.
-          links:
-            - rel: guide
-              href: https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start
-              description: MyBatis Quick Start
-            - rel: reference
-              href: https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
-          groupId: org.mybatis.spring.boot
-          artifactId: mybatis-spring-boot-starter
-          mappings:
-            - compatibilityRange: "[2.1.0.RELEASE,2.5.0-M1)"
-              version: 2.1.4
-            - compatibilityRange: "[2.5.0-M1,2.7.0-M1)"
-              version: 2.2.2
-            - compatibilityRange: "[2.7.0-M1,3.0.0-M1)"
-              version: 2.3.0
-            - compatibilityRange: "3.0.0-M1"
-              version: 3.0.0
-        - name: Liquibase Migration
-          id: liquibase
-          description: Liquibase database migration and source control library.
-          groupId: org.liquibase
-          artifactId: liquibase-core
-          starter: false
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto.data-initialization.migration-tool.liquibase
-        - name: Flyway Migration
-          id: flyway
-          description: Version control for your database so you can migrate from any version (incl. an empty database) to the latest version of the schema.
-          groupId: org.flywaydb
-          artifactId: flyway-core
-          starter: false
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto.data-initialization.migration-tool.flyway
-        - name: JOOQ Access Layer
-          id: jooq
-          description: Generate Java code from your database and build type safe SQL queries through a fluent API.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.sql.jooq
-        - name: IBM DB2 Driver
-          id: db2
-          compatibilityRange: 2.2.0.M6
-          description: A JDBC driver that provides access to IBM DB2.
-          groupId: com.ibm.db2
-          artifactId: jcc
-          scope: runtime
-          starter: false
-        - name: Apache Derby Database
-          id: derby
-          description: An open source relational database implemented entirely in Java.
-          groupId: org.apache.derby
-          artifactId: derby
-          scope: runtime
-          starter: false
-        - name: H2 Database
-          id: h2
-          description: Provides a fast in-memory database that supports JDBC API and R2DBC access, with a small (2mb) footprint. Supports embedded and server modes as well as a browser based console application.
-          facets:
-            - native
-          groupId: com.h2database
-          artifactId: h2
-          scope: runtime
-          starter: false
-        - name: HyperSQL Database
-          id: hsql
-          description: Lightweight 100% Java SQL Database Engine.
-          facets:
-            - native
-          groupId: org.hsqldb
-          artifactId: hsqldb
-          scope: runtime
-          starter: false
-        - name: MariaDB Driver
-          id: mariadb
-          description: MariaDB JDBC and R2DBC driver.
-          groupId: org.mariadb.jdbc
-          artifactId: mariadb-java-client
-          scope: runtime
-          starter: false
-        - name: MS SQL Server Driver
-          id: sqlserver
-          description: A JDBC and R2DBC driver that provides access to Microsoft SQL Server and Azure SQL Database from any Java application.
-          groupId: com.microsoft.sqlserver
-          artifactId: mssql-jdbc
-          scope: runtime
-          starter: false
-        - name: MySQL Driver
-          id: mysql
-          description: MySQL JDBC and R2DBC driver.
-          facets:
-            - native
-          groupId: com.mysql
-          artifactId: mysql-connector-j
-          scope: runtime
-          starter: false
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-data-mysql/
-              description: Accessing data with MySQL
-        - name: Oracle Driver
-          id: oracle
-          description: A JDBC driver that provides access to Oracle.
-          groupId: com.oracle.database.jdbc
-          artifactId: ojdbc8
-          scope: runtime
-          starter: false
-        - name: PostgreSQL Driver
-          id: postgresql
-          description: A JDBC and R2DBC driver that allows Java programs to connect to a PostgreSQL database using standard, database independent Java code.
-          facets:
-            - native
-          groupId: org.postgresql
-          artifactId: postgresql
-          scope: runtime
-          starter: false
-    - name: NoSQL
-      content:
-        - name: Spring Data Redis (Access+Driver)
-          id: data-redis
-          description: Advanced and thread-safe Java Redis client for synchronous, asynchronous, and reactive usage. Supports Cluster, Sentinel, Pipelining, Auto-Reconnect, Codecs and much more.
-          facets:
-            - native
-          aliases:
-            - redis
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/messaging-redis/
-              description: Messaging with Redis
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.redis
-        - name: Spring Data Reactive Redis
-          id: data-redis-reactive
-          description: Access Redis key-value data stores in a reactive fashion with Spring Data Redis.
-          facets:
-            - reactive
-            - native
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/messaging-redis/
-              description: Messaging with Redis
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.redis
-        - name: Spring Data MongoDB
-          id: data-mongodb
-          description: Store data in flexible, JSON-like documents, meaning fields can vary from document to document and data structure can be changed over time.
-          facets:
-            - native
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-data-mongodb/
-              description: Accessing Data with MongoDB
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.mongodb
-        - name: Spring Data Reactive MongoDB
-          id: data-mongodb-reactive
-          description: Provides asynchronous stream processing with non-blocking back pressure for MongoDB.
-          facets:
-            - reactive
-            - native
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.mongodb
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-data-mongodb/
-              description: Accessing Data with MongoDB
-        - name: Spring Data Elasticsearch (Access+Driver)
-          id: data-elasticsearch
-          description: A distributed, RESTful search and analytics engine with Spring Data Elasticsearch.
-          facets:
-            - native
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.elasticsearch
-        - name: Spring Data for Apache Cassandra
-          id: data-cassandra
-          description: A free and open-source, distributed, NoSQL database management system that offers high-scalability and high-performance.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.cassandra
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-data-cassandra/
-        - name: Spring Data Reactive for Apache Cassandra
-          id: data-cassandra-reactive
-          description: Access Cassandra NoSQL Database in a reactive fashion.
-          facets:
-            - reactive
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.cassandra
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-data-cassandra/
-        - name: Spring Data Couchbase
-          id: data-couchbase
-          description: NoSQL document-oriented database that offers in memory-first architecture, geo-distributed deployments, and workload isolation.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.couchbase
-        - name: Spring Data Reactive Couchbase
-          id: data-couchbase-reactive
-          description: Access Couchbase NoSQL database in a reactive fashion with Spring Data Couchbase.
-          facets:
-            - reactive
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.couchbase
-        - name: Spring Data Neo4j
-          id: data-neo4j
-          description: An open source NoSQL database that stores data structured as graphs consisting of nodes, connected by relationships.
-          facets:
-            - native
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/accessing-data-neo4j/
-              description: Accessing Data with Neo4j
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.neo4j
-    - name: Messaging
-      content:
-        - name: Spring Integration
-          id: integration
-          description: Adds support for Enterprise Integration Patterns. Enables lightweight messaging and supports integration with external systems via declarative adapters.
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/integration/
-              description: Integrating Data
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#messaging.spring-integration
-        - name: Spring for RabbitMQ
-          id: amqp
-          description: Gives your applications a common platform to send and receive messages, and your messages a safe place to live until received.
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/messaging-rabbitmq/
-              description: Messaging with RabbitMQ
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#messaging.amqp
-        - name: Spring for Apache Kafka
-          id: kafka
-          description: Publish, subscribe, store, and process streams of records.
-          facets:
-            - native
-          groupId: org.springframework.kafka
-          artifactId: spring-kafka
-          starter: false
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#messaging.kafka
-        - name: Spring for Apache Kafka Streams
-          id: kafka-streams
-          description: Building stream processing applications with Apache Kafka Streams.
-          facets:
-            - native
-          groupId: org.apache.kafka
-          artifactId: kafka-streams
-          starter: false
-          links:
-            - rel: guide
-              href: https://github.com/spring-cloud/spring-cloud-stream-samples/tree/master/kafka-streams-samples
-              description: Samples for using Apache Kafka Streams with Spring Cloud stream
-            - rel: reference
-              href: https://docs.spring.io/spring-kafka/docs/current/reference/html/#streams-kafka-streams
-              description: Apache Kafka Streams Support
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-stream/docs/current/reference/htmlsingle/#_kafka_streams_binding_capabilities_of_spring_cloud_stream
-              description: Apache Kafka Streams Binding Capabilities of Spring Cloud Stream
-        - name: Spring for Apache ActiveMQ 5
-          id: activemq
-          compatibilityRange: "[2.0.0.RELEASE,3.0.0-M1)"
-          description: Spring JMS support with Apache ActiveMQ 'Classic'.
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/messaging-jms/
-              description: Java Message Service API via Apache ActiveMQ Classic.
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#messaging.jms.activemq
-        - name: Spring for Apache ActiveMQ Artemis
-          id: artemis
-          description: Spring JMS support with Apache ActiveMQ Artemis.
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/messaging-jms/
-              description: Messaging with JMS
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#messaging.jms.artemis
-        - name: WebSocket
-          id: websocket
-          description: Build WebSocket applications with SockJS and STOMP.
-          facets:
-            - native
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/messaging-stomp-websocket/
-              description: Using WebSocket to build an interactive web application
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#messaging.websockets
-        - name: RSocket
-          id: rsocket
-          description: RSocket.io applications with Spring Messaging and Netty.
-          compatibilityRange: 2.2.0.M2
-          facets:
-            - reactive
-            - native
-          links:
-            - rel: reference
-              href: https://rsocket.io/
-        - name: Apache Camel
-          id: camel
-          compatibilityRange: "[2.0.0.M1,3.0.0-M1)"
-          mappings:
-            - compatibilityRange: "[2.3.0.M1,2.4.0-M1)"
-              version: 3.5.0
-            - compatibilityRange: "[2.4.0.M1,2.5.0-M1)"
-              version: 3.10.0
-            - compatibilityRange: "[2.5.0.M1,2.6.0-M1)"
-              version: 3.13.0
-            - compatibilityRange: "[2.6.0.M1,2.7.0-M1)"
-              version: 3.17.0
-            - compatibilityRange: "[2.7.0.M1,3.0.0-M1)"
-              version: 3.19.0
-          description: Apache Camel is an open source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data.
-          groupId: org.apache.camel.springboot
-          artifactId: camel-spring-boot-starter
-          links:
-            - rel: guide
-              href: https://camel.apache.org/camel-spring-boot/latest/spring-boot.html
-              description: Using Apache Camel with Spring Boot
-        - name: Solace PubSub+
-          bom: solace-spring-boot
-          id: solace
-          compatibilityRange: "[2.2.0.RELEASE,3.0.0-M1)"
-          description: Connect to a Solace PubSub+ Advanced Event Broker to publish, subscribe, request/reply and store/replay messages
-          groupId: com.solace.spring.boot
-          artifactId: solace-spring-boot-starter
-          links:
-            - rel: reference
-              href: https://www.solace.dev/start-spring-io-help/
-              description: Getting started with Solace and Spring
-            - rel: reference
-              href: https://solace.dev
-              description: Solace Developer Portal
-    - name: I/O
-      content:
-        - name: Spring Batch
-          id: batch
-          description: Batch applications with transactions, retry/skip and chunk based processing.
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/batch-processing/
-              description: Creating a Batch Service
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto.batch
-        - name: Validation
-          id: validation
-          description: Bean Validation with Hibernate validator.
-          facets:
-            - native
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#io.validation
-            - rel: guide
-              href: https://spring.io/guides/gs/validating-form-input/
-        - name: Java Mail Sender
-          id: mail
-          description: Send email using Java Mail and Spring Framework's JavaMailSender.
-          facets:
-            - native
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#io.email
-        - name: Quartz Scheduler
-          id: quartz
-          description: Schedule jobs using Quartz.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#io.quartz
-        - name: Spring cache abstraction
-          id: cache
-          description: Provides cache-related operations, such as the ability to update the content of the cache, but does not provide the actual data store.
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/caching/
-              description: Caching Data with Spring
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#io.caching
-        - name: Picocli
-          id: picocli
-          groupId: info.picocli
-          artifactId: picocli-spring-boot-starter
-          compatibilityRange: "[2.4.0.RELEASE,3.0.0-M1)"
-          description: Build command line applications with picocli.
-          mappings:
-            - compatibilityRange: "[2.4.0.RELEASE,3.0.0-M1)"
-              version: 4.6.3
-          links:
-            - rel: reference
-              href: https://picocli.info/#_spring_boot_example
-        - name: Spring Shell
-          id: spring-shell
-          groupId: org.springframework.shell
-          artifactId: spring-shell-starter
-          description: Build command line applications with spring.
-          compatibilityRange: "[2.7.0,3.1.0-M1)"
-          bom: spring-shell
-          links:
-            - rel: reference
-              href: https://spring.io/projects/spring-shell
-    - name: Ops
-      content:
-        - name: Spring Boot Actuator
-          id: actuator
-          description: Supports built in (or custom) endpoints that let you monitor and manage your application - such as application health, metrics, sessions, etc.
-          facets:
-            - native
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/actuator-service/
-              description: Building a RESTful Web Service with Spring Boot Actuator
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#actuator
-        - name: codecentric's Spring Boot Admin (Client)
-          id: codecentric-spring-boot-admin-client
-          groupId: de.codecentric
-          artifactId: spring-boot-admin-starter-client
-          description: Required for your application to register with a Codecentric's Spring Boot Admin Server instance.
-          compatibilityRange: "[2.0.0.RELEASE,3.1.0-M1)"
-          bom: codecentric-spring-boot-admin
-          links:
-            - rel: reference
-              href: https://codecentric.github.io/spring-boot-admin/current/#getting-started
-        - name: codecentric's Spring Boot Admin (Server)
-          id: codecentric-spring-boot-admin-server
-          groupId: de.codecentric
-          artifactId: spring-boot-admin-starter-server
-          description: A community project to manage and monitor your Spring Boot applications. Provides a UI on top of the Spring Boot Actuator endpoints.
-          compatibilityRange: "[2.0.0.RELEASE,3.1.0-M1)"
-          bom: codecentric-spring-boot-admin
-          links:
-            - rel: reference
-              href: https://codecentric.github.io/spring-boot-admin/current/#getting-started
-    - name: Observability
-      content:
-        - name: Datadog
-          id: datadog
-          groupId: io.micrometer
-          artifactId: micrometer-registry-datadog
-          scope: runtime
-          starter: false
-          description: Publish Micrometer metrics to Datadog, a dimensional time-series SaaS with built-in dashboarding and alerting.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#actuator.metrics.export.datadog
-        - name: Influx
-          id: influx
-          groupId: io.micrometer
-          artifactId: micrometer-registry-influx
-          scope: runtime
-          starter: false
-          description: Publish Micrometer metrics to InfluxDB, a dimensional time-series server that support real-time stream processing of data.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#actuator.metrics.export.influx
-        - name: Graphite
-          id: graphite
-          groupId: io.micrometer
-          artifactId: micrometer-registry-graphite
-          scope: runtime
-          starter: false
-          description: Publish Micrometer metrics to Graphite, a hierarchical metrics system backed by a fixed-size database.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#actuator.metrics.export.graphite
-        - name: New Relic
-          id: new-relic
-          groupId: io.micrometer
-          artifactId: micrometer-registry-new-relic
-          scope: runtime
-          starter: false
-          description: Publish Micrometer metrics to New Relic, a SaaS offering with a full UI and a query language called NRQL.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#actuator.metrics.export.newrelic
-        - name: Prometheus
-          id: prometheus
-          groupId: io.micrometer
-          artifactId: micrometer-registry-prometheus
-          scope: runtime
-          starter: false
-          description: Expose Micrometer metrics in Prometheus format, an in-memory dimensional time series database with a simple built-in UI, a custom query language, and math operations.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#actuator.metrics.export.prometheus
-        - name: Distributed Tracing
-          id: distributed-tracing
-          description: Enable span and trace IDs in logs.
-          groupId: io.micrometer
-          artifactId: micrometer-tracing-bridge-brave
-          starter: false
-          mappings:
-            - compatibility-range: "[2.3.0.M1,3.0.0-M1)"
-              groupId: org.springframework.cloud
-              artifactId: spring-cloud-starter-sleuth
-              bom: spring-cloud
-              starter: true
-        - name: Wavefront
-          id: wavefront
-          description: Publish metrics and optionally distributed traces to Tanzu Observability by Wavefront, a SaaS-based metrics monitoring and analytics platform that lets you visualize, query, and alert over data from across your entire stack.
-          groupId: io.micrometer
-          artifactId: micrometer-registry-wavefront
-          scope: runtime
-          starter: false
-          mappings:
-            - compatibility-range: "[2.3.0.M1,3.0.0-M1)"
-              groupId: com.wavefront
-              artifactId: wavefront-spring-boot-starter
-              bom: wavefront
-              starter: true
-          links:
-            - rel: reference
-              href: https://docs.wavefront.com/wavefront_springboot.html
-              description: Wavefront for Spring Boot documentation
-        - name: Zipkin
-          id: zipkin
-          description: Enable and expose span and trace IDs to Zipkin.
-          groupId: io.zipkin.reporter2
-          artifactId: zipkin-reporter-brave
-          starter: false
-          mappings:
-            - compatibilityRange: "[2.0.0.RELEASE,3.0.0-M1)"
-              groupId: org.springframework.cloud
-              artifactId: spring-cloud-sleuth-zipkin
-              bom: spring-cloud
-    - name: Testing
-      content:
-        - name: Spring REST Docs
-          id: restdocs
-          description: Document RESTful services by combining hand-written with Asciidoctor and auto-generated snippets produced with Spring MVC Test.
-          groupId: org.springframework.restdocs
-          artifactId: spring-restdocs-mockmvc
-          scope: test
-          starter: false
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-restdocs/docs/current/reference/html5/
-        - name: Testcontainers
-          id: testcontainers
-          description: Provide lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
-          groupId: org.testcontainers
-          artifactId: junit-jupiter
-          bom: testcontainers
-          scope: test
-          starter: false
-          links:
-            - rel: reference
-              href: https://www.testcontainers.org/
-        - name: Contract Verifier
-          bom: spring-cloud
-          id: cloud-contract-verifier
-          description: Moves TDD to the level of software architecture by enabling Consumer Driven Contract (CDC) development.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-contract-verifier
-          scope: test
-          links:
-            - rel: reference
-              href: https://cloud.spring.io/spring-cloud-contract/reference/htmlsingle/
-        - name: Contract Stub Runner
-          bom: spring-cloud
-          compatibilityRange: "[2.3.0.M1,3.0.0-M1)"
-          id: cloud-contract-stub-runner
-          description: Stub Runner for HTTP/Messaging based communication. Allows creating WireMock stubs from RestDocs tests.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-contract-stub-runner
-          scope: test
-          links:
-            - rel: reference
-              href: https://cloud.spring.io/spring-cloud-contract/reference/htmlsingle/#features-stub-runner
-        - name: Embedded LDAP Server
-          id: unboundid-ldap
-          description: Provides a platform neutral way for running a LDAP server in unit tests.
-          groupId: com.unboundid
-          artifactId: unboundid-ldapsdk
-          scope: test
-          starter: false
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.ldap.embedded
-        - name: Embedded MongoDB Database
-          id: flapdoodle-mongo
-          compatibilityRange: "[2.0.0.RELEASE,3.0.0-M1)"
-          description: Provides a platform neutral way for running MongoDB in unit tests.
-          groupId: de.flapdoodle.embed
-          artifactId: de.flapdoodle.embed.mongo
-          scope: test
+                service:
+                  code: true
+        - name: gRPC 协议
+          id: dubbo-protocol-grpc
+          description: gRPC 协议
           starter: false
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.mongodb.embedded
-    - name: Spring Cloud
-      bom: spring-cloud
-      compatibilityRange: "[2.3.0.M1,3.1.0-M1)"
+          bom: io-grpc
+          codeOnly: true
+          dependencies: ["dubbo-common","grpc-netty-shaded","grpc-protobuf","grpc-stub","grpc-netty" ]
+          archCfg:
+            dubbo:
+              modules:
+                api:
+                  code: true
+                service:
+                  code: true
+        - name: dubbo-common
+          id: dubbo-common
+          groupId: org.apache.dubbo
+          artifactId: dubbo-common
+          starter: false
+          hide: true
+        - name: grpc-netty-shaded
+          id: grpc-netty-shaded
+          groupId: io.grpc
+          artifactId: grpc-netty-shaded
+          starter: false
+          hide: true
+        - name: grpc-protobuf
+          id: grpc-protobuf
+          groupId: io.grpc
+          artifactId: grpc-protobuf
+          starter: false
+          hide: true
+        - name: grpc-stub
+          id: grpc-stub
+          groupId: io.grpc
+          artifactId: grpc-stub
+          starter: false
+          hide: true
+        - name: grpc-netty
+          id: grpc-netty
+          groupId: io.grpc
+          artifactId: grpc-netty
+          starter: false
+          hide: true
+    - name: Dubbo Serialization
       content:
-        - name: Cloud Bootstrap
-          id: cloud-starter
-          description: Non-specific Spring Cloud features, unrelated to external libraries or integrations (e.g. Bootstrap context and @RefreshScope).
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-commons/docs/current/reference/html/
-        - name: Function
-          id: cloud-function
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-function-context
+        - name: hessian 序列化
+          id: dubbo-serialization-hessian
+          description: Hessian序列化是一种支持动态类型、跨语言、基于对象传输的网络协议,Java对象序列化的二进制流可以被其他语言(如,c++,python)
           starter: false
-          description: Promotes the implementation of business logic via functions and supports a uniform programming model across serverless providers, as well as the ability to run standalone (locally or in a PaaS).
-          facets:
-            - native
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-function/docs/current/reference/html/spring-cloud-function.html
-            - rel: sample
-              href: https://github.com/spring-cloud/spring-cloud-function/tree/main/spring-cloud-function-samples
-              description: Various sample apps using Spring Cloud Function
-        - name: Task
-          id: cloud-task
-          description: Allows a user to develop and run short lived microservices using Spring Cloud. Run them locally, in the cloud, and on Spring Cloud Data Flow.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-task
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-task/docs/current/reference/html/
-    - name: Spring Cloud Tools
-      content:
-        - name: Open Service Broker
-          id: open-service-broker
-          compatibilityRange: "[2.0.0.RELEASE,2.7.0-M1)"
-          description: Framework for building Spring Boot apps that implement the Open Service Broker API, which can deliver services to applications running within cloud native platforms such as Cloud Foundry, Kubernetes and OpenShift.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-open-service-broker
-          mappings:
-            - compatibilityRange: "[2.3.0.M1,2.4.0-M1)"
-              version: 3.2.0
-            - compatibilityRange: "[2.4.0-M1,2.5.0-M1)"
-              version: 3.3.1
-            - compatibilityRange: "[2.5.0-M1,2.6.0-M1)"
-              version: 3.4.1
-            - compatibilityRange: "[2.6.0-M1,2.7.0-M1)"
-              version: 3.5.0
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-open-service-broker/docs/current/reference/
-            - rel: guide
-              href: https://github.com/spring-cloud-samples/bookstore-service-broker
-              description: Using Spring Cloud Open Service Broker
-    - name: Spring Cloud Config
-      bom: spring-cloud
-      compatibilityRange: "[2.3.0.M1,3.1.0-M1)"
-      content:
-        - name: Config Client
-          id: cloud-config-client
-          description: Client that connects to a Spring Cloud Config Server to fetch the application's configuration.
-          facets:
-            - native
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-config
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-config/docs/current/reference/html/#_client_side_usage
-              description: Config Client Quick Start
-        - name: Config Server
-          id: cloud-config-server
-          description: Central management for configuration via Git, SVN, or HashiCorp Vault.
-          facets:
-            - native
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-config-server
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-config/docs/current/reference/html/#_spring_cloud_config_server
-            - rel: guide
-              href: https://spring.io/guides/gs/centralized-configuration/
-              description: Centralized Configuration
-        - name: Vault Configuration
-          id: cloud-starter-vault-config
-          description: Provides client-side support for externalized configuration in a distributed system. Using HashiCorp's Vault you have a central place to manage external secret properties for applications across all environments.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-vault-config
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-vault/docs/current/reference/html/#client-side-usage
-              description: Vault Client Quick Start
-        - name: Apache Zookeeper Configuration
-          id: cloud-starter-zookeeper-config
-          description: Enable and configure common patterns inside your application and build large distributed systems with Apache Zookeeper based components. The provided patterns include Service Discovery and Configuration.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-zookeeper-config
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-zookeeper/docs/current/reference/html/#distributed-configuration-usage
-              description: Apache Zookeeper Quick Start
-        - name: Consul Configuration
-          id: cloud-starter-consul-config
-          description: Enable and configure the common patterns inside your application and build large distributed systems with Hashicorp’s Consul. The patterns provided include Service Discovery, Distributed Configuration and Control Bus.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-consul-config
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-consul/docs/current/reference/html/#distributed-configuration-usage
-              description: Spring Cloud Consul Quick Start
-    - name: Spring Cloud Discovery
-      bom: spring-cloud
-      compatibilityRange: "[2.3.0.M1,3.1.0-M1)"
-      content:
-        - name: Eureka Discovery Client
-          id: cloud-eureka
-          compatibilityRange: "[2.3.0.M1,3.1.0-M1)"
-          description: A REST based service for locating services for the purpose of load balancing and failover of middle-tier servers.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-netflix-eureka-client
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/service-registration-and-discovery/
-              description: Service Registration and Discovery with Eureka and Spring Cloud
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-netflix/docs/current/reference/html/#service-discovery-eureka-clients
-          mappings:
-            - compatibilityRange: "[3.0.0-M1,3.1.0-M1)"
-              repository: netflix-candidates
-        - name: Eureka Server
-          id: cloud-eureka-server
-          compatibilityRange: "[2.3.0.M1,3.1.0-M1)"
-          description: spring-cloud-netflix Eureka Server.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-netflix-eureka-server
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/service-registration-and-discovery/
-              description: Service Registration and Discovery with Eureka and Spring Cloud
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-netflix/docs/current/reference/html/#spring-cloud-eureka-server
-          mappings:
-            - compatibilityRange: "[3.0.0-M1,3.1.0-M1)"
-              repository: netflix-candidates
-        - name: Apache Zookeeper Discovery
-          id: cloud-starter-zookeeper-discovery
-          description: Service discovery with Apache Zookeeper.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-zookeeper-discovery
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-zookeeper/docs/current/reference/html/#spring-cloud-zookeeper-discovery
-        - name: Cloud Foundry Discovery
-          id: cloud-cloudfoundry-discovery
-          compatibilityRange: "[2.3.0.M1,3.0.0-M1)"
-          description: Service discovery with Cloud Foundry.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-cloudfoundry-discovery
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-cloudfoundry/docs/current/reference/html/
-        - name: Consul Discovery
-          id: cloud-starter-consul-discovery
-          description: Service discovery with Hashicorp Consul.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-consul-discovery
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-consul/docs/current/reference/html/#spring-cloud-consul-discovery
-    - name: Spring Cloud Routing
-      bom: spring-cloud
-      compatibilityRange: "[2.3.0.M1,3.1.0-M1)"
-      content:
-        - name: Gateway
-          id: cloud-gateway
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-gateway
-          description: Provides a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as security, monitoring/metrics, and resiliency.
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/
-            - rel: guide
-              href: https://github.com/spring-cloud-samples/spring-cloud-gateway-sample
-              description: Using Spring Cloud Gateway
-        - name: OpenFeign
-          id: cloud-feign
-          description: Declarative REST Client. OpenFeign creates a dynamic implementation of an interface decorated with JAX-RS or Spring MVC annotations.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-openfeign
-          links:
-            - rel: sample
-              href: https://github.com/spring-cloud-samples/feign-eureka
-              description: Declarative REST calls with Spring Cloud OpenFeign sample
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/
-        - name: Cloud LoadBalancer
-          id: cloud-loadbalancer
-          description: Client-side load-balancing with Spring Cloud LoadBalancer.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-loadbalancer
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/spring-cloud-loadbalancer/
-              description: Client-side load-balancing with Spring Cloud LoadBalancer
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-commons/docs/current/reference/html/#spring-cloud-loadbalancer
-    - name: Spring Cloud Circuit Breaker
-      bom: spring-cloud
-      compatibilityRange: "[2.3.0.M1,3.1.0-M1)"
-      content:
-        - name: Resilience4J
-          id: cloud-resilience4j
-          description: Spring Cloud Circuit breaker with Resilience4j as the underlying implementation.
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-starter-circuitbreaker-resilience4j
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-circuitbreaker/docs/current/reference/html/#configuring-resilience4j-circuit-breakers
-    - name: Spring Cloud Messaging
-      bom: spring-cloud
-      compatibilityRange: "[2.3.0.M1,3.1.0-M1)"
-      content:
-        - name: Cloud Bus
-          id: cloud-bus
-          description: Links nodes of a distributed system with a lightweight message broker which can used to broadcast state changes or other management instructions (requires a binder, e.g. Apache Kafka or RabbitMQ).
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-bus
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-bus/docs/current/reference/html/
-        - name: Cloud Stream
-          id: cloud-stream
-          description: Framework for building highly scalable event-driven microservices connected with shared messaging systems (requires a binder, e.g. Apache Kafka, RabbitMQ or Solace PubSub+).
-          groupId: org.springframework.cloud
-          artifactId: spring-cloud-stream
-          links:
-            - rel: reference
-              href: https://docs.spring.io/spring-cloud-stream/docs/current/reference/html/spring-cloud-stream.html#spring-cloud-stream-overview-introducing
-    - name: VMware Tanzu Application Service
-      bom: spring-cloud-services
-      compatibilityRange: "[2.0.0.RELEASE,3.0.0-M1)"
-      content:
-        - name: Config Client (TAS)
-          id: scs-config-client
-          description: Config client on VMware Tanzu Application Service.
-          groupId: io.pivotal.spring.cloud
-          artifactId: spring-cloud-services-starter-config-client
-          links:
-            - rel: reference
-              href: https://docs.vmware.com/en/Spring-Cloud-Services-for-VMware-Tanzu/index.html
-          mappings:
-            - compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
-              starter: false
-        - name: Service Registry (TAS)
-          id: scs-service-registry
-          description: Eureka service discovery client on VMware Tanzu Application Service.
-          groupId: io.pivotal.spring.cloud
-          artifactId: spring-cloud-services-starter-service-registry
-          links:
-            - rel: reference
-              href: https://docs.vmware.com/en/Spring-Cloud-Services-for-VMware-Tanzu/index.html
-    - name: Microsoft Azure
-      bom: spring-cloud-azure
-      compatibilityRange: "[2.5.0-M1,3.1.0-M1)"
-      content:
-        - name: Azure Support
-          id: azure-support
-          groupId: com.azure.spring
-          artifactId: spring-cloud-azure-starter
-          description: Auto-configuration for Azure Services (Service Bus, Storage, Active Directory, Key Vault, and more).
-          links:
-            - rel: guide
-              href: https://spring.io/guides/gs/spring-boot-for-azure/
-              description: Deploying a Spring Boot app to Azure
-            - rel: reference
-              href: https://microsoft.github.io/spring-cloud-azure/current/reference/html/index.html
-              description: Spring Cloud Azure Reference Documentation
-            - rel: sample
-              href: https://aka.ms/spring/samples
-              description: Azure Samples
-        - name: Azure Active Directory
-          id: azure-active-directory
-          groupId: com.azure.spring
-          artifactId: spring-cloud-azure-starter-active-directory
-          description: Spring Security integration with Azure Active Directory for authentication.
-          links:
-            - rel: guide
-              href: https://aka.ms/spring/msdocs/aad
-              description: Securing a Java Web App with the Spring Boot Starter for Azure Active Directory
-            - rel: reference
-              href: https://microsoft.github.io/spring-cloud-azure/current/reference/html/index.html#spring-security-with-azure-active-directory
-            - rel: sample
-              href: https://aka.ms/spring/samples/latest/aad
-              description: Azure Active Directory Sample
-        - name: Azure Cosmos DB
-          id: azure-cosmos-db
-          compatibilityRange: "[2.5.0-M1,3.0.0-M1)"
-          groupId: com.azure.spring
-          artifactId: spring-cloud-azure-starter-data-cosmos
-          description: Fully managed NoSQL database service for modern app development, including Spring Data support.
-          links:
-            - rel: guide
-              href: https://aka.ms/spring/msdocs/cosmos
-              description: How to use Spring Boot Starter with Azure Cosmos DB SQL API
-            - rel: reference
-              href: https://microsoft.github.io/spring-cloud-azure/current/reference/html/index.html#spring-data-support
-            - rel: sample
-              href: https://aka.ms/spring/samples/latest/cosmos
-              description: Azure Cosmos DB Sample
-        - name: Azure Key Vault
-          id: azure-keyvault
-          groupId: com.azure.spring
-          artifactId: spring-cloud-azure-starter-keyvault
-          description: All key vault features are supported, e.g. manage application secrets and certificates.
-          links:
-            - rel: guide
-              href: https://aka.ms/spring/msdocs/keyvault
-              description: Read Secrets from Azure Key Vault in a Spring Boot Application
-            - rel: guide
-              href: https://aka.ms/spring/msdocs/keyvault/certificates
-              description: Securing Spring Boot Applications with Azure Key Vault Certificates
-            - rel: reference
-              href: https://microsoft.github.io/spring-cloud-azure/current/reference/html/index.html#secret-management
-            - rel: sample
-              href: https://aka.ms/spring/samples/latest/keyvault
-              description: Azure Key Vault Sample
-        - name: Azure Storage
-          id: azure-storage
-          groupId: com.azure.spring
-          artifactId: spring-cloud-azure-starter-storage
-          description: All Storage features are supported, e.g. blob, fileshare and queue.
-          links:
-            - rel: guide
-              href: https://aka.ms/spring/msdocs/storage
-              description: How to use the Spring Boot starter for Azure Storage
-            - rel: reference
-              href: https://microsoft.github.io/spring-cloud-azure/current/reference/html/index.html#resource-handling
-            - rel: sample
-              href: https://aka.ms/spring/samples/latest/storage
-              description: Azure Storage Sample
-    - name: Google Cloud Platform
-      bom: spring-cloud-gcp
-      compatibilityRange: "[2.4.0-M1,3.0.0-M1)"
-      content:
-        - name: GCP Support
-          id: cloud-gcp
-          description: Contains auto-configuration support for every Spring Cloud GCP integration. Most of the auto-configuration code is only enabled if other dependencies are added to the classpath.
-          groupId: com.google.cloud
-          artifactId: spring-cloud-gcp-starter
-          links:
-            - rel: reference
-              href: https://googlecloudplatform.github.io/spring-cloud-gcp/reference/html/index.html
-            - rel: guide
-              href: https://github.com/GoogleCloudPlatform/spring-cloud-gcp/tree/main/spring-cloud-gcp-samples
-              description: GCP Samples
-        - name: GCP Messaging
-          id: cloud-gcp-pubsub
-          description: Adds the GCP Support entry and all the required dependencies so that the Google Cloud Pub/Sub integration work out of the box.
-          groupId: com.google.cloud
-          artifactId: spring-cloud-gcp-starter-pubsub
-          links:
-            - rel: reference
-              href: https://googlecloudplatform.github.io/spring-cloud-gcp/reference/html/index.html#cloud-pubsub
-            - rel: guide
-              href: https://github.com/GoogleCloudPlatform/spring-cloud-gcp/tree/main/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample
-              description: GCP Pub/Sub Sample
-        - name: GCP Storage
-          id: cloud-gcp-storage
-          description: Adds the GCP Support entry and all the required dependencies so that the Google Cloud Storage integration work out of the box.
-          groupId: com.google.cloud
-          artifactId: spring-cloud-gcp-starter-storage
-          links:
-            - rel: reference
-              href: https://googlecloudplatform.github.io/spring-cloud-gcp/reference/html/index.html#cloud-storage
-            - rel: guide
-              href: https://github.com/GoogleCloudPlatform/spring-cloud-gcp/tree/main/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample
-    - name: Hidden Group
-      id: hidden-group
-      hide: true
-      description: this is a hidden dependency group
-      content:
-        - name: cloudshell
-          id: cloudshell
           codeOnly: true
+          dependencies: [ "dubbo-starter" ]
+#    - name: Web
+#      content:
+#        - name: Spring Web
+#          id: web
+#          description: Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container.
+#          facets:
+#            - web
+#            - json
+#            - native
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/rest-service/
+#              description: Building a RESTful Web Service
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web
+#            - rel: guide
+#              href: https://spring.io/guides/gs/serving-web-content/
+#              description: Serving Web Content with Spring MVC
+#            - rel: guide
+#              href: https://spring.io/guides/tutorials/rest/
+#              description: Building REST services with Spring
+#        - name: Spring Reactive Web
+#          id: webflux
+#          description: Build reactive web applications with Spring WebFlux and Netty.
+#          facets:
+#            - json
+#            - reactive
+#            - native
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/reactive-rest-service/
+#              description: Building a Reactive RESTful Web Service
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.reactive
+#        - name: Spring for GraphQL
+#          id: graphql
+#          compatibilityRange: "2.7.0.M1"
+#          description: Build GraphQL applications with Spring for GraphQL and GraphQL Java.
+#          facets:
+#            - json
+#        - name: Rest Repositories
+#          id: data-rest
+#          facets:
+#            - json
+#          description: Exposing Spring Data repositories over REST via Spring Data REST.
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-data-rest/
+#              description: Accessing JPA Data with REST
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-neo4j-data-rest/
+#              description: Accessing Neo4j Data with REST
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-mongodb-data-rest/
+#              description: Accessing MongoDB Data with REST
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto.data-access.exposing-spring-data-repositories-as-rest
+#        - name: Spring Session
+#          id: session
+#          groupId: org.springframework.session
+#          artifactId: spring-session-core
+#          description: Provides an API and implementations for managing user session information.
+#          starter: false
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-session/reference/
+#        - name: Rest Repositories HAL Explorer
+#          id: data-rest-explorer
+#          description: Browsing Spring Data REST repositories in your browser.
+#          starter: false
+#          groupId: org.springframework.data
+#          artifactId: spring-data-rest-hal-explorer
+#        - name: Spring HATEOAS
+#          id: hateoas
+#          description: Eases the creation of RESTful APIs that follow the HATEOAS principle when working with Spring / Spring MVC.
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/rest-hateoas/
+#              description: Building a Hypermedia-Driven RESTful Web Service
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.spring-hateoas
+#        - name: Spring Web Services
+#          id: web-services
+#          description: Facilitates contract-first SOAP development. Allows for the creation of flexible web services using one of the many ways to manipulate XML payloads.
+#          aliases:
+#           - ws
+#          links:
+#           - rel: guide
+#             href: https://spring.io/guides/gs/producing-web-service/
+#             description: Producing a SOAP web service
+#           - rel: reference
+#             href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#io.webservices
+#        - name: Jersey
+#          id: jersey
+#          description: Framework for developing RESTful Web Services in Java that provides support for JAX-RS APIs.
+#          facets:
+#            - json
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.servlet.jersey
+#    - name: Template Engines
+#      content:
+#        - name: Thymeleaf
+#          id: thymeleaf
+#          description: A modern server-side Java template engine for both web and standalone environments. Allows HTML to be correctly displayed in browsers and as static prototypes.
+#          facets:
+#            - native
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/handling-form-submission/
+#              description: Handling Form Submission
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.servlet.spring-mvc.template-engines
+#        - name: Apache Freemarker
+#          id: freemarker
+#          description: Java library to generate text output (HTML web pages, e-mails, configuration files, source code, etc.) based on templates and changing data.
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.servlet.spring-mvc.template-engines
+#        - name: Mustache
+#          id: mustache
+#          description: Logic-less Templates. There are no if statements, else clauses, or for loops. Instead there are only tags.
+#          facets:
+#            - native
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.servlet.spring-mvc.template-engines
+#        - name: Groovy Templates
+#          id: groovy-templates
+#          description: Groovy templating engine.
+#          facets:
+#            - web
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.servlet.spring-mvc.template-engines
+#    - name: Security
+#      content:
+#        - name: Spring Security
+#          id: security
+#          description: Highly customizable authentication and access-control framework for Spring applications.
+#          facets:
+#            - native
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/securing-web/
+#              description: Securing a Web Application
+#            - rel: guide
+#              href: https://spring.io/guides/tutorials/spring-boot-oauth2/
+#              description: Spring Boot and OAuth2
+#            - rel: guide
+#              href: https://spring.io/guides/gs/authenticating-ldap/
+#              description: Authenticating a User with LDAP
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.security
+#        - name: OAuth2 Client
+#          id: oauth2-client
+#          description: Spring Boot integration for Spring Security's OAuth2/OpenID Connect client features.
+#          facets:
+#            - native
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.security.oauth2.client
+#        - name: OAuth2 Resource Server
+#          id: oauth2-resource-server
+#          description: Spring Boot integration for Spring Security's OAuth2 resource server features.
+#          facets:
+#            - native
+#          compatibilityRange: 2.1.0.M2
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#web.security.oauth2.server
+#        - name: Spring LDAP
+#          id: data-ldap
+#          description: Makes it easier to build Spring based applications that use the Lightweight Directory Access Protocol.
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.ldap
+#        - name: Okta
+#          id: okta
+#          description: Okta specific configuration for Spring Security/Spring Boot OAuth2 features. Enable your Spring Boot application to work with Okta via OAuth 2.0/OIDC.
+#          groupId: com.okta.spring
+#          artifactId: okta-spring-boot-starter
+#          compatibilityRange: "[2.1.2.RELEASE,3.0.0-M1)"
+#          mappings:
+#            - compatibilityRange: "[2.2.0.RELEASE,2.4.0-M1)"
+#              version: 1.4.0
+#            - compatibilityRange: "[2.4.0-M1,2.4.1)"
+#              version: 1.5.1
+#            - compatibilityRange: "[2.4.1,2.5.0-M1)"
+#              version: 2.0.1
+#            - compatibilityRange: "[2.5.0-M1,3.0.0-M1)"
+#              version: 2.1.6
+#          links:
+#            - rel: guide
+#              href: https://github.com/okta/samples-java-spring/tree/master/okta-hosted-login
+#              description: Okta-Hosted Login Page Example
+#            - rel: guide
+#              href: https://github.com/okta/samples-java-spring/tree/master/custom-login
+#              description: Custom Login Page Example
+#            - rel: guide
+#              href: https://github.com/okta/samples-java-spring/tree/master/resource-server
+#              description: Okta Spring Security Resource Server Example
+#            - rel: reference
+#              href: https://github.com/okta/okta-spring-boot#readme
+#              description: Okta Spring Boot documentation
+#    - name: SQL
+#      content:
+#        - name: JDBC API
+#          id: jdbc
+#          description: Database Connectivity API that defines how a client may connect and query a database.
+#          facets:
+#            - native
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/relational-data-access/
+#              description: Accessing Relational Data using JDBC with Spring
+#            - rel: guide
+#              href: https://spring.io/guides/gs/managing-transactions/
+#              description: Managing Transactions
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.sql
+#        - name: Spring Data JPA
+#          id: data-jpa
+#          description: Persist data in SQL stores with Java Persistence API using Spring Data and Hibernate.
+#          facets:
+#            - jpa
+#            - native
+#          aliases:
+#            - jpa
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-data-jpa/
+#              description: Accessing Data with JPA
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.sql.jpa-and-spring-data
+#        - name: Spring Data JDBC
+#          id: data-jdbc
+#          description: Persist data in SQL stores with plain JDBC using Spring Data.
+#          facets:
+#            - native
+#          links:
+#            - rel: guide
+#              href: https://github.com/spring-projects/spring-data-examples/tree/master/jdbc/basics
+#              description: Using Spring Data JDBC
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.sql.jdbc
+#        - name: Spring Data R2DBC
+#          id: data-r2dbc
+#          description: Provides Reactive Relational Database Connectivity to persist data in SQL stores using Spring Data in reactive applications.
+#          facets:
+#            - reactive
+#            - native
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-data-r2dbc/
+#              description: Accessing data with R2DBC
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.sql.r2dbc
+#            - rel: home
+#              href: https://r2dbc.io
+#              description: R2DBC Homepage
+#        - name: MyBatis Framework
+#          id: mybatis
+#          compatibilityRange: "[2.0.0.RELEASE,3.1.0-M1)"
+#          description: Persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations.
+#          links:
+#            - rel: guide
+#              href: https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start
+#              description: MyBatis Quick Start
+#            - rel: reference
+#              href: https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
+#          groupId: org.mybatis.spring.boot
+#          artifactId: mybatis-spring-boot-starter
+#          mappings:
+#            - compatibilityRange: "[2.1.0.RELEASE,2.5.0-M1)"
+#              version: 2.1.4
+#            - compatibilityRange: "[2.5.0-M1,2.7.0-M1)"
+#              version: 2.2.2
+#            - compatibilityRange: "[2.7.0-M1,3.0.0-M1)"
+#              version: 2.3.0
+#            - compatibilityRange: "3.0.0-M1"
+#              version: 3.0.0
+#        - name: Liquibase Migration
+#          id: liquibase
+#          description: Liquibase database migration and source control library.
+#          groupId: org.liquibase
+#          artifactId: liquibase-core
+#          starter: false
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto.data-initialization.migration-tool.liquibase
+#        - name: Flyway Migration
+#          id: flyway
+#          description: Version control for your database so you can migrate from any version (incl. an empty database) to the latest version of the schema.
+#          groupId: org.flywaydb
+#          artifactId: flyway-core
+#          starter: false
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto.data-initialization.migration-tool.flyway
+#        - name: JOOQ Access Layer
+#          id: jooq
+#          description: Generate Java code from your database and build type safe SQL queries through a fluent API.
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.sql.jooq
+#        - name: IBM DB2 Driver
+#          id: db2
+#          compatibilityRange: 2.2.0.M6
+#          description: A JDBC driver that provides access to IBM DB2.
+#          groupId: com.ibm.db2
+#          artifactId: jcc
+#          scope: runtime
+#          starter: false
+#        - name: Apache Derby Database
+#          id: derby
+#          description: An open source relational database implemented entirely in Java.
+#          groupId: org.apache.derby
+#          artifactId: derby
+#          scope: runtime
+#          starter: false
+#        - name: H2 Database
+#          id: h2
+#          description: Provides a fast in-memory database that supports JDBC API and R2DBC access, with a small (2mb) footprint. Supports embedded and server modes as well as a browser based console application.
+#          facets:
+#            - native
+#          groupId: com.h2database
+#          artifactId: h2
+#          scope: runtime
+#          starter: false
+#        - name: HyperSQL Database
+#          id: hsql
+#          description: Lightweight 100% Java SQL Database Engine.
+#          facets:
+#            - native
+#          groupId: org.hsqldb
+#          artifactId: hsqldb
+#          scope: runtime
+#          starter: false
+#        - name: MariaDB Driver
+#          id: mariadb
+#          description: MariaDB JDBC and R2DBC driver.
+#          groupId: org.mariadb.jdbc
+#          artifactId: mariadb-java-client
+#          scope: runtime
+#          starter: false
+#        - name: MS SQL Server Driver
+#          id: sqlserver
+#          description: A JDBC and R2DBC driver that provides access to Microsoft SQL Server and Azure SQL Database from any Java application.
+#          groupId: com.microsoft.sqlserver
+#          artifactId: mssql-jdbc
+#          scope: runtime
+#          starter: false
+#        - name: MySQL Driver
+#          id: mysql
+#          description: MySQL JDBC and R2DBC driver.
+#          facets:
+#            - native
+#          groupId: com.mysql
+#          artifactId: mysql-connector-j
+#          scope: runtime
+#          starter: false
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-data-mysql/
+#              description: Accessing data with MySQL
+#        - name: Oracle Driver
+#          id: oracle
+#          description: A JDBC driver that provides access to Oracle.
+#          groupId: com.oracle.database.jdbc
+#          artifactId: ojdbc8
+#          scope: runtime
+#          starter: false
+#        - name: PostgreSQL Driver
+#          id: postgresql
+#          description: A JDBC and R2DBC driver that allows Java programs to connect to a PostgreSQL database using standard, database independent Java code.
+#          facets:
+#            - native
+#          groupId: org.postgresql
+#          artifactId: postgresql
+#          scope: runtime
+#          starter: false
+#    - name: NoSQL
+#      content:
+#        - name: Spring Data Redis (Access+Driver)
+#          id: data-redis
+#          description: Advanced and thread-safe Java Redis client for synchronous, asynchronous, and reactive usage. Supports Cluster, Sentinel, Pipelining, Auto-Reconnect, Codecs and much more.
+#          facets:
+#            - native
+#          aliases:
+#            - redis
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/messaging-redis/
+#              description: Messaging with Redis
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.redis
+#        - name: Spring Data Reactive Redis
+#          id: data-redis-reactive
+#          description: Access Redis key-value data stores in a reactive fashion with Spring Data Redis.
+#          facets:
+#            - reactive
+#            - native
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/messaging-redis/
+#              description: Messaging with Redis
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.redis
+#        - name: Spring Data MongoDB
+#          id: data-mongodb
+#          description: Store data in flexible, JSON-like documents, meaning fields can vary from document to document and data structure can be changed over time.
+#          facets:
+#            - native
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-data-mongodb/
+#              description: Accessing Data with MongoDB
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.mongodb
+#        - name: Spring Data Reactive MongoDB
+#          id: data-mongodb-reactive
+#          description: Provides asynchronous stream processing with non-blocking back pressure for MongoDB.
+#          facets:
+#            - reactive
+#            - native
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.mongodb
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-data-mongodb/
+#              description: Accessing Data with MongoDB
+#        - name: Spring Data Elasticsearch (Access+Driver)
+#          id: data-elasticsearch
+#          description: A distributed, RESTful search and analytics engine with Spring Data Elasticsearch.
+#          facets:
+#            - native
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.elasticsearch
+#        - name: Spring Data for Apache Cassandra
+#          id: data-cassandra
+#          description: A free and open-source, distributed, NoSQL database management system that offers high-scalability and high-performance.
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.cassandra
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-data-cassandra/
+#        - name: Spring Data Reactive for Apache Cassandra
+#          id: data-cassandra-reactive
+#          description: Access Cassandra NoSQL Database in a reactive fashion.
+#          facets:
+#            - reactive
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.cassandra
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-data-cassandra/
+#        - name: Spring Data Couchbase
+#          id: data-couchbase
+#          description: NoSQL document-oriented database that offers in memory-first architecture, geo-distributed deployments, and workload isolation.
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.couchbase
+#        - name: Spring Data Reactive Couchbase
+#          id: data-couchbase-reactive
+#          description: Access Couchbase NoSQL database in a reactive fashion with Spring Data Couchbase.
+#          facets:
+#            - reactive
+#          links:
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.couchbase
+#        - name: Spring Data Neo4j
+#          id: data-neo4j
+#          description: An open source NoSQL database that stores data structured as graphs consisting of nodes, connected by relationships.
+#          facets:
+#            - native
+#          links:
+#            - rel: guide
+#              href: https://spring.io/guides/gs/accessing-data-neo4j/
+#              description: Accessing Data with Neo4j
+#            - rel: reference
+#              href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.neo4j
+#    - name: Hidden Group
+#      id: hidden-group
+#      hide: true
+#      description: this is a hidden dependency group
+#      content:
+#        - name: cloudshell
+#          id: cloudshell
+#          codeOnly: true
   types:
     - name: Maven Project
       id: maven-project
@@ -1847,19 +715,6 @@ initializr:
     - name: 2.2.2.RELEASE
       id: 2.2.2.RELEASE
   architecture:
-    - id: none
-      name: 单模块
-    - id: mvc
-      name: MVC架构
-#       requiredDependency: [ "dependencies to root bom" ]
-      subModules:
-        - name: start
-          description: 入口模块,引导工程启动以及基础配置
-          main: true
-        - name: web
-          description: web 模块,对应 MVC 的 V 概念,存放视图层的逻辑
-        - name: service
-          description: service 模块,对应 MVC 的 M 概念,存放核心业务逻辑代码
     - id: dubbo
       name: Dubbo微服务架构
       default: true
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/api/java/DemoService.java.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/api/java/DemoService.java.mustache
new file mode 100644
index 0000000..d95b727
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/api/java/DemoService.java.mustache
@@ -0,0 +1,10 @@
+package {{basePackage}}.service;
+
+import {{basePackage}}.dto.RequestData;
+import {{basePackage}}.dto.ResponseData;
+
+public interface DemoService {
+
+    ResponseData service(RequestData param);
+
+}
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/api/java/RequestData.java.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/api/java/RequestData.java.mustache
new file mode 100644
index 0000000..b5bfe3b
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/api/java/RequestData.java.mustache
@@ -0,0 +1,26 @@
+package {{basePackage}}.dto;
+
+import java.io.Serializable;
+
+public class RequestData implements Serializable {
+
+    private String data1;
+
+    private int data2;
+
+    public String getData1() {
+        return data1;
+    }
+
+    public void setData1(String data1) {
+        this.data1 = data1;
+    }
+
+    public int getData2() {
+        return data2;
+    }
+
+    public void setData2(int data2) {
+        this.data2 = data2;
+    }
+}
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/api/java/ResponseData.java.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/api/java/ResponseData.java.mustache
new file mode 100644
index 0000000..1515c6f
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/api/java/ResponseData.java.mustache
@@ -0,0 +1,26 @@
+package {{basePackage}}.dto;
+
+import java.io.Serializable;
+
+public class ResponseData implements Serializable {
+
+    private String data1;
+
+    private int data2;
+
+    public String getData1() {
+        return data1;
+    }
+
+    public void setData1(String data1) {
+        this.data1 = data1;
+    }
+
+    public int getData2() {
+        return data2;
+    }
+
+    public void setData2(int data2) {
+        this.data2 = data2;
+    }
+}
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/java/DemoServiceImpl.java.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/java/DemoServiceImpl.java.mustache
new file mode 100644
index 0000000..933a69b
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/java/DemoServiceImpl.java.mustache
@@ -0,0 +1,15 @@
+package {{basePackage}}.service;
+
+import {{basePackage}}.dto.RequestData;
+import {{basePackage}}.dto.ResponseData;
+import org.apache.dubbo.config.annotation.DubboService;
+
+@DubboService
+public class DemoServiceImpl implements DemoService {
+
+    @Override
+    public ResponseData service(RequestData param) {
+        ResponseData responseData = new ResponseData();
+        return responseData;
+    }
+}
\ No newline at end of file
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/resources/application.properties.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/resources/application.properties.mustache
new file mode 100644
index 0000000..295f983
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-default/resources/application.properties.mustache
@@ -0,0 +1,4 @@
+
+# 设置dubbo传输协议
+dubbo.protocol.name=dubbo
+dubbo.protocol.port=-1
\ No newline at end of file
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-grpc/api/proto/DemoService.proto.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-grpc/api/proto/DemoService.proto.mustache
new file mode 100644
index 0000000..42589e3
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-grpc/api/proto/DemoService.proto.mustache
@@ -0,0 +1,22 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "{{basePackage}}";
+option java_outer_classname = "DemoServiceProto";
+option objc_class_prefix = "DSP";
+
+// The greeting service definition.
+service DemoService {
+  // Sends a greeting
+  rpc service (RequestData) returns (ResponseData) {}
+}
+
+// The request message containing the user's name.
+message RequestData {
+  string name = 1;
+}
+
+// The response message containing the greetings
+message ResponseData {
+  string message = 1;
+}
\ No newline at end of file
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-grpc/java/DemoServiceImpl.java.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-grpc/java/DemoServiceImpl.java.mustache
new file mode 100644
index 0000000..dafac0b
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-grpc/java/DemoServiceImpl.java.mustache
@@ -0,0 +1,19 @@
+package {{basePackage}}.service;
+
+import {{basePackage}}.RequestData;
+import {{basePackage}}.ResponseData;
+import {{basePackage}}.DemoServiceGrpc;
+import {{basePackage}}.DubboDemoServiceGrpc;
+import io.grpc.stub.StreamObserver;
+import org.apache.dubbo.config.annotation.DubboService;
+
+@DubboService
+public class DemoServiceImpl extends DubboDemoServiceGrpc.DemoServiceImplBase implements DubboDemoServiceGrpc.IDemoService {
+
+    @Override
+    public void service(RequestData request, StreamObserver<ResponseData> responseObserver) {
+        ResponseData reply = ResponseData.newBuilder().setMessage("Hello " + request.getName()).build();
+        responseObserver.onNext(reply);
+        responseObserver.onCompleted();
+    }
+}
\ No newline at end of file
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-grpc/resources/application.properties.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-grpc/resources/application.properties.mustache
new file mode 100644
index 0000000..02e5c72
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-protocol-grpc/resources/application.properties.mustache
@@ -0,0 +1,4 @@
+
+# 设置dubbo传输协议
+dubbo.protocol.name=grpc
+dubbo.protocol.port=-1
\ No newline at end of file
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-registry-nacos/resources/application.properties.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-registry-nacos/resources/application.properties.mustache
new file mode 100644
index 0000000..e6811f4
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-registry-nacos/resources/application.properties.mustache
@@ -0,0 +1,3 @@
+
+# dubbo nacos注册中心说明 https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/nacos/
+dubbo.registry.address: nacos://nacos:nacos@${nacos.address:127.0.0.1}:8848
\ No newline at end of file
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-registry-zookeeper/resources/application.properties.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-registry-zookeeper/resources/application.properties.mustache
new file mode 100644
index 0000000..2dd9adb
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-registry-zookeeper/resources/application.properties.mustache
@@ -0,0 +1,4 @@
+
+# dubbo zookeeper注册中心说明  https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/zookeeper/
+# zookeeper 配置项手册 https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/properties/#registry
+dubbo.registry.address=zookeeper://${zookeeper.address:127.0.0.1}:2181
\ No newline at end of file
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-serialization-hessian/resources/application.properties.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-serialization-hessian/resources/application.properties.mustache
new file mode 100644
index 0000000..a15409d
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-serialization-hessian/resources/application.properties.mustache
@@ -0,0 +1,3 @@
+
+# 设置dubbo序列化协议
+dubbo.protocol.serialization=hessian2
\ No newline at end of file
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-starter/resources/application.properties.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-starter/resources/application.properties.mustache
new file mode 100644
index 0000000..d317588
--- /dev/null
+++ b/initializer-generator/src/main/resources/templates/codes/dubbo-starter/resources/application.properties.mustache
@@ -0,0 +1,3 @@
+
+# dubbo 服务名
+dubbo.application.name={{appShotName}}-{{module}}
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo-zookeeper/resources/application.properties.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-zookeeper/resources/application.properties.mustache
deleted file mode 100644
index 6334cf1..0000000
--- a/initializer-generator/src/main/resources/templates/codes/dubbo-zookeeper/resources/application.properties.mustache
+++ /dev/null
@@ -1,3 +0,0 @@
-# dubbo zookeeper  https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/zookeeper/
-# Registry 配置项手册 https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/properties/#registry
-dubbo.registry.address=zookeeper://${zookeeper.address:127.0.0.1}:2181
\ No newline at end of file
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo/api/java/DemoService.java.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo/api/java/DemoService.java.mustache
deleted file mode 100644
index 4c44e3d..0000000
--- a/initializer-generator/src/main/resources/templates/codes/dubbo/api/java/DemoService.java.mustache
+++ /dev/null
@@ -1,7 +0,0 @@
-package {{basePackage}}.service;
-
-public interface DemoService {
-
-    String sayHello(String name);
-
-}
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo/java/DemoServiceImpl.java.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo/java/DemoServiceImpl.java.mustache
deleted file mode 100644
index b16417d..0000000
--- a/initializer-generator/src/main/resources/templates/codes/dubbo/java/DemoServiceImpl.java.mustache
+++ /dev/null
@@ -1,12 +0,0 @@
-package {{basePackage}}.service;
-
-import org.apache.dubbo.config.annotation.DubboService;
-
-@DubboService
-public class DemoServiceImpl implements DemoService {
-
-    @Override
-    public String sayHello(String name) {
-        return "Hello " + name;
-    }
-}
\ No newline at end of file
diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo/resources/application.properties.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo/resources/application.properties.mustache
deleted file mode 100644
index b76f186..0000000
--- a/initializer-generator/src/main/resources/templates/codes/dubbo/resources/application.properties.mustache
+++ /dev/null
@@ -1 +0,0 @@
-dubbo.application.name={{appShotName}}-{{module}}
\ No newline at end of file
diff --git a/proto/DemoService.proto/DemoService.proto b/proto/DemoService.proto/DemoService.proto
new file mode 100644
index 0000000..872bfee
--- /dev/null
+++ b/proto/DemoService.proto/DemoService.proto
@@ -0,0 +1,22 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "com.example.demo.demo";
+option java_outer_classname = "DemoServiceProto";
+option objc_class_prefix = "DSP";
+
+// The greeting service definition.
+service DemoService {
+  // Sends a greeting
+  rpc service (RequestData) returns (ResponseData) {}
+}
+
+// The request message containing the user's name.
+message RequestData {
+  string name = 1;
+}
+
+// The response message containing the greetings
+message ResponseData {
+  string message = 1;
+}
\ No newline at end of file