Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
schbrain-archetype-initializer
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Incidents
Environments
Packages & Registries
Packages & Registries
Package Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tools
schbrain-archetype-initializer
Commits
f3599e6e
Commit
f3599e6e
authored
Apr 14, 2022
by
liaozan
🏀
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: support init git repo
parent
a145ed1b
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
41 additions
and
8 deletions
+41
-8
initializer-backend/src/main/java/com/schbrain/archetype/initializer/maven/MavenUtils.java
.../com/schbrain/archetype/initializer/maven/MavenUtils.java
+20
-0
initializer-backend/src/main/java/com/schbrain/archetype/initializer/param/ArchetypeGenerateParam.java
...n/archetype/initializer/param/ArchetypeGenerateParam.java
+4
-0
initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java
...brain/archetype/initializer/service/ArchetypeService.java
+7
-3
initializer-ui/package.json
initializer-ui/package.json
+3
-3
initializer-ui/src/components/starter.vue
initializer-ui/src/components/starter.vue
+7
-2
No files found.
initializer-backend/src/main/java/com/schbrain/archetype/initializer/maven/MavenUtils.java
View file @
f3599e6e
...
...
@@ -2,6 +2,7 @@ package com.schbrain.archetype.initializer.maven;
import
cn.hutool.core.io.FileUtil
;
import
com.schbrain.archetype.initializer.param.ArchetypeGenerateParam
;
import
com.schbrain.common.exception.BaseException
;
import
com.schbrain.common.util.IdWorker
;
import
com.schbrain.common.util.JacksonUtils
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -10,9 +11,13 @@ import org.apache.maven.settings.Mirror;
import
org.apache.maven.settings.Server
;
import
org.apache.maven.settings.Settings
;
import
org.apache.maven.settings.io.DefaultSettingsWriter
;
import
org.eclipse.jgit.api.Git
;
import
org.eclipse.jgit.api.errors.GitAPIException
;
import
java.io.File
;
import
java.io.IOException
;
import
java.nio.file.Path
;
import
java.nio.file.Paths
;
import
java.util.Collections
;
import
static
org
.
apache
.
maven
.
cli
.
MavenCli
.
MULTIMODULE_PROJECT_DIRECTORY
;
...
...
@@ -47,6 +52,9 @@ public class MavenUtils {
String
[]
args
=
getArchetypeGenerateArgs
(
param
,
getSettingsFile
().
getAbsolutePath
(),
outputDirectory
);
mavenCli
.
doMain
(
args
,
null
,
System
.
out
,
System
.
err
);
log
.
info
(
"Generate archetype project at {}"
,
outputDirectory
);
if
(
param
.
isInitGitRepo
())
{
initGitRepo
(
Paths
.
get
(
archetype
.
getAbsolutePath
(),
param
.
getArtifactId
()));
}
return
id
;
}
...
...
@@ -55,6 +63,18 @@ public class MavenUtils {
return
new
File
(
tmpDirPath
,
id
);
}
private
static
void
initGitRepo
(
Path
directory
)
{
try
{
Git
git
=
Git
.
init
().
setDirectory
(
directory
.
toFile
()).
call
();
git
.
add
().
addFilepattern
(
"."
).
call
();
git
.
commit
().
setAllowEmpty
(
true
).
setAuthor
(
"initializer"
,
"no-reply@schbrain.com"
).
setMessage
(
"Initial Commit"
).
call
();
git
.
close
();
}
catch
(
GitAPIException
e
)
{
log
.
warn
(
"Git repo init failed"
,
e
);
throw
new
BaseException
(
"Git仓库初始化失败"
);
}
}
private
static
File
getSettingsFile
()
{
if
(
SETTINGS_FILE
.
exists
())
{
return
SETTINGS_FILE
;
...
...
initializer-backend/src/main/java/com/schbrain/archetype/initializer/param/ArchetypeGenerateParam.java
View file @
f3599e6e
...
...
@@ -36,6 +36,10 @@ public class ArchetypeGenerateParam {
* 子模块前缀
*/
private
String
subModuleNamePrefix
;
/**
* 是否初始化 git 仓库
*/
private
boolean
initGitRepo
;
public
String
getSubModuleNamePrefix
()
{
if
(!
StringUtils
.
hasText
(
this
.
subModuleNamePrefix
))
{
...
...
initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java
View file @
f3599e6e
package
com.schbrain.archetype.initializer.service
;
import
cn.hutool.cache.impl.TimedCache
;
import
cn.hutool.core.util.ArrayUtil
;
import
cn.hutool.core.util.ZipUtil
;
import
com.schbrain.archetype.initializer.maven.MavenUtils
;
...
...
@@ -13,17 +14,17 @@ import org.springframework.http.HttpHeaders;
import
org.springframework.http.MediaType
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StreamUtils
;
import
org.springframework.util.StringUtils
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.time.Duration
;
import
java.util.Arrays
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -33,7 +34,7 @@ import java.util.stream.Collectors;
@Service
public
class
ArchetypeService
{
private
final
Map
<
String
,
String
>
archetypeNameCache
=
new
ConcurrentHashMap
<>(
);
private
final
TimedCache
<
String
,
String
>
archetypeNameCache
=
new
TimedCache
<>(
Duration
.
ofDays
(
1
).
toMillis
()
);
@Autowired
private
ArchetypePreparer
archetypePreparer
;
...
...
@@ -89,6 +90,9 @@ public class ArchetypeService {
throw
new
FileNotFoundException
(
archetypeDirectory
.
getAbsolutePath
());
}
String
artifactId
=
archetypeNameCache
.
get
(
id
);
if
(!
StringUtils
.
hasText
(
artifactId
))
{
throw
new
FileNotFoundException
(
"文件已过期,请重新生成"
);
}
return
new
File
(
archetypeDirectory
,
artifactId
);
}
...
...
initializer-ui/package.json
View file @
f3599e6e
...
...
@@ -6,7 +6,7 @@
"build"
:
"vite build --mode production"
},
"dependencies"
:
{
"vue"
:
"^3.2.3
1
"
,
"vue"
:
"^3.2.3
2
"
,
"axios"
:
"^0.26.1"
,
"ant-design-vue"
:
"^3.1.1"
,
"highlight.js"
:
"^11.5.1"
,
...
...
@@ -15,7 +15,7 @@
"devDependencies"
:
{
"@vitejs/plugin-vue"
:
"^2.3.1"
,
"typescript"
:
"^4.6.3"
,
"vite"
:
"^2.9.
1
"
,
"vue-tsc"
:
"^0.34.
5
"
"vite"
:
"^2.9.
2
"
,
"vue-tsc"
:
"^0.34.
6
"
}
}
\ No newline at end of file
initializer-ui/src/components/starter.vue
View file @
f3599e6e
...
...
@@ -15,6 +15,9 @@
<a-form-item
has-feedback
label=
"PackageName"
name=
"packageName"
>
<a-input
v-model:value=
"formState.packageName"
placeholder=
"默认为GroupId"
/>
</a-form-item>
<a-form-item
has-feedback
name=
"initGitRepo"
>
<a-checkbox
v-model:checked=
"formState.initGitRepo"
>
初始化 Git 仓库
</a-checkbox>
</a-form-item>
</a-form>
<div
class=
"button-group"
>
<a-button
class=
"generic-btn"
type=
"primary"
@
click=
"onGenerate"
>
生成
</a-button>
...
...
@@ -46,7 +49,8 @@ interface FormState {
groupId
:
string
,
artifactId
:
string
,
version
:
string
,
packageName
:
string
packageName
:
string
,
initGitRepo
:
boolean
}
interface
FileNode
{
...
...
@@ -70,7 +74,8 @@ const formState = reactive<FormState>({
groupId
:
''
,
artifactId
:
''
,
version
:
'
1.0.0-SNAPSHOT
'
,
packageName
:
''
packageName
:
''
,
initGitRepo
:
true
})
const
formRules
=
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment