This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch dubbo-customized-version-main in repository https://gitbox.apache.org/repos/asf/dubbo-initializer.git
commit 7f11b66580d8d5bb898fbda3b5d97aaefde5b6dd Author: chickenlj <[email protected]> AuthorDate: Wed Apr 12 01:54:16 2023 +0800 customized dubbo initializer --- .../InitializerMetadataV2JsonMapper.java | 1 + ...alizerProjectRequestToDescriptionConverter.java | 23 ++ .../initializer/controller/ProjectRequest.java | 2 + .../extension/SampleCodeContributor.java | 19 +- .../ArchedMavenProjectGenerationConfiguration.java | 2 +- .../MulitModuleMavenBuildProjectContributor.java | 2 +- .../initializer/metadata/InitializerMetadata.java | 19 ++ .../metadata/InitializerMetadataBuilder.java | 1 + .../metadata/InitializerProperties.java | 7 + .../alibaba/initializer/start/web/WebConfig.java | 2 +- .../ConditionalOnDubboIdlDependency.java} | 24 +- .../generation/condition/OnDubboIdlCondition.java | 47 +++ .../maven/DefaultMavenDependenciesCustomizer.java | 6 - .../DubboMavenProjectGenerationConfiguration.java | 17 +- .../build/maven/IdlMavenPluginCustomizer.java | 45 +++ .../codes/DubboSampleCodeContributor.java | 3 + ...boSourceCodeProjectGenerationConfiguration.java | 3 +- ...terZookeeperProjectGenerationConfiguration.java | 2 - .../src/main/resources/metadata.yaml | 348 ++++++++------------- .../java/DemoServiceImpl.java.mustache | 2 +- .../resources/application.properties.mustache | 8 +- .../codes/dubbo/api/java/DemoService.java.mustache | 2 +- .../codes/dubbo/java/DemoServiceImpl.java.mustache | 4 +- .../resources/application.properties.mustache | 2 +- initializer-page/dev/api.json | 9 + initializer-page/public/bootstrap.html | 2 +- initializer-page/src/components/Application.js | 46 +-- .../src/components/common/builder/Warnings.js | 8 + .../common/builder/quick-search/QuickSearch.js | 2 +- .../src/components/common/layout/Header.js | 4 +- .../src/components/common/layout/QuickLinks.js | 36 ++- .../src/components/reducer/Initializr.js | 1 + .../src/components/reducer/__tests__/Initializr.js | 3 +- initializer-page/src/components/utils/ApiUtils.js | 8 + .../src/components/utils/__tests__/ApiUtils.js | 12 +- initializer-page/src/images/aliyun-icon.png | Bin 4284 -> 0 bytes initializer-page/src/images/dubbo_colorful.png | Bin 0 -> 2529 bytes initializer-page/src/images/dubbo_white.png | Bin 0 -> 1150 bytes initializer-page/static/bootstrap.html | 4 +- initializer-page/static/images/favicon.ico | Bin 0 -> 16958 bytes initializer-page/webpack.common.js | 14 +- 41 files changed, 450 insertions(+), 290 deletions(-) diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/controller/InitializerMetadataV2JsonMapper.java b/initializer-generator/src/main/java/com/alibaba/initializer/controller/InitializerMetadataV2JsonMapper.java index fd2646b..b9e1f78 100644 --- a/initializer-generator/src/main/java/com/alibaba/initializer/controller/InitializerMetadataV2JsonMapper.java +++ b/initializer-generator/src/main/java/com/alibaba/initializer/controller/InitializerMetadataV2JsonMapper.java @@ -76,6 +76,7 @@ public class InitializerMetadataV2JsonMapper extends InitializrMetadataV2JsonMap singleSelect(delegate, metadata.getJavaVersions()); singleSelect(delegate, metadata.getLanguages()); singleSelect(delegate, metadata.getBootVersions()); + singleSelect(delegate, ((InitializerMetadata) metadata).getDubboVersions()); text(delegate, metadata.getGroupId()); text(delegate, metadata.getArtifactId()); text(delegate, metadata.getVersion()); diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/controller/InitializerProjectRequestToDescriptionConverter.java b/initializer-generator/src/main/java/com/alibaba/initializer/controller/InitializerProjectRequestToDescriptionConverter.java index 8d858a7..d1930c8 100644 --- a/initializer-generator/src/main/java/com/alibaba/initializer/controller/InitializerProjectRequestToDescriptionConverter.java +++ b/initializer-generator/src/main/java/com/alibaba/initializer/controller/InitializerProjectRequestToDescriptionConverter.java @@ -16,6 +16,7 @@ package com.alibaba.initializer.controller; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -38,6 +39,7 @@ import io.spring.initializr.web.project.InvalidProjectRequestException; import io.spring.initializr.web.project.ProjectRequestToDescriptionConverter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.util.CollectionUtils; /** * copyed from {@link DefaultProjectRequestToDescriptionConverter} and add some @@ -49,8 +51,22 @@ import org.apache.commons.lang3.StringUtils; public class InitializerProjectRequestToDescriptionConverter implements ProjectRequestToDescriptionConverter<ProjectRequest> { + private void customizeMetadataBasedOnDubboVersion(ProjectRequest request, InitializrMetadata metadata) { + String dubboVersion = request.getDubboVersion(); + metadata.getConfiguration().getEnv().getBoms().forEach((k, v) -> { + if (k.contains("dubbo")) { + if (v.getMappings().get(0) != null) { + v.getMappings().get(0).setVersion(dubboVersion); + } + } + }); + } + + @Override public ProjectDescription convert(ProjectRequest request, InitializrMetadata metadata) { + customizeMetadataBasedOnDubboVersion(request, metadata); + InitializerProjectDescription description = new InitializerProjectDescription(); doConvert(request, description, metadata); doAddition(request, description, metadata); @@ -209,6 +225,13 @@ public class InitializerProjectRequestToDescriptionConverter private List<Dependency> getResolvedDependencies(io.spring.initializr.web.project.ProjectRequest request, String springBootVersion, InitializrMetadata metadata) { List<String> depIds = request.getDependencies(); + // If user click 'generate' button directly without adding any dependency. + if (CollectionUtils.isEmpty(depIds)) { + depIds = new ArrayList<>(); + depIds.add("dubbo"); + depIds.add("dubbo-zookeeper"); + depIds.add("dubbo-tcp"); + } Version requestedVersion = Version.parse(springBootVersion); return depIds.stream().map((it) -> { Dependency dependency = metadata.getDependencies().get(it); diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/controller/ProjectRequest.java b/initializer-generator/src/main/java/com/alibaba/initializer/controller/ProjectRequest.java index 60680ce..0a3650d 100644 --- a/initializer-generator/src/main/java/com/alibaba/initializer/controller/ProjectRequest.java +++ b/initializer-generator/src/main/java/com/alibaba/initializer/controller/ProjectRequest.java @@ -29,4 +29,6 @@ public class ProjectRequest extends WebProjectRequest { private String architecture; + private String dubboVersion = "3.1.8"; + } 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..b4e7279 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 @@ -107,12 +107,19 @@ public class SampleCodeContributor implements ProjectContributor { Map<Dependency, String> dependencyRepoUris = getRepos(description); List<String> uris = new ArrayList<>(); - dependencyRepoUris.values().forEach(uri -> { - if (module.isMain()) - uris.add(uri); - else - uris.add(uri + "/" + module.getName()); - }); + if (architecture.getId().equals("none")) { + dependencyRepoUris.values().forEach(uri -> { + uris.add(uri); + uris.add(uri + "/api"); + }); + } else { + dependencyRepoUris.values().forEach(uri -> { + if (module.isMain()) + uris.add(uri); + else + uris.add(uri + "/" + module.getName()); + }); + } uris.forEach(uri -> { CodeTemplateRepo repo = loader.load(uri); RepoRenderResult result = renderer.render(repo, params); diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/build/maven/ArchedMavenProjectGenerationConfiguration.java b/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/build/maven/ArchedMavenProjectGenerationConfiguration.java index 5cd2719..58d789c 100644 --- a/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/build/maven/ArchedMavenProjectGenerationConfiguration.java +++ b/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/build/maven/ArchedMavenProjectGenerationConfiguration.java @@ -84,7 +84,7 @@ public class ArchedMavenProjectGenerationConfiguration { @Bean public MulitModuleMavenBuildProjectContributor mulitModuleavenBuildProjectContributor( - MavenBuild build, IndentingWriterFactory indentingWriterFactory,InitializrMetadata metadata) { + MavenBuild build, IndentingWriterFactory indentingWriterFactory, InitializrMetadata metadata) { return new MulitModuleMavenBuildProjectContributor(build, indentingWriterFactory, metadata); } diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/build/maven/MulitModuleMavenBuildProjectContributor.java b/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/build/maven/MulitModuleMavenBuildProjectContributor.java index 824dd4b..e5b29ec 100644 --- a/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/build/maven/MulitModuleMavenBuildProjectContributor.java +++ b/initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/build/maven/MulitModuleMavenBuildProjectContributor.java @@ -65,7 +65,7 @@ public class MulitModuleMavenBuildProjectContributor extends MavenBuildProjectCo this.metadata = metadata; this.buildWriter = new MulitModuleMavenBuildWriter(metadata); - // use reflext to replace MavenBuildWriter + // use reflection to replace MavenBuildWriter try { Field buildWriterField = MavenBuildProjectContributor.class.getDeclaredField("buildWriter"); buildWriterField.setAccessible(true); diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerMetadata.java b/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerMetadata.java index 581b462..234345b 100644 --- a/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerMetadata.java +++ b/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerMetadata.java @@ -21,6 +21,7 @@ import java.util.Map; import io.spring.initializr.metadata.DefaultMetadataElement; import io.spring.initializr.metadata.Defaultable; import io.spring.initializr.metadata.InitializrMetadata; +import io.spring.initializr.metadata.SingleSelectCapability; /** * @author <a href="mailto:[email protected]">theonefx</a> @@ -32,6 +33,12 @@ public class InitializerMetadata extends InitializrMetadata { "application architecture", "the architecture of application"); + private final SingleSelectCapability dubboVersions = new SingleSelectCapability( + "dubboVersion", + "Apache Dubbo Version", + "apache dubbo version"); + + protected InitializerMetadata(InitializerProperties configuration) { super(configuration); } @@ -39,9 +46,17 @@ public class InitializerMetadata extends InitializrMetadata { public Map<String, Object> defaults() { Map<String, Object> defaults = super.defaults(); defaults.put("architecture", defaultId(this.architecture)); + defaults.put("dubboVersion", defaultId(this.dubboVersions)); return defaults; } + public void merge(InitializrMetadata other) { + super.merge(other); + InitializerMetadata initializerMetadata = (InitializerMetadata) other; + this.architecture.merge(initializerMetadata.architecture); + this.dubboVersions.merge(initializerMetadata.dubboVersions); + } + private static String defaultId(Defaultable<? extends DefaultMetadataElement> element) { DefaultMetadataElement defaultValue = element.getDefault(); return (defaultValue != null) ? defaultValue.getId() : null; @@ -51,6 +66,10 @@ public class InitializerMetadata extends InitializrMetadata { return this.architecture; } + public SingleSelectCapability getDubboVersions() { + return dubboVersions; + } + public InitializerProperties getInitializerConfiguration() { return (InitializerProperties) getConfiguration(); } diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerMetadataBuilder.java b/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerMetadataBuilder.java index eba2b00..924a7f9 100644 --- a/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerMetadataBuilder.java +++ b/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerMetadataBuilder.java @@ -106,6 +106,7 @@ public class InitializerMetadataBuilder { public void customize(InitializrMetadata metadata) { InitializerMetadata initializerMetadata = (InitializerMetadata) metadata; initializerMetadata.getArchitecture().merge(this.properties.getArchitecture()); + initializerMetadata.getDubboVersions().merge(this.properties.getDubboVersions()); initializerMetadata.getDependencies().merge(new ArrayList<>(this.properties.getDependencies())); metadata.getTypes().merge(this.properties.getTypes()); metadata.getBootVersions().merge(this.properties.getBootVersions()); diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerProperties.java b/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerProperties.java index 5b928fa..21a6bb9 100644 --- a/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerProperties.java +++ b/initializer-generator/src/main/java/com/alibaba/initializer/metadata/InitializerProperties.java @@ -76,6 +76,9 @@ public class InitializerProperties extends InitializrConfiguration { @JsonIgnore private final List<DefaultMetadataElement> bootVersions = new ArrayList<>(); + @JsonIgnore + private final List<DefaultMetadataElement> dubboVersions = new ArrayList<>(); + /** * GroupId metadata. */ @@ -140,6 +143,10 @@ public class InitializerProperties extends InitializrConfiguration { return this.bootVersions; } + public List<DefaultMetadataElement> getDubboVersions() { + return dubboVersions; + } + public InitializrProperties.SimpleElement getGroupId() { return this.groupId; } diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/start/web/WebConfig.java b/initializer-generator/src/main/java/com/alibaba/initializer/start/web/WebConfig.java index c3ccc64..f2677c5 100644 --- a/initializer-generator/src/main/java/com/alibaba/initializer/start/web/WebConfig.java +++ b/initializer-generator/src/main/java/com/alibaba/initializer/start/web/WebConfig.java @@ -38,7 +38,7 @@ public class WebConfig implements WebMvcConfigurer { static private final Set<String> ALLOWED_ORIGIN_HTTP = new HashSet<>(); static { - ALLOWED_ORIGIN_HTTP.add("https://start.dubbo.apachr.org"); + ALLOWED_ORIGIN_HTTP.add("https://start.dubbo.apache.org"); } @Bean diff --git a/initializer-generator/src/main/java/com/alibaba/initializer/controller/ProjectRequest.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/condition/ConditionalOnDubboIdlDependency.java similarity index 54% copy from initializer-generator/src/main/java/com/alibaba/initializer/controller/ProjectRequest.java copy to initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/condition/ConditionalOnDubboIdlDependency.java index 60680ce..1e5223f 100644 --- a/initializer-generator/src/main/java/com/alibaba/initializer/controller/ProjectRequest.java +++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/condition/ConditionalOnDubboIdlDependency.java @@ -14,19 +14,23 @@ * limitations under the License. */ -package com.alibaba.initializer.controller; +package org.apache.dubbo.initializer.generation.condition; -import io.spring.initializr.web.project.WebProjectRequest; -import lombok.Getter; -import lombok.Setter; +import org.springframework.context.annotation.Conditional; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** - * @author <a href="mailto:[email protected]">theonefx</a> + * @author Weix Sun */ -@Getter -@Setter -public class ProjectRequest extends WebProjectRequest { - - private String architecture; +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.TYPE, ElementType.METHOD }) +@Documented +@Conditional(OnDubboIdlCondition.class) +public @interface ConditionalOnDubboIdlDependency { } diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/condition/OnDubboIdlCondition.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/condition/OnDubboIdlCondition.java new file mode 100644 index 0000000..17ed992 --- /dev/null +++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/condition/OnDubboIdlCondition.java @@ -0,0 +1,47 @@ +/* + * 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.condition; + +import com.alibaba.initializer.metadata.Architecture; +import com.alibaba.initializer.metadata.Module; +import com.alibaba.initializer.project.InitializerProjectDescription; +import io.spring.initializr.generator.condition.ProjectGenerationCondition; +import io.spring.initializr.generator.project.ProjectDescription; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +import java.util.Arrays; + +/** + * @author Weix Sun + */ +public class OnDubboIdlCondition extends ProjectGenerationCondition { + + @Override + protected boolean matches(ProjectDescription description, ConditionContext context, + AnnotatedTypeMetadata metadata) { + InitializerProjectDescription initializerDescriptiuon = (InitializerProjectDescription)description; + Architecture architecture = initializerDescriptiuon.getArchitecture(); + if (architecture.getId().equals("none")) { + return true; + } + + Module module = context.getBeanFactory().getBean(Module.class); + String requestModuleName = module.getName() == null && module.isRoot() ? "root" : module.getName(); + return requestModuleName.equals("service"); + } +} 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/DefaultMavenDependenciesCustomizer.java index d2ff94a..ebcd58c 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/DefaultMavenDependenciesCustomizer.java @@ -36,12 +36,6 @@ public class DefaultMavenDependenciesCustomizer implements BuildCustomizer<Maven @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/build/maven/DubboMavenProjectGenerationConfiguration.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/DubboMavenProjectGenerationConfiguration.java index 34b6b92..0d74445 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 @@ -17,22 +17,26 @@ package org.apache.dubbo.initializer.generation.extension.build.maven; import com.alibaba.initializer.generation.InitializerProjectGenerationConfiguration; +import com.alibaba.initializer.generation.condition.ConditionalOnArchitectured; import com.alibaba.initializer.generation.condition.ConditionalOnRequestedArchitecture; import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem; import io.spring.initializr.generator.condition.ConditionalOnBuildSystem; -import io.spring.initializr.generator.project.ProjectGenerationConfiguration; + +import org.apache.dubbo.initializer.generation.condition.ConditionalOnDubboIdlDependency; import org.apache.dubbo.initializer.generation.condition.ConditionalOnRequestedModule; + +import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency; import org.springframework.context.annotation.Bean; /** * @author <a href="mailto:[email protected]">ErDan Wang</a> */ @InitializerProjectGenerationConfiguration -@ConditionalOnRequestedArchitecture("dubbo") @ConditionalOnBuildSystem(MavenBuildSystem.ID) public class DubboMavenProjectGenerationConfiguration { @Bean + @ConditionalOnRequestedArchitecture("dubbo") @ConditionalOnRequestedModule(value = "api") public ApiMavenPluginCustomizer apiMavenPluginCustomizer() { return new ApiMavenPluginCustomizer(); @@ -40,15 +44,24 @@ public class DubboMavenProjectGenerationConfiguration { // Root Maven Bom remove in MulitModuleMavenBuildProjectContributor @Bean + @ConditionalOnRequestedArchitecture("dubbo") @ConditionalOnRequestedModule(value = "root") public RootMavenPluginCustomizer rootMavenPluginCustomizer() { return new RootMavenPluginCustomizer(); } @Bean + @ConditionalOnRequestedArchitecture("dubbo") @ConditionalOnRequestedModule({"root", "api"}) public DefaultMavenDependenciesCustomizer defaultMavenDependenciesCustomizer() { return new DefaultMavenDependenciesCustomizer(); } + @Bean + @ConditionalOnDubboIdlDependency + @ConditionalOnRequestedDependency("dubbo-idl") + public IdlMavenPluginCustomizer IdlMavenPluginCustomizer() { + return new IdlMavenPluginCustomizer(); + } + } diff --git a/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/IdlMavenPluginCustomizer.java b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/IdlMavenPluginCustomizer.java new file mode 100644 index 0000000..c8dce73 --- /dev/null +++ b/initializer-generator/src/main/java/org/apache/dubbo/initializer/generation/extension/build/maven/IdlMavenPluginCustomizer.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.dubbo.initializer.generation.extension.build.maven; + +import io.spring.initializr.generator.buildsystem.maven.MavenBuild; +import io.spring.initializr.generator.spring.build.BuildCustomizer; + +public class IdlMavenPluginCustomizer implements BuildCustomizer<MavenBuild> { + @Override + public void customize(MavenBuild mavenBuild) { + mavenBuild.plugins().add("org.xolstice.maven.plugins", "protobuf-maven-plugin", builder -> { + builder.version("0.6.1") + .execution("protoc-compile", executionBuilder -> { + executionBuilder.goal("compile").goal("test-compile").goal("compile-custom").goal("test-compile-custom"); + }) + .configuration(configurationBuilder -> { + configurationBuilder.add("protocArtifact", "com.google.protobuf:protoc:${protoc.version}:exe:${os.detected.classifier}"); + configurationBuilder.add("grpc-java", "io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}"); + configurationBuilder.add("protocPlugins", protocPluginsBuilder -> { + protocPluginsBuilder.add("protocPlugin", protocPluginBuilder -> { + protocPluginBuilder.add("id", "dubbo"); + protocPluginBuilder.add("groupId", "dubbo-compiler"); + protocPluginBuilder.add("artifactId", "${dubbo.version}"); + protocPluginBuilder.add("mainClass", "org.apache.dubbo.gen.tri.Dubbo3TripleGenerator"); + }); + }); + }) + .build(); + }); + } +} 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/DubboSampleCodeContributor.java index 890e4dc..f859f7b 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/DubboSampleCodeContributor.java @@ -23,6 +23,7 @@ import com.alibaba.initializer.core.template.CodeTemplateRepoRenderer; import com.alibaba.initializer.core.template.RepoRenderResult; import com.alibaba.initializer.core.template.loader.RootRepoTemplateLoader; import com.alibaba.initializer.generation.constants.BootstrapTemplateRenderConstants; +import com.alibaba.initializer.generation.extension.SampleCodeContributor; import com.alibaba.initializer.metadata.Module; import com.alibaba.initializer.metadata.*; import com.alibaba.initializer.project.InitializerProjectDescription; @@ -54,6 +55,8 @@ import java.util.stream.Collectors; import static com.alibaba.initializer.generation.constants.BootstrapTemplateRenderConstants.KEY_ARTIFACT_ID; /** + * Not enabled for now, please use {@linkplain SampleCodeContributor} instead. + * * @author @author <a href="mailto:[email protected]">ErDan Wang</a> */ public class DubboSampleCodeContributor implements ProjectContributor { 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..3082f04 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 @@ -13,12 +13,11 @@ import io.spring.initializr.generator.spring.code.MainApplicationTypeCustomizer; import org.springframework.context.annotation.Bean; @InitializerProjectGenerationConfiguration -@ConditionalOnRequestedArchitecture("dubbo") @ConditionalOnModule(main = true) @ConditionalOnLanguage(JavaLanguage.ID) public class DubboSourceCodeProjectGenerationConfiguration { @Bean - @ConditionalOnRequestedDependency("dubbo") +// @ConditionalOnRequestedDependency("dubbo") public MainApplicationTypeCustomizer<TypeDeclaration> enableDubboAnnotator() { return (typeDeclaration) -> { typeDeclaration.annotate(Annotation.name("org.apache.dubbo.config.spring.context.annotation.EnableDubbo")); 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/dubbregisterzookeeper/DubboRegisterZookeeperProjectGenerationConfiguration.java index a39d539..c7aaf5b 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/dubbregisterzookeeper/DubboRegisterZookeeperProjectGenerationConfiguration.java @@ -31,10 +31,8 @@ import org.springframework.context.annotation.Bean; */ @ProjectGenerationConfiguration @ConditionalOnRequestedDependency("dubbo-register-zookeeper") -@ConditionalOnRequestedArchitecture("pic") class DubboRegisterZookeeperProjectGenerationConfiguration { - @Bean @ConditionalOnRequestedModule("root") DubboRegisterZookeeperBuildCustomizer dubboRegisterZookeeperBuildCustomizer() { diff --git a/initializer-generator/src/main/resources/metadata.yaml b/initializer-generator/src/main/resources/metadata.yaml index 2764ad4..d7a0934 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.8 apache-dubbo-zookeeper: groupId: org.apache.dubbo artifactId: dubbo-dependencies-zookeeper @@ -15,7 +15,15 @@ initializr: additionalBoms: [ apache-dubbo ] mappings: - compatibilityRange: "2.3.0.M1" - version: 3.0.7 + version: 3.1.8 + apache-dubbo-zookeeper-curator5: + groupId: org.apache.dubbo + artifactId: dubbo-dependencies-zookeeper-curator5 + versionProperty: dubbo.version + additionalBoms: [ apache-dubbo ] + mappings: + - compatibilityRange: "2.3.0.M1" + version: 3.1.8 codecentric-spring-boot-admin: groupId: de.codecentric artifactId: spring-boot-admin-dependencies @@ -219,15 +227,34 @@ initializr: url: https://oss.sonatype.org/content/repositories/snapshots/ releasesEnabled: false snapshotsEnabled: true + apache-snapshots: + name: Apache Snapshots + url: https://repository.apache.org/content/repositories/snapshots + releasesEnabled: false + snapshotsEnabled: true dependencies: - - name: Dubbo Core + - name: Dubbo Service API bom: apache-dubbo content: - - name: Dubbo Spring Boot + - name: Java Interface (default) id: dubbo groupId: org.apache.dubbo artifactId: dubbo-spring-boot-starter - description: Dubbo Spring Boot + description: Use java interface as the standard Dubbo service definition + starter: false +# hide: true + archCfg: + dubbo: + modules: + api: + code: true + service: + code: true + - name: IDL + id: dubbo-idl + groupId: org.apache.dubbo + artifactId: dubbo-spring-boot-starter + description: Use IDL as the standard Dubbo service definition starter: false archCfg: dubbo: @@ -236,37 +263,98 @@ initializr: code: true service: code: true - - name: Dubbo Registry + - name: Dubbo Governance content: - - name: Zookeeper 注册中心 + - name: Zookeeper (default) id: dubbo-zookeeper groupId: org.apache.dubbo artifactId: dubbo-dependencies-zookeeper type: pom - description: 使用Zookeeper作为Dubbo注册中心 + description: "使用 Zookeeper 作为服务治理中心,可选作为注册中心、配置中心、元数据中心" 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 + - name: Zookeeper-curator5 + id: dubbo-zookeeper-curator5 + groupId: org.apache.dubbo + artifactId: dubbo-dependencies-zookeeper-curator5 + type: pom + description: "[高版本] 使用 Zookeeper 作为服务治理中心,可选作为注册中心、配置中心、元数据中心" starter: false - hide: true - - name: Dubbo Protocols - content: - - name: protocol1 - id: protocol1 - description: protocol1 + compatibilityRange: "[2.0.0.RELEASE,3.1.0-M1)" + bom: apache-dubbo-zookeeper-curator5 + codeOnly: false + - name: Nacos + id: dubbo-nacos + groupId: com.alibaba.nacos + artifactId: nacos-client + versionProperty: nacos.version + version: 2.2.1 + description: "使用 Nacos 作为服务治理中心,可选作为注册中心、配置中心、元数据中心" + starter: false + compatibilityRange: "[2.0.0.RELEASE,3.1.0-M1)" + codeOnly: false + - name: Apollo + id: dubbo-apollo + groupId: com.ctrip.framework.apollo + artifactId: apollo-client + versionProperty: apollo.version + version: 2.1.0 + description: "使用 Apollo 作为配置中心" starter: false - - name: Dubbo Serialization + compatibilityRange: "[2.0.0.RELEASE,3.1.0-M1)" + codeOnly: false + - name: Redis + id: dubbo-redis + groupId: redis.clients + artifactId: jedis + versionProperty: jedis.version + version: 3.9.0 + description: "使用 Redis 作为元数据中心" + starter: false + compatibilityRange: "[2.0.0.RELEASE,3.1.0-M1)" + codeOnly: false + - name: Dubbo Protocol content: - - name: serialization1 - id: serialization1 - description: serialization1 + - name: http2 (default) + id: dubbo-http2 + description: (HTTP/2) http2 protocol, streaming data exchange. starter: false + - name: grpc + id: dubbo-grpc + description: gRPC protocol, streaming data exchange. + starter: false + - name: tcp + id: dubbo-tcp + description: Dubbo2 tcp protocol. + starter: false + - name: REST + id: dubbo-rest + description: Dubbo2 rest protocol. + starter: false + - name: 单端口多协议 + id: dubbo-multi-protocols + description: port unification. + starter: false + - name: Dubbo Features + content: + - name: QoS + id: dubbo-qos + description: qos. + starter: false + - name: Metrics + id: dubbo-metrics + description: metrics. + starter: false + - name: Tracing + id: dubbo-tracing + description: tracing. + starter: false + - name: 限流降级 + id: dubbo-sentinel + description: sentinel. + starter: false - name: Developer Tools content: - name: Arthas @@ -1264,164 +1352,6 @@ initializr: links: - rel: reference href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#data.nosql.mongodb.embedded - - 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 @@ -1481,45 +1411,41 @@ initializr: - name: Java id: java default: true - - name: Kotlin - id: kotlin - default: false - - name: Groovy - id: groovy - default: false bootVersions: - - name: 3.0.0 - id: 3.0.0 - - name: 2.7.6 - id: 2.7.6 - - name: 2.6.11 - id: 2.6.11 + - name: 3.0.5 + id: 3.0.5 + default: true + - name: 2.7.10 + id: 2.7.10 + dubboVersions: + - name: 3.2.0 (beta) + id: 3.2.0 + - name: 3.1.8 + id: 3.1.8 default: true - - name: 2.4.2 - id: 2.4.2 - - name: 2.2.2.RELEASE - id: 2.2.2.RELEASE + - name: 2.7.21 + id: 2.7.21 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 + - id: dubbo + name: 多模块 subModules: - name: api description: api 模块,对外提供的 API - name: service description: service 模块,存放核心业务逻辑代码 main: true - dependModules: 'api' \ No newline at end of file + dependModules: 'api' +# - 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 概念,存放核心业务逻辑与 Dubbo 服务相关代码 \ No newline at end of file diff --git a/initializer-generator/src/main/resources/templates/codes/dubbo/java/DemoServiceImpl.java.mustache b/initializer-generator/src/main/resources/templates/codes/dubbo-idl/java/DemoServiceImpl.java.mustache similarity index 84% copy from initializer-generator/src/main/resources/templates/codes/dubbo/java/DemoServiceImpl.java.mustache copy to initializer-generator/src/main/resources/templates/codes/dubbo-idl/java/DemoServiceImpl.java.mustache index b16417d..c10a175 100644 --- a/initializer-generator/src/main/resources/templates/codes/dubbo/java/DemoServiceImpl.java.mustache +++ b/initializer-generator/src/main/resources/templates/codes/dubbo-idl/java/DemoServiceImpl.java.mustache @@ -1,4 +1,4 @@ -package {{basePackage}}.service; +package {{basePackage}}.dubbo.service; import org.apache.dubbo.config.annotation.DubboService; 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 index 6334cf1..eb58b1d 100644 --- 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 @@ -1,3 +1,9 @@ # 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 +dubbo.registry.address=zookeeper://${zookeeper.address:127.0.0.1}:2181 +# Use the following configuration to stop using registry as metadata and config center. +# dubbo.registry.useAsMetadataCenter=false +# dubbo.registry.useAsConfigCenter=false +# Explicitly specify different metadata & config centers will also stop reusing the registry cluster. +# dubbo.metadata-report.address=nacos://host:port +# dubbo.config-center.address=apollo://host:port \ 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 index 4c44e3d..dd5cef3 100644 --- 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 @@ -1,4 +1,4 @@ -package {{basePackage}}.service; +package {{basePackage}}.dubbo.api; public interface DemoService { 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 index b16417d..6cc8311 100644 --- 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 @@ -1,4 +1,6 @@ -package {{basePackage}}.service; +package {{basePackage}}.dubbo.service; + +import {{basePackage}}.dubbo.api.DemoService import org.apache.dubbo.config.annotation.DubboService; 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 index b76f186..8dadfd0 100644 --- 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 @@ -1 +1 @@ -dubbo.application.name={{appShotName}}-{{module}} \ No newline at end of file +dubbo.application.name={{applicationName}} diff --git a/initializer-page/dev/api.json b/initializer-page/dev/api.json index 3a5884d..669f65f 100644 --- a/initializer-page/dev/api.json +++ b/initializer-page/dev/api.json @@ -1408,6 +1408,15 @@ { "id": "groovy", "name": "Groovy" } ] }, + "dubboVersion": { + "type": "single-select", + "default": "3.1.8", + "values": [ + { "id": "3.2.0", "name": "3.2.0" }, + { "id": "3.1.8", "name": "3.1.8" }, + { "id": "2.7.21", "name": "2.7.21" } + ] + }, "bootVersion": { "type": "single-select", "default": "2.2.0.RELEASE", diff --git a/initializer-page/public/bootstrap.html b/initializer-page/public/bootstrap.html index 4c18668..08d305c 100644 --- a/initializer-page/public/bootstrap.html +++ b/initializer-page/public/bootstrap.html @@ -1 +1 @@ -<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="data-spm" content="a2ck6"><meta name="aes-config" content="pid=5tYCpT&user_type=6&uid=&username="><title>Cloud Native App Initializer</title><link rel="shortcut icon" href="/images/dubbo-colorful.png"><meta http-equiv="x-ua-compatible" content="ie=edge"><link rel="canonical" href="https://github.com/alibaba/dubbo-initializer"><meta nam [...] \ No newline at end of file +<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="data-spm" content="a2ck6"><meta name="aes-config" content="pid=5tYCpT&user_type=6&uid=&username="><title>Cloud Native App Initializer</title><link rel="shortcut icon" href="/images/favicon.ico"><meta http-equiv="x-ua-compatible" content="ie=edge"><link rel="canonical" href="https://github.com/alibaba/dubbo-initializer"><meta name="desc [...] \ No newline at end of file diff --git a/initializer-page/src/components/Application.js b/initializer-page/src/components/Application.js index 1ca5af8..007ea9c 100644 --- a/initializer-page/src/components/Application.js +++ b/initializer-page/src/components/Application.js @@ -134,26 +134,36 @@ export default function Application() { ) : ( <> <Warnings /> - <Control text='项目构建方式'> + {/*<Control text='项目构建方式'>*/} + {/* <RadioGroup*/} + {/* name='project'*/} + {/* selected={get(values, 'project')}*/} + {/* options={get(config, 'lists.project')}*/} + {/* onChange={value => {*/} + {/* update({ project: value })*/} + {/* }}*/} + {/* />*/} + {/*</Control>*/} + {/*<Control text='开发语言'>*/} + {/* <RadioGroup*/} + {/* name='language'*/} + {/* selected={get(values, 'language')}*/} + {/* options={get(config, 'lists.language')}*/} + {/* onChange={value => {*/} + {/* update({ language: value })*/} + {/* }}*/} + {/* />*/} + {/*</Control>*/} + <Control text='Dubbo版本'> <RadioGroup - name='project' - selected={get(values, 'project')} - options={get(config, 'lists.project')} - onChange={value => { - update({ project: value }) - }} - /> - </Control> - <Control text='开发语言'> - <RadioGroup - name='language' - selected={get(values, 'language')} - options={get(config, 'lists.language')} - onChange={value => { - update({ language: value }) - }} + name='dubboVersion' + selected={get(values, 'dubboVersion')} + options={get(config, 'lists.dubboVersion')} + onChange={value => { + update({ dubboVersion: value }) + }} /> - </Control> + </Control> <Control text='Spring Boot版本'> <RadioGroup name='boot' diff --git a/initializer-page/src/components/common/builder/Warnings.js b/initializer-page/src/components/common/builder/Warnings.js index faa2146..3571765 100644 --- a/initializer-page/src/components/common/builder/Warnings.js +++ b/initializer-page/src/components/common/builder/Warnings.js @@ -42,6 +42,14 @@ function Warnings() { selected. </li> )} + {get(warnings, 'dubboVersion') && ( + <li> + <strong>{get(warnings, 'dubboVersion.value')}</strong> is not a + available,{' '} + <strong>{get(warnings, 'dubboVersion.select')}</strong> has been + selected. + </li> + )} {get(warnings, 'boot') && ( <li> Spring Boot <strong>{get(warnings, 'boot.value')}</strong> is diff --git a/initializer-page/src/components/common/builder/quick-search/QuickSearch.js b/initializer-page/src/components/common/builder/quick-search/QuickSearch.js index 73025bb..d0c31c4 100644 --- a/initializer-page/src/components/common/builder/quick-search/QuickSearch.js +++ b/initializer-page/src/components/common/builder/quick-search/QuickSearch.js @@ -121,7 +121,7 @@ const QuickSearch = ({ submit, input }) => { <input type='text' className='control-input' - placeholder='Web, Security, JPA, Actuator, Devtools...' + placeholder='Zookeeper, Nacos, Metrics, Tracing, HTTP/2, IDL, Web...' value={query} onBlur={onBlur} onFocus={onFocus} diff --git a/initializer-page/src/components/common/layout/Header.js b/initializer-page/src/components/common/layout/Header.js index 9495f6d..6487a6c 100644 --- a/initializer-page/src/components/common/layout/Header.js +++ b/initializer-page/src/components/common/layout/Header.js @@ -6,9 +6,9 @@ const Header = ({ children }) => ( <h1 className='logo'> <a href='/bootstrap.html'> <span className='title'> - <strong>云原生</strong>应用脚手架 + <strong>Dubbo</strong>应用脚手架 </span> - <span className='description'>Cloud Native App Initializer</span> + <span className='description'>快速创建 Dubbo 应用</span> </a> </h1> {children} diff --git a/initializer-page/src/components/common/layout/QuickLinks.js b/initializer-page/src/components/common/layout/QuickLinks.js index 27fbdb6..bf8e7b1 100644 --- a/initializer-page/src/components/common/layout/QuickLinks.js +++ b/initializer-page/src/components/common/layout/QuickLinks.js @@ -3,7 +3,7 @@ import React, {useContext, useEffect, useRef, useState} from 'react' import {CSSTransition, TransitionGroup} from 'react-transition-group' import {AppContext} from '../../reducer/App' -import {IconCaretDown, IconHelp} from '../icons' +import {IconCaretDown, IconFeedBack, IconHelp, IconHot, IconInitialzrTutorial} from '../icons' import {Switch} from '../form' const QuickLinks = () => { @@ -57,6 +57,28 @@ const QuickLinks = () => { {theme === 'dark' ? '深色' : '浅色'} 主题 </span> </li> + <li> + <a + target='_blank' + rel='noopener noreferrer' + href='https://dubbo.apache.org/' + tabIndex='-1' + > + <IconInitialzrTutorial/> + 访问 Dubbo 官网 + </a> + </li> + <li> + <a + target='_blank' + rel='noopener noreferrer' + href='https://dubbo.apache.org/zh-cn/contact/books/' + tabIndex='-1' + > + <IconHot/> + Dubbo 电子书下载 + </a> + </li> <li> <a href='/' @@ -82,10 +104,10 @@ const QuickLinks = () => { id='ql-help-projects' target='_blank' rel='noopener noreferrer' - href='https://spring.io/projects' + href='https://dubbo.apache.org' tabIndex='-1' > - Spring Projects + Apache Dubbo Website </a> </li> <li> @@ -94,9 +116,9 @@ const QuickLinks = () => { target='_blank' rel='noopener noreferrer' tabIndex='-1' - href='https://spring.io/projects/spring-cloud/' + href='http://github.com/apache/dubbo' > - Spring Cloud + Apache Github Dubbo-java </a> </li> <li> @@ -105,9 +127,9 @@ const QuickLinks = () => { target='_blank' rel='noopener noreferrer' tabIndex='-1' - href='https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md' + href='http://github.com/apache/dubbo-go' > - Spring Cloud Alibaba + Apache Github Dubbo-go </a> </li> </ul> diff --git a/initializer-page/src/components/reducer/Initializr.js b/initializer-page/src/components/reducer/Initializr.js index 9c4e603..f36de1f 100644 --- a/initializer-page/src/components/reducer/Initializr.js +++ b/initializer-page/src/components/reducer/Initializr.js @@ -11,6 +11,7 @@ export const defaultInitializrContext = { language: '', architecture: '', boot: '', + dubboVersion: '', meta: { name: '', group: '', diff --git a/initializer-page/src/components/reducer/__tests__/Initializr.js b/initializer-page/src/components/reducer/__tests__/Initializr.js index 1f5ae52..85dcded 100644 --- a/initializer-page/src/components/reducer/__tests__/Initializr.js +++ b/initializer-page/src/components/reducer/__tests__/Initializr.js @@ -24,6 +24,7 @@ describe('COMPLETE action', () => { language: '', architecture: '', boot: '', + dubboVersion: '', meta: { name: '', group: '', @@ -48,7 +49,7 @@ describe('COMPLETE action', () => { }, }) expect(get(result, 'share')).toBe( - 'type=maven-project&language=java&architecture=none&platformVersion=2.2.0.RELEASE&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo' + 'type=maven-project&language=java&dubboVersion=3.1.8&architecture=none&platformVersion=2.2.0.RELEASE&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo' ) expect(get(result, 'values.project')).toBe('maven-project') expect(get(result, 'values.language')).toBe('java') diff --git a/initializer-page/src/components/utils/ApiUtils.js b/initializer-page/src/components/utils/ApiUtils.js index eef6d6d..994fdd5 100644 --- a/initializer-page/src/components/utils/ApiUtils.js +++ b/initializer-page/src/components/utils/ApiUtils.js @@ -8,6 +8,7 @@ import {isInRange, parseReleases, parseVersion} from './Version' const PROPERTIES_MAPPING_URL = { type: 'project', language: 'language', + dubboVersion: 'dubboVersion', architecture: 'architecture', platformVersion: 'boot', packaging: 'meta.packaging', @@ -82,6 +83,7 @@ export const parseParams = (values, queryParams, lists) => { case 'language': case 'architecture': case 'meta.packaging': + case 'dubboVersion': case 'meta.java': { const list = get(lists, key, []) const res = list.find(a => a.key.toLowerCase() === value) @@ -214,6 +216,10 @@ export const getLists = json => { key: `${language.id}`, text: `${language.name}`, })), + dubboVersion: get(json, 'dubboVersion.values', []).map(dubboVersion => ({ + key: `${dubboVersion.id}`, + text: `${dubboVersion.name}`, + })), architecture: get(json, 'architecture.values', []).map(architecture => ({ key: `${architecture.id}`, text: `${architecture.name}`, @@ -241,6 +247,7 @@ export const getDefaultValues = json => { return { project: get(json, 'type.default'), language: get(json, 'language.default'), + dubboVersion: get(json, 'dubboVersion.default'), architecture: get(json, 'architecture.default'), boot: get(json, 'bootVersion.default'), meta: { @@ -280,6 +287,7 @@ export const getQueryString = function getQueryString(values, config) { language: get(values, 'language'), architecture: get(values, 'architecture'), bootVersion: get(values, 'boot'), + dubboVersion: get(values, 'dubboVersion'), baseDir: get(values, 'meta.artifact'), groupId: get(values, 'meta.group'), artifactId: get(values, 'meta.artifact'), diff --git a/initializer-page/src/components/utils/__tests__/ApiUtils.js b/initializer-page/src/components/utils/__tests__/ApiUtils.js index 461d7f6..ff6eb75 100644 --- a/initializer-page/src/components/utils/__tests__/ApiUtils.js +++ b/initializer-page/src/components/utils/__tests__/ApiUtils.js @@ -322,6 +322,7 @@ describe('getShareUrl', () => { language: 'foo2', architecture: 'none', boot: 'foo3', + dubboVersion: 'fooDubbo', meta: { packaging: 'foo4', java: 'foo5', @@ -334,7 +335,7 @@ describe('getShareUrl', () => { dependencies: ['foo11', 'foo12'], }) expect(result).toBe( - 'type=foo1&language=foo2&architecture=none&platformVersion=foo3&packaging=foo4&jvmVersion=foo5&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&dependencies=foo11,foo12' + 'type=foo1&language=foo2&dubboVersion=fooDubbo&architecture=none&platformVersion=foo3&packaging=foo4&jvmVersion=foo5&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&dependencies=foo11,foo12' ) }) }) @@ -353,6 +354,7 @@ describe('getProject', () => { language: 'foo2', architecture: 'none', boot: 'foo3', + dubboVersion: 'fooDubbo', meta: { packaging: 'foo4', java: 'foo5', @@ -370,7 +372,7 @@ describe('getProject', () => { ]) expect(fetch.mock.calls.length).toEqual(1) expect(fetch.mock.calls[0][0]).toEqual( - 'http://demo/starter.zip?type=foo1&language=foo2&architecture=none&bootVersion=foo3&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5&dependencies=foo11,foo12' + 'http://demo/starter.zip?type=foo1&language=foo2&architecture=none&bootVersion=foo3&dubboVersion=fooDubbo&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5&dependencies=foo11,foo12' ) }) @@ -379,6 +381,7 @@ describe('getProject', () => { project: 'foo1', language: 'foo2', architecture: 'none', + dubboVersion: 'fooDubbo', boot: 'foo3', meta: { packaging: 'foo4', @@ -394,7 +397,7 @@ describe('getProject', () => { getProject('http://demo/starter.zip', values, [{ id: 'foo11' }]) expect(fetch.mock.calls.length).toEqual(1) expect(fetch.mock.calls[0][0]).toEqual( - 'http://demo/starter.zip?type=foo1&language=foo2&architecture=none&bootVersion=foo3&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5&dependencies=foo11' + 'http://demo/starter.zip?type=foo1&language=foo2&architecture=none&bootVersion=foo3&dubboVersion=fooDubbo&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5&dependencies=foo11' ) }) @@ -404,6 +407,7 @@ describe('getProject', () => { language: 'foo2', architecture: 'none', boot: 'foo3', + dubboVersion: 'fooDubbo', meta: { packaging: 'foo4', java: 'foo5', @@ -417,7 +421,7 @@ describe('getProject', () => { getProject('http://demo/starter.zip', values, []) expect(fetch.mock.calls.length).toEqual(1) expect(fetch.mock.calls[0][0]).toEqual( - 'http://demo/starter.zip?type=foo1&language=foo2&architecture=none&bootVersion=foo3&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5' + 'http://demo/starter.zip?type=foo1&language=foo2&architecture=none&bootVersion=foo3&dubboVersion=fooDubbo&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5' ) }) }) diff --git a/initializer-page/src/images/aliyun-icon.png b/initializer-page/src/images/aliyun-icon.png deleted file mode 100644 index bbb50cf..0000000 Binary files a/initializer-page/src/images/aliyun-icon.png and /dev/null differ diff --git a/initializer-page/src/images/dubbo_colorful.png b/initializer-page/src/images/dubbo_colorful.png new file mode 100644 index 0000000..c48044b Binary files /dev/null and b/initializer-page/src/images/dubbo_colorful.png differ diff --git a/initializer-page/src/images/dubbo_white.png b/initializer-page/src/images/dubbo_white.png new file mode 100644 index 0000000..21d3d0e Binary files /dev/null and b/initializer-page/src/images/dubbo_white.png differ diff --git a/initializer-page/static/bootstrap.html b/initializer-page/static/bootstrap.html index 6830e26..18cabfa 100644 --- a/initializer-page/static/bootstrap.html +++ b/initializer-page/static/bootstrap.html @@ -7,7 +7,7 @@ <meta name="aes-config" content="pid=5tYCpT&user_type=6&uid=&username="/> <title><%= htmlWebpackPlugin.options.title %></title> - <link rel="shortcut icon" href="/images/dubbo-colorful.png"/> + <link rel="shortcut icon" href="/images/favicon.ico"/> <meta http-equiv="x-ua-compatible" content="ie=edge"/> @@ -241,7 +241,7 @@ <noscript> <div class="noscript"> <strong> - <a href="https://start.aliyun.com">start.aliyun.com</a> can't work! </strong + <a href="https://start.dubbo.apache.org">start.dubbo.apache.org</a> can't work! </strong ><br/> This app needs JavaScript enabled. </div> diff --git a/initializer-page/static/images/favicon.ico b/initializer-page/static/images/favicon.ico new file mode 100644 index 0000000..eedaf39 Binary files /dev/null and b/initializer-page/static/images/favicon.ico differ diff --git a/initializer-page/webpack.common.js b/initializer-page/webpack.common.js index 98cad2b..cc7961d 100644 --- a/initializer-page/webpack.common.js +++ b/initializer-page/webpack.common.js @@ -83,17 +83,17 @@ const config = { }, template: './static/bootstrap.html', filename: 'bootstrap.html', - title: 'Cloud Native App Initializer', - description: `Initializr generates spring boot project with just what you need to start quickly!`, - url: 'https://github.com/alibaba/dubbo-initializer', - twitter: '@springboot', + title: 'Initializer Dubbo', + description: `Initializr generates apache dubbo project with just what you need to start quickly!`, + url: 'https://github.com/apache/dubbo-initializer', + twitter: '@apachedubbo', theme: `#6db33f`, }), new WebpackGoogleTagManager(process.env.GOOGLE_TAGMANAGER_ID), new WebpackPwaManifest({ - name: 'alibaba-initializr', + name: 'dubbo-initializr', short_name: 'Start', - description: `Initializr generates spring boot project with just what you need to start quickly!`, + description: `Initializr generates apache dubbo project with just what you need to start quickly!`, background_color: '#6db33f', inject: true, fingerprints: true, @@ -102,7 +102,7 @@ const config = { crossorigin: null, icons: [ { - src: path.resolve('src/images/dubbo-colorful.png'), + src: path.resolve('src/images/dubbo_colorful.png'), sizes: [48, 72, 96, 144, 192, 256, 384, 512], }, ],
