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 @@
-
-
+
+
@@ -21,35 +26,32 @@
-
-