Commit 4fb7f5a6 authored by liaozan's avatar liaozan 🏀

init

parent f949019f
......@@ -14,6 +14,10 @@
<artifactId>initializer-backend</artifactId>
<dependencies>
<dependency>
<groupId>com.schbrain.archetype</groupId>
<artifactId>initializer-ui</artifactId>
</dependency>
<dependency>
<groupId>com.schbrain.common</groupId>
<artifactId>web-common</artifactId>
......@@ -26,6 +30,26 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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>
<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:
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
.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
......@@ -13,4 +13,73 @@
<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>
\ No newline at end of file
......@@ -2,7 +2,12 @@
<div class="generate-form">
<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">
</div>
......@@ -12,8 +17,8 @@
</div>
<div class="generate-form-div generate-form-label generate-form-input">
<label for="input-name">Name</label>
<input type="text" id="input-name" v-model="generateForm.name">
<label for="input-projectName">Project Name</label>
<input id="input-projectName" v-model="generateForm.projectName" type="text">
</div>
<div class="generate-form-div generate-form-label generate-form-input">
......@@ -21,35 +26,32 @@
<input type="text" id="input-packageName" v-model="generateForm.packageName">
</div>
<br>
<input class="generate-form-submit" type="button" @click="submit" value="下载">
</div>
</template>
<script>
import $ from '../util/util'
import axios from '../util/request'
export default {
name: "BackendStarter",
data() {
return {
generateForm: {
projectName: '',
gitlabUrl: '',
group: '',
artifact: '',
name: '',
packageName: ''
projectName: 'schbrain-alarm',
gitlabUrl: 'http://gitlab.schbrain.com/gitlab/tools/schbrain-archetype.git',
group: 'com.schbrain.kp',
artifact: 'schbrain-alarm',
packageName: 'com.schbrain.kp.alarm'
}
}
},
methods: {
submit: function () {
$.http.post('/api/devops/generate', this.generateForm, {
axios.post('/archetype/generate', this.generateForm, {
responseType: 'blob'
}).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 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 @@
<properties>
<revision>0.0.1-SNAPSHOT</revision>
<frontend-maven-plugin.version>1.12.1</frontend-maven-plugin.version>
</properties>
<modules>
......@@ -25,4 +26,19 @@
<module>initializer-ui</module>
</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>
\ 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