diff --git a/initializer-backend/pom.xml b/initializer-backend/pom.xml index 172e6a99520e86f6d0231a0359befc357960b03a..4a095ca50dab8fbcd5bab7a0d653c9e7ff1f042a 100644 --- a/initializer-backend/pom.xml +++ b/initializer-backend/pom.xml @@ -14,6 +14,10 @@ initializer-backend + + com.schbrain.archetype + initializer-ui + com.schbrain.common web-common @@ -26,6 +30,26 @@ org.springframework.boot spring-boot-starter-web + + org.apache.maven + maven-embedder + 3.8.5 + + + org.apache.maven + maven-compat + 3.8.5 + + + org.eclipse.aether + aether-connector-basic + 1.1.0 + + + org.eclipse.aether + aether-transport-http + 1.1.0 + diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/config/WebConfiguration.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/config/WebConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..415ec3882828db0f809eb142f7642e18b9f9618c --- /dev/null +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/config/WebConfiguration.java @@ -0,0 +1,22 @@ +package com.schbrain.archetype.initializer.backend.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * @author liaozan + * @since 2022/3/20 + */ +@Configuration(proxyBeanMethods = false) +public class WebConfiguration implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowedMethods("*") + .maxAge(3600); + } + +} \ No newline at end of file diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/controller/InitializerController.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/controller/InitializerController.java new file mode 100644 index 0000000000000000000000000000000000000000..b388cbac096cb7cbc6c7172cf4a123b6b1cae9ff --- /dev/null +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/controller/InitializerController.java @@ -0,0 +1,22 @@ +package com.schbrain.archetype.initializer.backend.controller; + +import com.schbrain.archetype.initializer.backend.maven.MavenUtils; +import com.schbrain.archetype.initializer.backend.param.ArchetypeGenerateParam; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author liaozan + * @since 2022/3/20 + */ +@RestController +public class InitializerController { + + @PostMapping("/archetype/generate") + public void generateArchetype(@RequestBody @Validated ArchetypeGenerateParam param) { + MavenUtils.generate(param.getGroup(), param.getArtifact()); + } + +} \ No newline at end of file diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/maven/MavenUtils.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/maven/MavenUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..41304d221ae95c6c1af91a7107ab516389c7feb1 --- /dev/null +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/maven/MavenUtils.java @@ -0,0 +1,40 @@ +package com.schbrain.archetype.initializer.backend.maven; + +import cn.hutool.core.io.FileUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.maven.cli.MavenCli; + +import java.io.File; + +/** + * @author liaozan + * @since 2022/3/20 + */ +@Slf4j +public class MavenUtils { + + public static void generate(String groupId, String artifactId) { + MavenCli cli = new MavenCli(); + System.getProperties().setProperty("maven.multiModuleProjectDirectory", "$M2_HOME"); + String tmpDirPath = FileUtil.getTmpDirPath(); + File archetype = new File(tmpDirPath, artifactId); + String[] args = getArgs(groupId, artifactId, archetype.getAbsolutePath()); + cli.doMain(args, null, System.out, System.err); + log.info("Generate archetype project at {}", archetype.getAbsolutePath()); + } + + @SuppressWarnings("SpellCheckingInspection") + private static String[] getArgs(String groupId, String artifactId, String outputDirectory) { + return new String[]{ + "-B", + "archetype:generate", + "-DarchetypeGroupId=com.schbrain.kp", + "-DarchetypeArtifactId=schbrain-archetype", + "-DarchetypeVersion=1.0-SNAPSHOT", + String.format("-DoutputDirectory=%s", outputDirectory), + String.format("-DgroupId=%s", groupId), + String.format("-DartifactId=%S", artifactId) + }; + } + +} \ No newline at end of file diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/param/ArchetypeGenerateParam.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/param/ArchetypeGenerateParam.java new file mode 100644 index 0000000000000000000000000000000000000000..33aa4d6ff0080b86c764a5a5f656e66e1134a68d --- /dev/null +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/backend/param/ArchetypeGenerateParam.java @@ -0,0 +1,25 @@ +package com.schbrain.archetype.initializer.backend.param; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @author liaozan + * @since 2022/3/20 + */ +@Data +public class ArchetypeGenerateParam { + + @NotBlank + private String projectName; + @NotBlank + private String gitlabUrl; + @NotBlank + private String group; + @NotBlank + private String artifact; + @NotBlank + private String packageName; + +} \ No newline at end of file diff --git a/initializer-backend/src/main/resources/application.yaml b/initializer-backend/src/main/resources/application.yaml index b0fe9b731cf25ea1e39c54a83760cd43df40efb0..432f66c5f88cb6ce671b7230de196d36020fa17b 100644 --- a/initializer-backend/src/main/resources/application.yaml +++ b/initializer-backend/src/main/resources/application.yaml @@ -2,4 +2,10 @@ spring: application: name: initializer-backend profiles: - active: dev \ No newline at end of file + active: dev + web: + resources: + add-mappings: true +server: + servlet: + context-path: /api \ No newline at end of file diff --git a/initializer-ui/.gitignore b/initializer-ui/.gitignore index 403adbc1e527906a4aa59558cd582c20bcd1d738..226474b62e9f29a8a2a7411a77fa2d7183cce86a 100644 --- a/initializer-ui/.gitignore +++ b/initializer-ui/.gitignore @@ -1,7 +1,7 @@ .DS_Store node_modules /dist - +/node # local env files .env.local @@ -20,4 +20,4 @@ pnpm-debug.log* *.ntvs* *.njsproj *.sln -*.sw? +*.sw? \ No newline at end of file diff --git a/initializer-ui/pom.xml b/initializer-ui/pom.xml index 59013ce9a0138e2f497d8f75a0e6fb2ed03e3197..7a68d3fd2f4920f02a621d104e6ebcd7b7b03474 100644 --- a/initializer-ui/pom.xml +++ b/initializer-ui/pom.xml @@ -13,4 +13,73 @@ initializer-ui + + + + com.github.eirslett + frontend-maven-plugin + ${frontend-maven-plugin.version} + + + install node and npm + + install-node-and-npm + + + v17.7.1 + + + + + npm install + + npm + + + generate-resources + + + install + + + + + npm run build + + npm + + + run build + + + + + + maven-resources-plugin + + + copy-resources + package + + copy-resources + + + + + ${project.basedir}/dist + + **/*.* + + true + + + ${project.parent.basedir}/initializer-backend/target/classes/static + + + + + + + + \ No newline at end of file diff --git a/initializer-ui/src/components/BackendStarter.vue b/initializer-ui/src/components/BackendStarter.vue index 42e1d0c36fe64d20cec1d91ed00379dca2c6e0a2..bd85a3804e0190943ca56ccd8205b7f95f4bfca4 100644 --- a/initializer-ui/src/components/BackendStarter.vue +++ b/initializer-ui/src/components/BackendStarter.vue @@ -2,7 +2,12 @@
- + + +
+ +
+
@@ -12,8 +17,8 @@
- - + +
@@ -21,35 +26,32 @@
-
-