Commit 4fb7f5a6 authored by liaozan's avatar liaozan 🏀

init

parent f949019f
...@@ -14,6 +14,10 @@ ...@@ -14,6 +14,10 @@
<artifactId>initializer-backend</artifactId> <artifactId>initializer-backend</artifactId>
<dependencies> <dependencies>
<dependency>
<groupId>com.schbrain.archetype</groupId>
<artifactId>initializer-ui</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.schbrain.common</groupId> <groupId>com.schbrain.common</groupId>
<artifactId>web-common</artifactId> <artifactId>web-common</artifactId>
...@@ -26,6 +30,26 @@ ...@@ -26,6 +30,26 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>3.8.5</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-compat</artifactId>
<version>3.8.5</version>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-connector-basic</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-transport-http</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
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
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
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
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
...@@ -2,4 +2,10 @@ spring: ...@@ -2,4 +2,10 @@ spring:
application: application:
name: initializer-backend name: initializer-backend
profiles: profiles:
active: dev active: dev
\ No newline at end of file web:
resources:
add-mappings: true
server:
servlet:
context-path: /api
\ No newline at end of file
.DS_Store .DS_Store
node_modules node_modules
/dist /dist
/node
# local env files # local env files
.env.local .env.local
...@@ -20,4 +20,4 @@ pnpm-debug.log* ...@@ -20,4 +20,4 @@ pnpm-debug.log*
*.ntvs* *.ntvs*
*.njsproj *.njsproj
*.sln *.sln
*.sw? *.sw?
\ No newline at end of file
...@@ -13,4 +13,73 @@ ...@@ -13,4 +13,73 @@
<artifactId>initializer-ui</artifactId> <artifactId>initializer-ui</artifactId>
<build>
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>${frontend-maven-plugin.version}</version>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v17.7.1</nodeVersion>
</configuration>
</execution>
<!-- Install all project dependencies -->
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<!-- optional: default phase is "generate-resources" -->
<phase>generate-resources</phase>
<!-- Optional configuration which provides for running any npm command -->
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<!-- Build and minify static files -->
<execution>
<id>npm run build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${project.basedir}/dist</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<outputDirectory>${project.parent.basedir}/initializer-backend/target/classes/static</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project> </project>
\ No newline at end of file
...@@ -2,7 +2,12 @@ ...@@ -2,7 +2,12 @@
<div class="generate-form"> <div class="generate-form">
<div class="generate-form-div generate-form-label generate-form-input"> <div class="generate-form-div generate-form-label generate-form-input">
<label>Group</label> <label for="input-packageName">GitlabUrl</label>
<input id="input-gitlabUrl" v-model="generateForm.gitlabUrl" type="text">
</div>
<div class="generate-form-div generate-form-label generate-form-input">
<label for="input-group">Group</label>
<input type="text" id="input-group" v-model="generateForm.group"> <input type="text" id="input-group" v-model="generateForm.group">
</div> </div>
...@@ -12,8 +17,8 @@ ...@@ -12,8 +17,8 @@
</div> </div>
<div class="generate-form-div generate-form-label generate-form-input"> <div class="generate-form-div generate-form-label generate-form-input">
<label for="input-name">Name</label> <label for="input-projectName">Project Name</label>
<input type="text" id="input-name" v-model="generateForm.name"> <input id="input-projectName" v-model="generateForm.projectName" type="text">
</div> </div>
<div class="generate-form-div generate-form-label generate-form-input"> <div class="generate-form-div generate-form-label generate-form-input">
...@@ -21,35 +26,32 @@ ...@@ -21,35 +26,32 @@
<input type="text" id="input-packageName" v-model="generateForm.packageName"> <input type="text" id="input-packageName" v-model="generateForm.packageName">
</div> </div>
<br>
<input class="generate-form-submit" type="button" @click="submit" value="下载"> <input class="generate-form-submit" type="button" @click="submit" value="下载">
</div> </div>
</template> </template>
<script> <script>
import $ from '../util/util' import axios from '../util/request'
export default { export default {
name: "BackendStarter", name: "BackendStarter",
data() { data() {
return { return {
generateForm: { generateForm: {
projectName: '', projectName: 'schbrain-alarm',
gitlabUrl: '', gitlabUrl: 'http://gitlab.schbrain.com/gitlab/tools/schbrain-archetype.git',
group: '', group: 'com.schbrain.kp',
artifact: '', artifact: 'schbrain-alarm',
name: '', packageName: 'com.schbrain.kp.alarm'
packageName: ''
} }
} }
}, },
methods: { methods: {
submit: function () { submit: function () {
$.http.post('/api/devops/generate', this.generateForm, { axios.post('/archetype/generate', this.generateForm, {
responseType: 'blob' responseType: 'blob'
}).then(res => { }).then(res => {
let fileName = window.decodeURI(res.headers['content-disposition'].split('=')[1]) let fileName = window.decodeURI(res.headers['Content-Disposition'].split('=')[1])
let blob = new Blob([res.data]) let blob = new Blob([res.data])
let link = document.createElement('a'); let link = document.createElement('a');
......
import axios from 'axios';
axios.defaults.baseURL = 'http://localhost:8080/api'
axios.defaults.timeout = 10000
const service = axios.create()
service.interceptors.request.use(config => {
return config
})
service.interceptors.response.use(response => {
return response
})
export default service
\ No newline at end of file
import axios from 'axios';
const Util = {
apiPath: 'http://127.0.0.1:8010/'
};
// http 通用配置
Util.http = axios.create({
baseURL: Util.apiPath
});
export default Util;
\ No newline at end of file
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
<properties> <properties>
<revision>0.0.1-SNAPSHOT</revision> <revision>0.0.1-SNAPSHOT</revision>
<frontend-maven-plugin.version>1.12.1</frontend-maven-plugin.version>
</properties> </properties>
<modules> <modules>
...@@ -25,4 +26,19 @@ ...@@ -25,4 +26,19 @@
<module>initializer-ui</module> <module>initializer-ui</module>
</modules> </modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.schbrain.archetype</groupId>
<artifactId>initializer-ui</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.schbrain.archetype</groupId>
<artifactId>initializer-backend</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project> </project>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment