Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
adaptation-master
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
912协同工作系统
项目监控管理工具
adaptation-master
Commits
9fd140de
提交
9fd140de
authored
1月 03, 2020
作者:
wyl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
“体检”改为“评估”
上级
e3bccd56
显示空白字符变更
内嵌
并排
正在显示
16 个修改的文件
包含
354 行增加
和
17 行删除
+354
-17
pom.xml
pom.xml
+10
-0
MANIFEST.MF
src/main/java/META-INF/MANIFEST.MF
+3
-0
AdaptationMasterApplication.java
...om/zjty/adaptationmaster/AdaptationMasterApplication.java
+0
-2
AdaptationController.java
...tationmaster/adaptor/controller/AdaptationController.java
+4
-0
Report.java
...java/com/zjty/adaptationmaster/adaptor/entity/Report.java
+9
-3
Rule.java
...n/java/com/zjty/adaptationmaster/adaptor/entity/Rule.java
+4
-0
ProjectPom.java
...adaptationmaster/adaptor/entity/pomEntity/ProjectPom.java
+43
-0
Dependency.java
...ster/adaptor/entity/pomEntity/SecondFloor/Dependency.java
+59
-0
Parent.java
...onmaster/adaptor/entity/pomEntity/SecondFloor/Parent.java
+8
-0
AdaptationService.java
...y/adaptationmaster/adaptor/service/AdaptationService.java
+3
-0
AdaptationServiceImpl.java
...ionmaster/adaptor/service/Impl/AdaptationServiceImpl.java
+25
-0
InspectServiceImpl.java
...tationmaster/adaptor/service/Impl/InspectServiceImpl.java
+4
-1
Assessor.java
src/main/java/com/zjty/adaptationmaster/utils/Assessor.java
+81
-0
Inspector.java
src/main/java/com/zjty/adaptationmaster/utils/Inspector.java
+94
-8
ReadedFileTask.java
.../java/com/zjty/adaptationmaster/utils/ReadedFileTask.java
+0
-3
YmlConfig.java
src/test/java/com/zjty/adaptationmaster/YmlConfig.java
+7
-0
没有找到文件。
pom.xml
浏览文件 @
9fd140de
...
@@ -152,6 +152,16 @@
...
@@ -152,6 +152,16 @@
<version>
RELEASE
</version>
<version>
RELEASE
</version>
<scope>
compile
</scope>
<scope>
compile
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
com.thoughtworks.xstream
</groupId>
<artifactId>
xstream
</artifactId>
<version>
1.4.10
</version>
</dependency>
<dependency>
<groupId>
com.thoughtworks.xstream
</groupId>
<artifactId>
xstream
</artifactId>
<version>
1.4.10
</version>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
src/main/java/META-INF/MANIFEST.MF
0 → 100644
浏览文件 @
9fd140de
Manifest-Version: 1.0
Main-Class: com.zjty.adaptationmaster.utils.Inspector
src/main/java/com/zjty/adaptationmaster/AdaptationMasterApplication.java
浏览文件 @
9fd140de
...
@@ -2,9 +2,7 @@ package com.zjty.adaptationmaster;
...
@@ -2,9 +2,7 @@ package com.zjty.adaptationmaster;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.data.jpa.repository.config.EnableJpaRepositories
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.scheduling.annotation.Scheduled
;
@SpringBootApplication
@SpringBootApplication
@EnableScheduling
@EnableScheduling
...
...
src/main/java/com/zjty/adaptationmaster/adaptor/controller/AdaptationController.java
浏览文件 @
9fd140de
...
@@ -33,6 +33,10 @@ public class AdaptationController {
...
@@ -33,6 +33,10 @@ public class AdaptationController {
System
.
out
.
print
(
JSON
.
toJSONString
(
adaptRequest
));
System
.
out
.
print
(
JSON
.
toJSONString
(
adaptRequest
));
return
adaptationService
.
compile
(
adaptRequest
.
getProject
(),
adaptRequest
.
getUuid
());
return
adaptationService
.
compile
(
adaptRequest
.
getProject
(),
adaptRequest
.
getUuid
());
}
}
@PostMapping
(
"/uploadDeploy"
)
public
ServerResponse
uploadDeploy
(
@RequestBody
AdaptRequest
adaptRequest
){
return
adaptationService
.
uploadDeploy
(
adaptRequest
.
getProject
(),
adaptRequest
.
getPath
());
}
@PostMapping
(
"/deploy"
)
@PostMapping
(
"/deploy"
)
public
ServerResponse
deploy
(
@RequestBody
AdaptRequest
adaptRequest
){
public
ServerResponse
deploy
(
@RequestBody
AdaptRequest
adaptRequest
){
return
adaptationService
.
deploy
(
adaptRequest
.
getProject
(),
adaptRequest
.
getUuid
());
return
adaptationService
.
deploy
(
adaptRequest
.
getProject
(),
adaptRequest
.
getUuid
());
...
...
src/main/java/com/zjty/adaptationmaster/adaptor/entity/Report.java
浏览文件 @
9fd140de
package
com
.
zjty
.
adaptationmaster
.
adaptor
.
entity
;
package
com
.
zjty
.
adaptationmaster
.
adaptor
.
entity
;
import
com.zjty.adaptationmaster.utils.Assessor
;
import
com.zjty.adaptationmaster.utils.Inspector
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
...
@@ -19,14 +21,18 @@ public class Report {
...
@@ -19,14 +21,18 @@ public class Report {
private
Integer
id
;
private
Integer
id
;
private
Language
language
;
//语言
private
Language
language
;
//语言
private
String
framework
;
//架构
private
String
framework
;
//架构
private
Separate
isSeparate
;
//前后端是否分离
private
DatabaseType
databaseType
;
//数据库类型
private
DatabaseType
databaseType
;
//数据库类型
private
int
fileNum
;
private
long
lineNum
;
private
List
<
Inspector
.
Warn
>
warnList
;
private
Separate
isSeparate
;
//前后端是否分离
private
String
compileFilePath
;
//项目编译文件,如果是maven项目,用maven编译,那么就是pom.xml
private
String
compileFilePath
;
//项目编译文件,如果是maven项目,用maven编译,那么就是pom.xml
public
DependenceManagement
dependenceManagement
;
//版本管理方式
public
DependenceManagement
dependenceManagement
;
//版本管理方式
@ElementCollection
@ElementCollection
public
List
<
String
>
jarPath
;
//依赖文件的地址列表,用于编译,如果不是用版本管理工具
public
List
<
String
>
jarPath
;
//依赖文件的地址列表,用于编译,如果不是用版本管理工具
private
String
packagePath
;
private
String
packagePath
;
private
int
fileNum
;
public
enum
DependenceManagement
{
public
enum
DependenceManagement
{
MAVEN
,
GRADLE
,
ANT
MAVEN
,
GRADLE
,
ANT
...
@@ -38,6 +44,6 @@ public class Report {
...
@@ -38,6 +44,6 @@ public class Report {
MYSQL
,
ORACLE
,
SQLSERVER
,
POSTGRE
MYSQL
,
ORACLE
,
SQLSERVER
,
POSTGRE
}
}
public
enum
Language
{
public
enum
Language
{
JAVA
,
PYTHON
,
CPP
,
JSP
,
ONLYVIEW
JAVA
,
PYTHON
,
CPP
,
JSP
,
ASP
,
ONLYVIEW
}
}
}
}
src/main/java/com/zjty/adaptationmaster/adaptor/entity/Rule.java
浏览文件 @
9fd140de
...
@@ -43,6 +43,10 @@ public class Rule {
...
@@ -43,6 +43,10 @@ public class Rule {
private
String
target
;
//文本匹配目标
private
String
target
;
//文本匹配目标
private
String
replacing
;
//更改方式 全文替换/正则替换
private
String
replacing
;
//更改方式 全文替换/正则替换
public
Rule
(
String
target
,
String
replacing
){
this
.
target
=
target
;
this
.
replacing
=
replacing
;
}
// public enum MatchType{
// public enum MatchType{
// PATH,NAME,SUFFIX,GLOB
// PATH,NAME,SUFFIX,GLOB
// }
// }
...
...
src/main/java/com/zjty/adaptationmaster/adaptor/entity/pomEntity/ProjectPom.java
0 → 100644
浏览文件 @
9fd140de
package
com
.
zjty
.
adaptationmaster
.
adaptor
.
entity
.
pomEntity
;
import
com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.*
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
@NoArgsConstructor
@Data
public
class
ProjectPom
{
private
Parent
parent
;
private
String
modelVersion
;
private
String
groupId
;
private
String
artifactId
;
private
String
packaging
;
private
String
version
;
private
String
name
;
private
String
url
;
private
String
description
;
//private List<Prerequisite> prerequisites;//描述了这个项目构建环境中的前提条件。 -->
//private IssueManagement issueManagement;//项目的问题管理系统(Bugzilla, Jira, Scarab,或任何你喜欢的问题管理系统)的名称和URL
//private CiManagement ciManagement;//项目持续集成信息
//private String inceptionYear;//项目创建年份,4位数字。当产生版权信息时需要使用这个值
//private MailingLists mailingLists;//项目相关邮件列表信息
//private Developers developers;//项目开发者列表
//private Contributors contributors;//项目的其他贡献者列表
//private List<License> licenses;//该元素描述了项目所有License列表。 应该只列出该项目的license列表,不要列出依赖项目的 license列表。如果列出多个license,用户可以选择它们中的一个而不是接受所有license
//private Scm scm;//SCM(Source Control Management)标签允许你配置你的代码库,供Maven web站点和其它插件使用
//private Organization organization;//描述项目所属组织的各种属性。Maven产生的文档用
//private Build build;//构建项目需要的信息
//private List<Profile> profiles;//在列的项目构建profile,如果被激活,会修改构建处理
//private List<Module> modules;//模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径
//private List<Repository> repositories;//发现依赖和扩展的远程仓库列表
//private List<PluginRepository> pluginRepositiries;//发现插件的远程仓库列表,这些插件用于构建和报表
private
List
<
Dependency
>
dependencies
;
//private Repoting repoting;//该元素描述使用报表插件产生报表的规范。当用户执行“mvn site”,这些报表就会运行。 在页面导航栏能看到所有报表的链接
//private DependencyManagement dependencyManagement;//继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID匹配到这里的依赖,并使用这里的依赖信息
//private DistributionManagement distributionManagement;//项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库
//private Properties properties;//以值替代名称,Properties可以在整个POM中使用,也可以作为触发条件(见settings.xml配置文件里activation元素的说明)。格式是<name>value</name>
}
src/main/java/com/zjty/adaptationmaster/adaptor/entity/pomEntity/SecondFloor/Dependency.java
0 → 100644
浏览文件 @
9fd140de
package
com
.
zjty
.
adaptationmaster
.
adaptor
.
entity
.
pomEntity
.
SecondFloor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
@NoArgsConstructor
@Data
public
class
Dependency
{
private
String
groupId
;
private
String
artifactId
;
private
String
version
;
/*依赖类型,默认类型是jar。它通常表示依赖的文件的扩展名,但也有例外。一个类型可以被映射成另外一个扩展
名或分类器。类型经常和使用的打包方式对应,尽管这也有例外。一些类型的例子:jar,war,ejb-client和test-jar。
如果设置extensions为 true,就可以在plugin里定义新的类型。所以前面的类型的例子不完整
*/
private
String
type
;
/*依赖的分类器。分类器可以区分属于同一个POM,但不同构建方式的构件。分类器名被附加到文件名的版本号后面。例如,
如果你想要构建两个单独的构件成JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生
成两个单独的JAR构件
*/
private
String
classifier
;
/*
依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。欲知详情请参考依赖机制。
- compile :默认范围,用于编译
- provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
- runtime: 在执行时需要使用
- test: 用于test任务时使用
- system: 需要外在提供相应的元素。通过systemPath来取得
- systemPath: 仅用于范围为system。提供相应的路径
- optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用
*/
private
String
scope
;
/*
仅供system范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖规定了文件
系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}
*/
private
String
systemPath
;
/*
当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的
依赖。此元素主要用于解决版本冲突问题
*/
private
List
<
Exclusion
>
exclusions
;
/*
可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。
可选依赖阻断依赖的传递性
*/
private
String
optional
;
private
class
Exclusion
{
private
String
artifactId
;
private
String
groupId
;
}
private
List
<
Dependency
>
parentDependencies
;
}
src/main/java/com/zjty/adaptationmaster/adaptor/entity/pomEntity/SecondFloor/Parent.java
0 → 100644
浏览文件 @
9fd140de
package
com
.
zjty
.
adaptationmaster
.
adaptor
.
entity
.
pomEntity
.
SecondFloor
;
public
class
Parent
{
private
String
artifactId
;
private
String
groupId
;
private
String
version
;
private
String
relativePath
;
}
src/main/java/com/zjty/adaptationmaster/adaptor/service/AdaptationService.java
浏览文件 @
9fd140de
package
com
.
zjty
.
adaptationmaster
.
adaptor
.
service
;
package
com
.
zjty
.
adaptationmaster
.
adaptor
.
service
;
import
com.zjty.adaptationmaster.adaptor.entity.AdaptRequest
;
import
com.zjty.adaptationmaster.adaptor.entity.Project
;
import
com.zjty.adaptationmaster.adaptor.entity.Project
;
import
com.zjty.adaptationmaster.adaptor.entity.Rule
;
import
com.zjty.adaptationmaster.adaptor.entity.Rule
;
import
com.zjty.adaptationmaster.base.response.ServerResponse
;
import
com.zjty.adaptationmaster.base.response.ServerResponse
;
...
@@ -21,4 +22,6 @@ public interface AdaptationService {
...
@@ -21,4 +22,6 @@ public interface AdaptationService {
ServerResponse
start
(
Project
project
,
String
uuid
);
ServerResponse
start
(
Project
project
,
String
uuid
);
ServerResponse
stop
(
Project
project
,
String
uuid
);
ServerResponse
stop
(
Project
project
,
String
uuid
);
ServerResponse
uploadDeploy
(
Project
project
,
String
path
);
}
}
src/main/java/com/zjty/adaptationmaster/adaptor/service/Impl/AdaptationServiceImpl.java
浏览文件 @
9fd140de
...
@@ -8,12 +8,16 @@ import com.zjty.adaptationmaster.base.enums.Const;
...
@@ -8,12 +8,16 @@ import com.zjty.adaptationmaster.base.enums.Const;
import
com.zjty.adaptationmaster.base.response.ServerResponse
;
import
com.zjty.adaptationmaster.base.response.ServerResponse
;
import
com.zjty.adaptationmaster.adaptor.service.AdaptationService
;
import
com.zjty.adaptationmaster.adaptor.service.AdaptationService
;
import
com.zjty.adaptationmaster.utils.*
;
import
com.zjty.adaptationmaster.utils.*
;
import
org.apache.commons.io.FileUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.nio.file.Files
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
...
@@ -21,6 +25,7 @@ import static java.util.stream.Collectors.toList;
...
@@ -21,6 +25,7 @@ import static java.util.stream.Collectors.toList;
@Service
@Service
public
class
AdaptationServiceImpl
implements
AdaptationService
{
public
class
AdaptationServiceImpl
implements
AdaptationService
{
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
@Autowired
@Autowired
private
Adaptor
adaptor
;
private
Adaptor
adaptor
;
@Autowired
@Autowired
...
@@ -97,6 +102,26 @@ public class AdaptationServiceImpl implements AdaptationService {
...
@@ -97,6 +102,26 @@ public class AdaptationServiceImpl implements AdaptationService {
return
ServerResponse
.
success
(
new
ApusicDeployer
(
Const
.
CTLPATH
,
Const
.
MAVENHOME
).
stop
(
project
.
getProjectName
(),
uuid
));
return
ServerResponse
.
success
(
new
ApusicDeployer
(
Const
.
CTLPATH
,
Const
.
MAVENHOME
).
stop
(
project
.
getProjectName
(),
uuid
));
}
}
@Override
@Transactional
public
ServerResponse
uploadDeploy
(
Project
project
,
String
path
)
{
File
file
=
new
File
(
path
);
File
deployFile
=
new
File
(
project
.
getCodeUrl
()+
"/"
+
file
.
getName
());
File
parentFile
=
deployFile
.
getParentFile
();
if
(!
parentFile
.
exists
()||!
parentFile
.
isDirectory
()){
parentFile
.
mkdirs
();
}
try
{
FileUtils
.
moveFile
(
file
,
deployFile
);
}
catch
(
IOException
e
)
{
logger
.
info
(
"预部署包转存失败"
+
e
.
getMessage
());
return
ServerResponse
.
error
(
"系统错误,文件上传失败"
);
}
project
.
setStage
(
2
);
projectDao
.
getOne
(
project
.
getId
()).
setStage
(
2
);
return
ServerResponse
.
success
();
}
private
Project
filter
(
Project
pro
){
private
Project
filter
(
Project
pro
){
//过滤删除的规则集
//过滤删除的规则集
List
<
RuleSet
>
ruleSets
=
pro
.
getRuleSets
();
List
<
RuleSet
>
ruleSets
=
pro
.
getRuleSets
();
...
...
src/main/java/com/zjty/adaptationmaster/adaptor/service/Impl/InspectServiceImpl.java
浏览文件 @
9fd140de
...
@@ -7,6 +7,7 @@ import com.zjty.adaptationmaster.adaptor.repository.ReportDao;
...
@@ -7,6 +7,7 @@ import com.zjty.adaptationmaster.adaptor.repository.ReportDao;
import
com.zjty.adaptationmaster.adaptor.service.InspectService
;
import
com.zjty.adaptationmaster.adaptor.service.InspectService
;
import
com.zjty.adaptationmaster.base.response.ServerResponse
;
import
com.zjty.adaptationmaster.base.response.ServerResponse
;
import
com.zjty.adaptationmaster.utils.Inspector
;
import
com.zjty.adaptationmaster.utils.Inspector
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
...
@@ -33,8 +34,10 @@ public class InspectServiceImpl implements InspectService {
...
@@ -33,8 +34,10 @@ public class InspectServiceImpl implements InspectService {
suffixLanguageMapping
.
put
(
"cpp"
,
Report
.
Language
.
CPP
);
suffixLanguageMapping
.
put
(
"cpp"
,
Report
.
Language
.
CPP
);
suffixLanguageMapping
.
put
(
"py"
,
Report
.
Language
.
PYTHON
);
suffixLanguageMapping
.
put
(
"py"
,
Report
.
Language
.
PYTHON
);
suffixLanguageMapping
.
put
(
"jsp"
,
Report
.
Language
.
JSP
);
suffixLanguageMapping
.
put
(
"jsp"
,
Report
.
Language
.
JSP
);
suffixLanguageMapping
.
put
(
"asp"
,
Report
.
Language
.
ASP
);
//suffixLanguageMapping.put("html",Report.Language.ONLYVIEW);
//suffixLanguageMapping.put("html",Report.Language.ONLYVIEW);
Report
report
=
new
Inspector
(
project
,
suffixLanguageMapping
).
inspect
();
LoggerFactory
.
getLogger
(
getClass
()).
info
(
"这里rulelist为空,需要设置"
);
Report
report
=
new
Inspector
(
project
,
suffixLanguageMapping
,
new
ArrayList
<>()).
inspect
();
if
(
report
.
getPackagePath
()
==
null
){
if
(
report
.
getPackagePath
()
==
null
){
report
.
setPackagePath
(
project
.
getCodeUrl
());
report
.
setPackagePath
(
project
.
getCodeUrl
());
}
}
...
...
src/main/java/com/zjty/adaptationmaster/utils/Assessor.java
0 → 100644
浏览文件 @
9fd140de
package
com
.
zjty
.
adaptationmaster
.
utils
;
import
com.zjty.adaptationmaster.adaptor.entity.Project
;
import
com.zjty.adaptationmaster.adaptor.entity.Rule
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.IOException
;
import
java.nio.charset.MalformedInputException
;
import
java.nio.file.*
;
import
java.nio.file.attribute.BasicFileAttributes
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
Assessor
{
public
static
void
main
(
String
[]
args
)
{
Assessor
assessor
=
new
Assessor
();
Rule
rule
=
new
Rule
();
rule
.
setTarget
(
"aa?*"
);
rule
.
setReplacing
(
"建议修改为bb"
);
List
<
Rule
>
rules
=
new
ArrayList
<>();
rules
.
add
(
rule
);
assessor
.
setRuleList
(
rules
);
Project
project
=
new
Project
();
project
.
setCodeUrl
(
"D:\\project\\bservice"
);
assessor
.
assess
(
project
);
}
List
<
Rule
>
ruleList
;
public
void
setRuleList
(
List
<
Rule
>
ruleList
)
{
this
.
ruleList
=
ruleList
;
}
List
<
Warn
>
warnList
=
new
ArrayList
<>();
int
lineNum
=
0
;
public
void
assess
(
Project
project
){
try
{
Files
.
walkFileTree
(
Paths
.
get
(
project
.
getCodeUrl
()),
new
SimpleFileVisitor
<
Path
>(){
@Override
public
FileVisitResult
visitFile
(
Path
file
,
BasicFileAttributes
attrs
)
throws
IOException
{
List
<
String
>
allLines
;
try
{
allLines
=
Files
.
readAllLines
(
file
);
}
catch
(
MalformedInputException
e
){
return
FileVisitResult
.
CONTINUE
;
}
lineNum
+=
allLines
.
size
();
for
(
int
i
=
0
;
i
<
allLines
.
size
();
i
++){
String
s
=
allLines
.
get
(
i
);
for
(
Rule
rule:
ruleList
){
if
(
s
.
indexOf
(
rule
.
getTarget
())>-
1
){
warnList
.
add
(
new
Warn
(
file
,
i
+
1
,
rule
.
getTarget
(),
rule
.
getReplacing
()));
}
}
}
return
FileVisitResult
.
CONTINUE
;
}
});
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
for
(
Warn
warn:
warnList
){
System
.
out
.
println
(
warn
);
}
}
// public class ProjectFile{
// private Path path;
// private BasicFileAttributes attributes;
// private List<String> allLines;
// }
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
Warn
{
private
Path
path
;
private
int
line
;
private
String
keyWord
;
private
String
suggest
;
}
}
src/main/java/com/zjty/adaptationmaster/utils/Inspector.java
浏览文件 @
9fd140de
package
com
.
zjty
.
adaptationmaster
.
utils
;
package
com
.
zjty
.
adaptationmaster
.
utils
;
import
com.thoughtworks.xstream.XStream
;
import
com.zjty.adaptationmaster.adaptor.entity.Project
;
import
com.zjty.adaptationmaster.adaptor.entity.Project
;
import
com.zjty.adaptationmaster.adaptor.entity.Report
;
import
com.zjty.adaptationmaster.adaptor.entity.Report
;
import
com.zjty.adaptationmaster.adaptor.entity.Rule
;
import
com.zjty.adaptationmaster.adaptor.entity.pomEntity.ProjectPom
;
import
com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.Dependency
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.dom4j.Document
;
import
org.dom4j.Document
;
import
org.dom4j.DocumentException
;
import
org.dom4j.DocumentException
;
import
org.dom4j.Element
;
import
org.dom4j.Element
;
import
org.dom4j.io.SAXReader
;
import
org.dom4j.io.SAXReader
;
import
org.yaml.snakeyaml.Yaml
;
import
java.io.File
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.nio.charset.MalformedInputException
;
import
java.nio.file.*
;
import
java.nio.file.*
;
import
java.nio.file.attribute.BasicFileAttributes
;
import
java.nio.file.attribute.BasicFileAttributes
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.*
;
/**
/**
...
@@ -23,15 +34,37 @@ import java.util.*;
...
@@ -23,15 +34,37 @@ import java.util.*;
public
class
Inspector
{
public
class
Inspector
{
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
Project
project
=
new
Project
();
System
.
out
.
println
(
LocalDateTime
.
now
());
project
.
setCodeUrl
(
"C:\\home\\project\\rsc\\hrmbclient"
);
//System.out.println("请输入项目地址,然后回车");
//Scanner scanner = new Scanner(System.in);
//String next = scanner.next();
//Project project = new Project();
//project.setCodeUrl(next);
Map
<
String
,
Report
.
Language
>
suffixLanguageMapping
=
new
HashMap
<>();
Map
<
String
,
Report
.
Language
>
suffixLanguageMapping
=
new
HashMap
<>();
suffixLanguageMapping
.
put
(
"java"
,
Report
.
Language
.
JAVA
);
suffixLanguageMapping
.
put
(
"java"
,
Report
.
Language
.
JAVA
);
suffixLanguageMapping
.
put
(
"cpp"
,
Report
.
Language
.
CPP
);
suffixLanguageMapping
.
put
(
"cpp"
,
Report
.
Language
.
CPP
);
suffixLanguageMapping
.
put
(
"py"
,
Report
.
Language
.
PYTHON
);
suffixLanguageMapping
.
put
(
"py"
,
Report
.
Language
.
PYTHON
);
suffixLanguageMapping
.
put
(
"jsp"
,
Report
.
Language
.
JSP
);
suffixLanguageMapping
.
put
(
"jsp"
,
Report
.
Language
.
JSP
);
Inspector
inspector
=
new
Inspector
(
project
,
suffixLanguageMapping
);
System
.
out
.
println
(
inspector
.
inspect
());
List
<
Rule
>
ruleList
=
new
ArrayList
<>();
ruleList
.
add
(
new
Rule
(
"com.mysql.cj.jdbc.Driver"
,
"建议修改为postgre数据库驱动"
));
ruleList
.
add
(
new
Rule
(
"<artifactId>mysql-connector-java</artifactId>"
,
"建议修改为postgre依赖声明"
));
ruleList
.
add
(
new
Rule
(
"public native"
,
"这里用到了JNI"
));
ruleList
.
add
(
new
Rule
(
"<packaging>jar</packaging>"
,
"建议修改打包方式为war包并排除掉springboot内置的tomcat"
));
String
[]
projectSrc
=
{
"D:\\project\\testAccess\\SpringBoot-Labs-master"
/*"D:\\project\\bservice","D:\\project\\debug","D:\\project\\glutton"*/
};
//String[] projectSrc = {"D:\\project\\testAccess\\Telegram-master"};
for
(
String
s:
projectSrc
){
Project
project
=
new
Project
();
project
.
setCodeUrl
(
s
);
Inspector
inspector
=
new
Inspector
(
project
,
suffixLanguageMapping
,
ruleList
);
Report
inspect
=
inspector
.
inspect
();
System
.
out
.
println
(
"语言:"
+
inspect
.
getLanguage
()+
" 数据库:"
+
inspect
.
getDatabaseType
()+
" 依赖管理:"
+
inspect
.
getDependenceManagement
());
for
(
Warn
warn:
inspect
.
getWarnList
()){
System
.
out
.
println
(
"\t"
+
warn
);
}
}
System
.
out
.
println
(
LocalDateTime
.
now
());
}
}
private
Project
project
;
private
Project
project
;
...
@@ -39,11 +72,15 @@ public class Inspector {
...
@@ -39,11 +72,15 @@ public class Inspector {
private
Map
<
String
,
Counter
>
languageMatchMap
;
private
Map
<
String
,
Counter
>
languageMatchMap
;
private
Map
<
String
,
Report
.
Language
>
suffixLanguageMapping
;
private
Map
<
String
,
Report
.
Language
>
suffixLanguageMapping
;
private
List
<
Rule
>
ruleList
;
private
Map
<
String
,
List
<
Path
>>
configFileTypePathsMapping
;
private
Map
<
String
,
List
<
Path
>>
configFileTypePathsMapping
;
private
List
<
Warn
>
warnList
;
public
Inspector
(
Project
project
,
Map
<
String
,
Report
.
Language
>
suffixLanguageMapping
){
public
Inspector
(
Project
project
,
Map
<
String
,
Report
.
Language
>
suffixLanguageMapping
,
List
<
Rule
>
ruleList
){
this
.
project
=
project
;
this
.
project
=
project
;
this
.
suffixLanguageMapping
=
suffixLanguageMapping
;
this
.
suffixLanguageMapping
=
suffixLanguageMapping
;
this
.
ruleList
=
ruleList
;
this
.
languageMatchMap
=
new
HashMap
<>();
this
.
languageMatchMap
=
new
HashMap
<>();
for
(
String
s:
suffixLanguageMapping
.
keySet
()){
for
(
String
s:
suffixLanguageMapping
.
keySet
()){
languageMatchMap
.
put
(
s
,
new
Counter
());
languageMatchMap
.
put
(
s
,
new
Counter
());
...
@@ -61,9 +98,11 @@ public class Inspector {
...
@@ -61,9 +98,11 @@ public class Inspector {
configFileTypePathsMapping
.
put
(
"properties"
,
new
ArrayList
<>());
configFileTypePathsMapping
.
put
(
"properties"
,
new
ArrayList
<>());
configFileTypePathsMapping
.
put
(
"yml"
,
new
ArrayList
<>());
configFileTypePathsMapping
.
put
(
"yml"
,
new
ArrayList
<>());
this
.
report
=
new
Report
();
this
.
report
=
new
Report
();
this
.
warnList
=
new
ArrayList
<>();
}
}
int
fileNum
=
0
;
int
fileNum
=
0
;
long
lineNum
=
0
;
/**
/**
* FileVisitResult.CONTINUE 继续遍历
* FileVisitResult.CONTINUE 继续遍历
* FileVisitResult.TERMINATE 中止访问
* FileVisitResult.TERMINATE 中止访问
...
@@ -96,6 +135,7 @@ public class Inspector {
...
@@ -96,6 +135,7 @@ public class Inspector {
* 这里是对于路径(文件夹)的过滤,在这里读不到文件
* 这里是对于路径(文件夹)的过滤,在这里读不到文件
* 如果能判断,可以返回FileVisitResult.SKIP_SUBTREE 不访问子目录
* 如果能判断,可以返回FileVisitResult.SKIP_SUBTREE 不访问子目录
*/
*/
//if (dir.endsWith(".git"))return FileVisitResult.SKIP_SUBTREE;
return
FileVisitResult
.
CONTINUE
;
return
FileVisitResult
.
CONTINUE
;
}
}
...
@@ -112,6 +152,22 @@ public class Inspector {
...
@@ -112,6 +152,22 @@ public class Inspector {
configFileTypePathsMapping
.
get
(
entry
.
getValue
()).
add
(
file
);
configFileTypePathsMapping
.
get
(
entry
.
getValue
()).
add
(
file
);
}
}
}
}
List
<
String
>
allLines
;
try
{
allLines
=
Files
.
readAllLines
(
file
);
}
catch
(
MalformedInputException
e
){
return
FileVisitResult
.
CONTINUE
;
}
lineNum
+=
allLines
.
size
();
for
(
int
i
=
0
;
i
<
allLines
.
size
();
i
++){
String
s
=
allLines
.
get
(
i
);
for
(
Rule
rule:
ruleList
){
if
(
s
.
indexOf
(
rule
.
getTarget
())>-
1
){
warnList
.
add
(
new
Warn
(
file
,
i
+
1
,
rule
.
getTarget
(),
rule
.
getReplacing
()));
}
}
}
//System.out.println(file);
//System.out.println(file);
return
FileVisitResult
.
CONTINUE
;
return
FileVisitResult
.
CONTINUE
;
}
}
...
@@ -134,6 +190,7 @@ public class Inspector {
...
@@ -134,6 +190,7 @@ public class Inspector {
public
Report
analysis
(){
public
Report
analysis
(){
report
.
setFileNum
(
fileNum
);
report
.
setFileNum
(
fileNum
);
report
.
setLineNum
(
lineNum
);
report
.
setLanguage
(
Report
.
Language
.
ONLYVIEW
);
report
.
setLanguage
(
Report
.
Language
.
ONLYVIEW
);
for
(
Map
.
Entry
<
String
,
Counter
>
entry:
languageMatchMap
.
entrySet
()){
for
(
Map
.
Entry
<
String
,
Counter
>
entry:
languageMatchMap
.
entrySet
()){
if
(
entry
.
getValue
().
getNumber
()>
0
){
if
(
entry
.
getValue
().
getNumber
()>
0
){
...
@@ -153,7 +210,7 @@ public class Inspector {
...
@@ -153,7 +210,7 @@ public class Inspector {
* 配置文件的一个类型,xml文件
* 配置文件的一个类型,xml文件
*/
*/
case
"xml"
:
case
"xml"
:
System
.
out
.
println
(
entry
.
getValue
().
size
());
//
System.out.println(entry.getValue().size());
for
(
Path
path:
entry
.
getValue
()){
for
(
Path
path:
entry
.
getValue
()){
/**
/**
* 对于maven工程,可以在maven配置文件中得到一这些信息
* 对于maven工程,可以在maven配置文件中得到一这些信息
...
@@ -171,6 +228,7 @@ public class Inspector {
...
@@ -171,6 +228,7 @@ public class Inspector {
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
Element
elementProject
=
document
.
getRootElement
();
Element
elementProject
=
document
.
getRootElement
();
String
projectMavenName
=
elementProject
.
elementText
(
"artifactId"
);
String
projectMavenName
=
elementProject
.
elementText
(
"artifactId"
);
String
projectMavenVersion
=
elementProject
.
elementText
(
"version"
);
String
projectMavenVersion
=
elementProject
.
elementText
(
"version"
);
report
.
setPackagePath
(
path
.
getParent
()+
"/target/"
+
projectMavenName
+
"-"
+
projectMavenVersion
+
".war"
);
report
.
setPackagePath
(
path
.
getParent
()+
"/target/"
+
projectMavenName
+
"-"
+
projectMavenVersion
+
".war"
);
...
@@ -178,7 +236,7 @@ public class Inspector {
...
@@ -178,7 +236,7 @@ public class Inspector {
}
}
break
;
break
;
/**
/**
*
配置文件的一个类型,
properties文件
* properties文件
*
*
*/
*/
case
"properties"
:
case
"properties"
:
...
@@ -195,7 +253,7 @@ public class Inspector {
...
@@ -195,7 +253,7 @@ public class Inspector {
}
}
String
datasourceDriver
=
properties
.
getProperty
(
"spring.datasource.driver-class-name"
);
String
datasourceDriver
=
properties
.
getProperty
(
"spring.datasource.driver-class-name"
);
String
active
=
properties
.
getProperty
(
"spring.profiles.active"
);
String
active
=
properties
.
getProperty
(
"spring.profiles.active"
);
System
.
out
.
println
(
path
.
getParent
());
//
System.out.println(path.getParent());
File
file
=
new
File
(
path
.
getParent
().
toString
()
+
"/application-"
+
active
+
".properties"
);
File
file
=
new
File
(
path
.
getParent
().
toString
()
+
"/application-"
+
active
+
".properties"
);
if
(
file
.
exists
())
{
if
(
file
.
exists
())
{
Properties
properties1
=
new
Properties
();
Properties
properties1
=
new
Properties
();
...
@@ -224,6 +282,18 @@ public class Inspector {
...
@@ -224,6 +282,18 @@ public class Inspector {
}
}
break
;
break
;
case
"yml"
:
case
"yml"
:
for
(
Path
path:
entry
.
getValue
())
{
Yaml
ymal
=
new
Yaml
();
Iterable
<
Object
>
objects
=
null
;
try
{
objects
=
ymal
.
loadAll
(
new
FileInputStream
(
path
.
toFile
()));
}
catch
(
FileNotFoundException
e
)
{
e
.
printStackTrace
();
}
objects
.
forEach
(
o
->
{
});
}
break
;
break
;
}
}
}
}
...
@@ -270,6 +340,7 @@ public class Inspector {
...
@@ -270,6 +340,7 @@ public class Inspector {
// e.printStackTrace();
// e.printStackTrace();
// }
// }
// }
// }
report
.
setWarnList
(
warnList
);
return
report
;
return
report
;
}
}
public
class
Counter
{
public
class
Counter
{
...
@@ -286,4 +357,19 @@ public class Inspector {
...
@@ -286,4 +357,19 @@ public class Inspector {
i
=
0
;
i
=
0
;
}
}
}
}
public
class
YmlConfig
{
private
String
springDatasourceDriverClassName
;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
Warn
{
private
Path
path
;
private
int
line
;
private
String
keyWord
;
private
String
suggest
;
}
}
}
src/main/java/com/zjty/adaptationmaster/utils/ReadedFileTask.java
浏览文件 @
9fd140de
...
@@ -5,16 +5,13 @@ import com.zjty.adaptationmaster.adaptor.entity.Rule;
...
@@ -5,16 +5,13 @@ import com.zjty.adaptationmaster.adaptor.entity.Rule;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
import
org.apache.tomcat.websocket.server.WsServerContainer
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
java.io.*
;
import
java.io.*
;
import
java.nio.file.Path
;
import
java.nio.file.Path
;
import
java.nio.file.attribute.BasicFileAttributes
;
import
java.nio.file.attribute.BasicFileAttributes
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Properties
;
public
class
ReadedFileTask
implements
Runnable
{
public
class
ReadedFileTask
implements
Runnable
{
...
...
src/test/java/com/zjty/adaptationmaster/YmlConfig.java
0 → 100644
浏览文件 @
9fd140de
package
com
.
zjty
.
adaptationmaster
;
public
class
YmlConfig
{
public
static
void
main
(
String
[]
args
)
{
String
string
=
""
;
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论