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
b63e2384
Commit
b63e2384
authored
Jul 09, 2023
by
liaozan
🏀
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Polish
parent
7cfb6302
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
59 additions
and
47 deletions
+59
-47
initializer-backend/src/main/java/com/schbrain/archetype/initializer/maven/MavenUtils.java
.../com/schbrain/archetype/initializer/maven/MavenUtils.java
+11
-6
initializer-backend/src/main/java/com/schbrain/archetype/initializer/runner/ArchetypePreparer.java
...brain/archetype/initializer/runner/ArchetypePreparer.java
+11
-28
initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java
...brain/archetype/initializer/service/ArchetypeService.java
+29
-7
initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/GitlabService.java
...schbrain/archetype/initializer/service/GitlabService.java
+4
-2
pom.xml
pom.xml
+4
-4
No files found.
initializer-backend/src/main/java/com/schbrain/archetype/initializer/maven/MavenUtils.java
View file @
b63e2384
...
...
@@ -9,14 +9,20 @@ import com.schbrain.common.util.JacksonUtils;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.maven.cli.MavenCli
;
import
org.apache.maven.settings.*
;
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
org.eclipse.jgit.transport.CredentialsProvider
;
import
org.eclipse.jgit.transport.URIish
;
import
org.gitlab4j.api.*
;
import
org.gitlab4j.api.models.*
;
import
org.gitlab4j.api.GitLabApi
;
import
org.gitlab4j.api.GitLabApiException
;
import
org.gitlab4j.api.ProtectedBranchesApi
;
import
org.gitlab4j.api.models.Group
;
import
org.gitlab4j.api.models.Project
;
import
org.gitlab4j.api.models.ProtectedBranch
;
import
java.io.File
;
import
java.io.IOException
;
...
...
@@ -53,12 +59,11 @@ public class MavenUtils {
public
static
String
generate
(
ArchetypeGenerateParam
param
)
{
log
.
info
(
"Prepare to generate archetype project: {}"
,
JacksonUtils
.
toJsonString
(
param
,
true
));
MavenCli
mavenCli
=
new
MavenCli
();
String
id
=
IdWorker
.
getIdStr
();
File
archetype
=
getArchetypeDirectory
(
id
);
String
outputDirectory
=
archetype
.
getAbsolutePath
();
String
[]
args
=
getArchetypeGenerateArgs
(
param
,
SETTINGS_FILE
.
getAbsolutePath
(),
outputDirectory
);
mavenCli
.
doMain
(
args
,
null
,
System
.
out
,
System
.
err
);
MavenCli
.
doMain
(
args
,
null
);
log
.
info
(
"Generate archetype project at {}"
,
outputDirectory
);
if
(
param
.
isInitGitRepo
())
{
Path
directory
=
Paths
.
get
(
archetype
.
getAbsolutePath
(),
param
.
getArtifactId
());
...
...
@@ -190,4 +195,4 @@ public class MavenUtils {
}
}
}
\ No newline at end of file
}
initializer-backend/src/main/java/com/schbrain/archetype/initializer/runner/ArchetypePreparer.java
View file @
b63e2384
...
...
@@ -4,19 +4,16 @@ import cn.hutool.core.io.FileUtil;
import
cn.hutool.system.SystemUtil
;
import
com.schbrain.archetype.initializer.config.properties.ArchetypeProperties
;
import
com.schbrain.archetype.initializer.maven.MavenUtils
;
import
com.schbrain.archetype.initializer.param.ArchetypeGenerateParam
;
import
com.schbrain.common.exception.BaseException
;
import
com.schbrain.common.util.EnvUtils
;
import
com.schbrain.framework.support.spring.OnceApplicationContextEventListener
;
import
lombok.extern.slf4j.Slf4j
;
import
org.eclipse.jgit.api.Git
;
import
org.eclipse.jgit.api.errors.GitAPIException
;
import
org.eclipse.jgit.transport.TagOpt
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.ApplicationArguments
;
import
org.springframework.boot.ApplicationRunner
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.core.env.Environment
;
import
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
;
import
org.springframework.context.event.ContextRefreshedEvent
;
import
org.springframework.stereotype.Component
;
import
java.io.File
;
...
...
@@ -28,39 +25,25 @@ import java.io.File;
@Slf4j
@Component
@EnableConfigurationProperties
(
ArchetypeProperties
.
class
)
public
class
ArchetypePreparer
implements
ApplicationRunner
{
public
class
ArchetypePreparer
extends
OnceApplicationContextEventListener
<
ContextRefreshedEvent
>
{
@Autowired
private
Environment
environment
;
@Autowired
private
ArchetypeProperties
archetypeProperties
;
@Autowired
private
ThreadPoolTaskExecutor
taskExecutor
;
@Override
p
ublic
void
run
(
ApplicationArguments
args
)
{
taskExecutor
.
execute
(()
->
{
installArchetype
()
;
warmUpIfRequired
();
}
);
p
rotected
void
onEvent
(
ContextRefreshedEvent
event
)
{
if
(!
EnvUtils
.
runningOnCloudPlatform
(
getApplicationContext
().
getEnvironment
()))
{
return
;
}
installArchetype
(
);
}
p
ublic
void
installArchetype
()
{
p
rivate
void
installArchetype
()
{
File
archetypeTemplateDirectory
=
createArchetypeDirectory
();
checkoutArchetype
(
archetypeTemplateDirectory
);
MavenUtils
.
install
(
archetypeTemplateDirectory
.
getAbsolutePath
());
}
private
void
warmUpIfRequired
()
{
if
(!
EnvUtils
.
runningOnCloudPlatform
(
environment
))
{
return
;
}
ArchetypeGenerateParam
mockParam
=
new
ArchetypeGenerateParam
();
mockParam
.
setGroupId
(
"com.schbrain"
);
mockParam
.
setArtifactId
(
"schbrain-init"
);
MavenUtils
.
generate
(
mockParam
);
}
private
File
createArchetypeDirectory
()
{
String
tempDir
=
SystemUtil
.
getUserInfo
().
getTempDir
();
File
archetypeTemplateDirectory
=
new
File
(
tempDir
,
"archetype"
);
...
...
@@ -75,10 +58,10 @@ public class ArchetypePreparer implements ApplicationRunner {
.
setDirectory
(
archetypeTemplateDirectory
)
.
setURI
(
archetypeProperties
.
getSourceUrl
())
.
call
())
{
log
.
info
(
"Success checkout archetype source from {}
"
,
archetypeProperties
.
getSourceUrl
()
);
log
.
info
(
"Success checkout archetype source from {}
to {}"
,
archetypeProperties
.
getSourceUrl
(),
archetypeTemplateDirectory
);
}
catch
(
GitAPIException
e
)
{
throw
new
BaseException
(
"Failed to checkout archetype source from git repository"
,
e
);
}
}
}
\ No newline at end of file
}
initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java
View file @
b63e2384
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
;
import
com.schbrain.archetype.initializer.param.ArchetypeGenerateParam
;
import
com.schbrain.archetype.initializer.response.PreviewFileTree
;
import
com.schbrain.common.web.utils.ServletUtils
;
import
org.springframework.http.*
;
import
org.springframework.http.ContentDisposition
;
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.*
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.time.Duration
;
import
java.util.*
;
import
java.util.Arrays
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -48,9 +57,12 @@ public class ArchetypeService {
}
private
PreviewFileTree
buildFileTree
(
File
root
)
{
File
[]
fileItems
=
root
.
listFiles
();
if
(
ArrayUtil
.
isEmpty
(
fileItems
))
{
return
new
PreviewFileTree
(
root
);
File
[]
fileItems
=
Optional
.
ofNullable
(
root
.
listFiles
()).
orElse
(
new
File
[
0
]);
if
(
fileItems
.
length
==
0
)
{
File
gitKeepFile
=
createGitKeepFile
(
root
);
if
(
gitKeepFile
!=
null
)
{
fileItems
=
new
File
[]{
gitKeepFile
};
}
}
List
<
PreviewFileTree
>
children
=
Arrays
.
stream
(
fileItems
)
.
map
(
fileItem
->
{
...
...
@@ -67,6 +79,16 @@ public class ArchetypeService {
return
new
PreviewFileTree
(
root
,
children
);
}
private
File
createGitKeepFile
(
File
root
)
{
try
{
Path
created
=
Files
.
createFile
(
Path
.
of
(
root
.
getPath
(),
".gitkeep"
));
Files
.
writeString
(
created
,
"This file is used to keep an empty folder when git uploads, If you put other files in the folder, delete this file please"
);
return
created
.
toFile
();
}
catch
(
IOException
ignore
)
{
return
null
;
}
}
private
File
getGeneratedFiles
(
String
id
)
throws
FileNotFoundException
{
File
archetypeDirectory
=
MavenUtils
.
getArchetypeDirectory
(
id
);
if
(!
archetypeDirectory
.
exists
())
{
...
...
initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/GitlabService.java
View file @
b63e2384
package
com.schbrain.archetype.initializer.service
;
import
cn.hutool.core.lang.tree.*
;
import
cn.hutool.core.lang.tree.Tree
;
import
cn.hutool.core.lang.tree.TreeNode
;
import
cn.hutool.core.lang.tree.TreeUtil
;
import
com.schbrain.common.exception.BaseException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.gitlab4j.api.GitLabApi
;
...
...
@@ -39,4 +41,4 @@ public class GitlabService {
}
}
}
\ No newline at end of file
}
pom.xml
View file @
b63e2384
...
...
@@ -6,9 +6,9 @@
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
com.schbrain.
kp
</groupId>
<artifactId>
kp
-parent
</artifactId>
<version>
2.0.0
-SNAPSHOT
</version>
<groupId>
com.schbrain.
framework
</groupId>
<artifactId>
schbrain
-parent
</artifactId>
<version>
3.0.5
-SNAPSHOT
</version>
</parent>
<groupId>
com.schbrain.archetype
</groupId>
...
...
@@ -76,4 +76,4 @@
</dependencies>
</dependencyManagement>
</project>
\ No newline at end of file
</project>
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