Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
I
inspect
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
912协同工作系统
项目监控管理工具
inspect
Commits
4e7849c1
提交
4e7849c1
authored
2月 25, 2020
作者:
马晨俊
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
git init
上级
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
26 个修改的文件
包含
1300 行增加
和
0 行删除
+1300
-0
.gitignore
.gitignore
+36
-0
pom.xml
pom.xml
+84
-0
InspectApplication.java
src/main/java/com/zjty/inspect/InspectApplication.java
+13
-0
InspectController.java
...n/java/com/zjty/inspect/controller/InspectController.java
+33
-0
WebSocketServer.java
...ain/java/com/zjty/inspect/controller/WebSocketServer.java
+80
-0
DepTree.java
src/main/java/com/zjty/inspect/entity/DepTree.java
+24
-0
DepTreeAndReport.java
src/main/java/com/zjty/inspect/entity/DepTreeAndReport.java
+13
-0
InspectParameter.java
src/main/java/com/zjty/inspect/entity/InspectParameter.java
+21
-0
Parent.java
src/main/java/com/zjty/inspect/entity/Parent.java
+11
-0
PomAnalysis.java
src/main/java/com/zjty/inspect/entity/PomAnalysis.java
+47
-0
PomDependency.java
src/main/java/com/zjty/inspect/entity/PomDependency.java
+72
-0
ProjectPom.java
src/main/java/com/zjty/inspect/entity/ProjectPom.java
+43
-0
Properties.java
src/main/java/com/zjty/inspect/entity/Properties.java
+13
-0
Report.java
src/main/java/com/zjty/inspect/entity/Report.java
+45
-0
Rule.java
src/main/java/com/zjty/inspect/entity/Rule.java
+21
-0
VueBrowserslist.java
src/main/java/com/zjty/inspect/entity/VueBrowserslist.java
+20
-0
VueDep.java
src/main/java/com/zjty/inspect/entity/VueDep.java
+28
-0
InspectService.java
src/main/java/com/zjty/inspect/service/InspectService.java
+10
-0
InspectServiceImpl.java
...ava/com/zjty/inspect/service/impl/InspectServiceImpl.java
+158
-0
AnalysisFile.java
src/main/java/com/zjty/inspect/utils/AnalysisFile.java
+202
-0
FileUtil.java
src/main/java/com/zjty/inspect/utils/FileUtil.java
+136
-0
GitLabUtil.java
src/main/java/com/zjty/inspect/utils/GitLabUtil.java
+58
-0
Inspector.java
src/main/java/com/zjty/inspect/utils/Inspector.java
+0
-0
KmpUtil.java
src/main/java/com/zjty/inspect/utils/KmpUtil.java
+66
-0
TimeUtil.java
src/main/java/com/zjty/inspect/utils/TimeUtil.java
+10
-0
application.properties
src/main/resources/application.properties
+56
-0
没有找到文件。
.gitignore
0 → 100644
浏览文件 @
4e7849c1
HELP.md
target/
.mvn/**
**/lib/**
!**/src/main/**
!**/src/test/**
mvnw
mvnw.cmd
tree.txt
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea/**
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
### VS Code ###
.vscode/
pom.xml
0 → 100644
浏览文件 @
4e7849c1
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.1.6.RELEASE
</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>
com.zjty
</groupId>
<artifactId>
inspect
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
<name>
inspect
</name>
<description>
Demo project for Spring Boot
</description>
<properties>
<java.version>
1.8
</java.version>
</properties>
<dependencies>
<dependency>
<groupId>
org.eclipse.jgit
</groupId>
<artifactId>
org.eclipse.jgit
</artifactId>
<version>
5.2.1.201812262042-r
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-jpa
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
<exclusions>
<exclusion>
<artifactId>
snakeyaml
</artifactId>
<groupId>
org.yaml
</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
1.2.61
</version>
</dependency>
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.yaml
</groupId>
<artifactId>
snakeyaml
</artifactId>
<version>
1.25
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
</project>
src/main/java/com/zjty/inspect/InspectApplication.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
public
class
InspectApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
InspectApplication
.
class
,
args
);
}
}
src/main/java/com/zjty/inspect/controller/InspectController.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
controller
;
import
com.zjty.inspect.entity.InspectParameter
;
import
com.zjty.inspect.entity.Report
;
import
com.zjty.inspect.service.InspectService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
/**
* @author mcj
*/
@RestController
@RequestMapping
(
"/inspect"
)
public
class
InspectController
{
@Autowired
private
InspectService
inspectService
;
@GetMapping
(
"/path"
)
public
ResponseEntity
inspect
(
@RequestBody
InspectParameter
path
){
//下载代码
//
InspectParameter
inspectParameter
=
new
InspectParameter
();
return
ResponseEntity
.
ok
(
inspectService
.
inspect
(
inspectParameter
));
}
@PostMapping
public
ResponseEntity
inspect1
(
String
path
){
System
.
out
.
println
(
path
);
return
ResponseEntity
.
ok
(
200
);
}
}
src/main/java/com/zjty/inspect/controller/WebSocketServer.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
controller
;
import
lombok.extern.slf4j.Slf4j
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
import
javax.websocket.*
;
import
javax.websocket.server.PathParam
;
import
javax.websocket.server.ServerEndpoint
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.Map
;
@ServerEndpoint
(
"/webServer/{uuid}"
)
@Component
@Slf4j
public
class
WebSocketServer
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
private
static
Map
<
String
,
WebSocketServer
>
map
=
new
HashMap
<>();
private
Session
session
;
private
String
uuid
;
@OnOpen
public
void
onOpen
(
Session
session
,
@PathParam
(
"uuid"
)
String
uuid
){
this
.
session
=
session
;
this
.
uuid
=
uuid
;
//session.getOpenSessions().
//System.out.println("第一个" + uuid);
logger
.
info
(
"uuid:"
+
uuid
);
map
.
put
(
uuid
,
this
);
try
{
sendMessage
(
"连接成功"
);
}
catch
(
IOException
e
)
{
logger
.
error
(
"websocket IO异常"
);
}
logger
.
info
(
"连接成功"
+
session
.
getId
());
}
@OnClose
public
void
onClose
(
Session
session
){
map
.
remove
(
this
.
uuid
);
logger
.
info
(
"连接关闭"
+
session
.
getId
());
}
@OnMessage
public
void
onMessage
(
Session
session
,
String
message
){
// try {
//map.get(uuid).sendMessage(message);
logger
.
info
(
uuid
+
"sendMsg"
+
message
);
// } catch (IOException e) {
// e.printStackTrace();
// }
}
@OnError
public
void
onError
(
Session
session
,
Throwable
error
){
logger
.
info
(
error
.
getMessage
());
error
.
printStackTrace
();
}
/**
* 实现服务器主动推送
*/
public
void
sendMessage
(
String
message
)
throws
IOException
{
this
.
session
.
getBasicRemote
().
sendText
(
message
);
}
public
static
void
sendIn
(
String
sessionId
,
String
message
)
throws
IOException
{
//System.out.println(message);
try
{
map
.
get
(
sessionId
).
sendMessage
(
message
);
}
catch
(
Exception
e
){
log
.
info
(
"向前台发送日志出错"
);
//e.printStackTrace();
}
}
}
src/main/java/com/zjty/inspect/entity/DepTree.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.Data
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author Mcj
* @date 2020-02-18 11:19
*/
@Data
public
class
DepTree
{
private
String
depName
;
private
List
<
DepTree
>
depTreeList
=
new
ArrayList
<>();
/**
* 0,未违规
* 1,违规
*/
private
Integer
violation
=
0
;
}
src/main/java/com/zjty/inspect/entity/DepTreeAndReport.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.Data
;
/**
* @author Mcj
* @date 2020-02-21 20:26
*/
@Data
public
class
DepTreeAndReport
{
private
String
id
;
private
DepTree
depTree
;
}
src/main/java/com/zjty/inspect/entity/InspectParameter.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author Mcj
* @date 2020-02-12 12:35
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
InspectParameter
{
String
path
;
List
<
Rule
>
ruleList
=
new
ArrayList
<>();
}
src/main/java/com/zjty/inspect/entity/Parent.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.Data
;
@Data
public
class
Parent
{
private
String
artifactId
;
private
String
groupId
;
private
String
version
;
private
String
relativePath
;
}
src/main/java/com/zjty/inspect/entity/PomAnalysis.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
/**
* 前端返回视图
* 不需要入库
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
PomAnalysis
{
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
<
PomDependency
>
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/inspect/entity/PomDependency.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* 依赖
* 入库
*/
@NoArgsConstructor
@Data
public
class
PomDependency
{
private
String
groupId
=
""
;
private
String
artifactId
=
""
;
private
String
version
=
""
;
private
String
gradle
=
""
;
/**
* 1:前端依赖
* 2:后端依赖
*/
private
Integer
type
;
/*依赖类型,默认类型是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<PomDependency> parentDependencies;//
//private int reportId;
}
src/main/java/com/zjty/inspect/entity/ProjectPom.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.ArrayList
;
import
java.util.List
;
@NoArgsConstructor
@Data
public
class
ProjectPom
{
private
List
<
Properties
>
properties
=
new
ArrayList
<>();
private
Parent
parent
;
private
String
modelVersion
;
private
String
groupId
;
private
String
artifactId
;
private
String
packaging
;
private
String
version
;
private
String
name
;
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
<
PomDependency
>
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/inspect/entity/Properties.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.Data
;
/**
* @author Mcj
* @date 2020-02-17 16:11
*/
@Data
public
class
Properties
{
private
String
name
;
private
String
value
;
}
src/main/java/com/zjty/inspect/entity/Report.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.zjty.inspect.utils.Inspector
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.persistence.*
;
import
java.util.Date
;
import
java.util.List
;
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
Report
{
private
Language
language
;
private
String
framework
;
private
int
fileNum
;
private
long
lineNum
;
/**
* 取名,后端依赖
*/
private
List
<
PomDependency
>
backend
;
/**
* 取名。前端依赖
*/
private
List
<
PomDependency
>
frontend
;
@Transient
private
List
<
Inspector
.
Warn
>
warnList
;
private
String
compileFilePath
;
public
DependenceManagement
dependenceManagement
;
@ElementCollection
public
List
<
String
>
jarPath
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
createTime
;
public
enum
DependenceManagement
{
MAVEN
,
GRADLE
,
ANT
}
public
enum
Language
{
JAVA
,
PYTHON
,
CPP
,
JSP
,
ASP
,
ONLYVIEW
,
UNKNOW
,
JAVASCRIPT
,
GO
,
VUE
}
}
src/main/java/com/zjty/inspect/entity/Rule.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
Rule
{
private
String
path
;
private
String
target
;
private
String
advice
;
public
Rule
(
String
target
,
String
advice
){
this
.
target
=
target
;
this
.
advice
=
advice
;
}
}
src/main/java/com/zjty/inspect/entity/VueBrowserslist.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author Mcj
* @date 2020-01-15 13:18
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
VueBrowserslist
{
List
<
String
>
production
=
new
ArrayList
<>();
List
<
String
>
development
=
new
ArrayList
<>();
}
src/main/java/com/zjty/inspect/entity/VueDep.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
entity
;
import
com.fasterxml.jackson.annotation.JsonSetter
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @author Mcj
* @date 2020-01-15 11:18
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
VueDep
{
String
name
;
String
version
;
@JsonSetter
(
"private"
)
String
vuePrivate
;
Map
<
String
,
String
>
dependencies
=
new
HashMap
<>();
Map
<
String
,
String
>
scripts
=
new
HashMap
<>();
Map
<
String
,
String
>
eslintConfig
=
new
HashMap
<>();
VueBrowserslist
browserslist
;
}
src/main/java/com/zjty/inspect/service/InspectService.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
service
;
import
com.zjty.inspect.entity.InspectParameter
;
import
com.zjty.inspect.entity.Report
;
public
interface
InspectService
{
Report
inspect
(
InspectParameter
inspectParameter
);
}
src/main/java/com/zjty/inspect/service/impl/InspectServiceImpl.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.zjty.inspect.entity.InspectParameter
;
import
com.zjty.inspect.entity.PomDependency
;
import
com.zjty.inspect.entity.Report
;
import
com.zjty.inspect.entity.Rule
;
import
com.zjty.inspect.service.InspectService
;
import
com.zjty.inspect.utils.Inspector
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.FileWriter
;
import
java.io.IOException
;
import
java.nio.file.Path
;
import
java.nio.file.Paths
;
import
java.util.*
;
@Service
public
class
InspectServiceImpl
implements
InspectService
{
@Transactional
@Override
public
Report
inspect
(
InspectParameter
inspectParameter
)
{
Map
<
String
,
Report
.
Language
>
suffixLanguageMapping
=
new
HashMap
<>();
suffixLanguageMapping
.
put
(
"java"
,
Report
.
Language
.
JAVA
);
suffixLanguageMapping
.
put
(
"vue"
,
Report
.
Language
.
VUE
);
suffixLanguageMapping
.
put
(
"cpp"
,
Report
.
Language
.
CPP
);
suffixLanguageMapping
.
put
(
"py"
,
Report
.
Language
.
PYTHON
);
suffixLanguageMapping
.
put
(
"jsp"
,
Report
.
Language
.
JSP
);
suffixLanguageMapping
.
put
(
"html"
,
Report
.
Language
.
ONLYVIEW
);
suffixLanguageMapping
.
put
(
"js"
,
Report
.
Language
.
JAVASCRIPT
);
suffixLanguageMapping
.
put
(
"go"
,
Report
.
Language
.
GO
);
List
<
Rule
>
ruleList
=
inspectParameter
.
getRuleList
();
//com.mysql.cj.jdbc.Driver//com.mysql.jdbc.Driver
ruleList
.
add
(
new
Rule
(
"com.mysql.cj.jdbc.Driver"
,
"建议修改为postgresql数据库驱动"
));
ruleList
.
add
(
new
Rule
(
"com.mysql.jdbc.Driver"
,
"建议修改为postgresql数据库驱动"
));
//net.sourceforge.jtds.jdbc.Driver//sqlserver
ruleList
.
add
(
new
Rule
(
"net.sourceforge.jtds.jdbc.Driver"
,
"建议修改为postgresql数据库驱动"
));
//COM.ibm.db2.jdbc.app.DB2Driver//com.ibm.db2.jcc.DB2Driver//COM.ibm.db2.jdbc.net.DB2Driver//com.ibm.db2.jcc.DB2Driver
ruleList
.
add
(
new
Rule
(
"DB2Driver"
,
"建议修改为postgresql数据库驱动"
));
//oracle.jdbc.OracleDriver//oracle.jdbc.driver.OracleDriver
ruleList
.
add
(
new
Rule
(
"OracleDriver"
,
"建议修改为postgresql数据库驱动"
));
ruleList
.
add
(
new
Rule
(
"mysql-connector-java"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"com.microsoft.sqlserver"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"com.oracle"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"org.mariadb.jdbc"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"com.sap.cloud.db.jdbc"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"com.ibm.informix"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"org.firebirdsql.jdbc"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"org.hsqldb"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"com.h2database"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"org.apache.derby"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"org.mongodb"
,
"建议修改为postgresql依赖声明"
));
ruleList
.
add
(
new
Rule
(
"package.json"
,
"需要nodejs环境"
));
ruleList
.
add
(
new
Rule
(
"public native"
,
"这里用到了JNI"
));
ruleList
.
add
(
new
Rule
(
"<packaging>jar</packaging>"
,
"建议修改打包方式为war包并排除掉springboot内置的tomcat,以部署到国产化中间件上"
));
ruleList
.
add
(
new
Rule
(
"WebOffice"
,
"这里用到了weboffice文档展示编辑插件"
));
ruleList
.
add
(
new
Rule
(
"webOffice"
,
"这里用到了weboffice文档展示编辑插件"
));
ruleList
.
add
(
new
Rule
(
"weboffice"
,
"这里用到了weboffice文档展示编辑插件"
));
ruleList
.
add
(
new
Rule
(
"Weboffice"
,
"这里用到了weboffice文档展示编辑插件"
));
ruleList
.
add
(
new
Rule
(
"pdfobject.min.js"
,
"这里用到了pdf文档展示插件"
));
ruleList
.
add
(
new
Rule
(
"pdfobject.js"
,
"这里用到了pdf文档展示插件"
));
ruleList
.
add
(
new
Rule
(
".swf"
,
"这里用到了flash流媒体播放插件"
));
String
path
=
inspectParameter
.
getPath
();
//调用下载服务下载源代码
Report
report
=
notList
(
path
,
suffixLanguageMapping
,
ruleList
);
return
report
;
}
public
void
listfile
(
String
path
,
Map
<
String
,
Report
.
Language
>
suffixLanguageMapping
,
List
<
Rule
>
ruleList
){
Path
path1
=
Paths
.
get
(
path
);
File
file
=
path1
.
toFile
();
File
[]
files
=
file
.
listFiles
();
System
.
out
.
println
(
file
.
isDirectory
());
for
(
File
file1
:
files
)
{
Report
report
=
new
Inspector
(
file1
.
getPath
(),
suffixLanguageMapping
,
ruleList
).
inspect
();
File
file2
=
new
File
(
file1
.
getPath
()
+
"/评估报告"
+
file1
.
getName
()
+
".txt"
);
try
{
FileWriter
writer
=
new
FileWriter
(
file2
);
writer
.
write
(
"系统名称:"
+
file1
.
getName
()
+
"\n"
);
writer
.
write
(
"评估时间:"
+
new
Date
()
+
"\n\n"
);
writer
.
write
(
"语言:"
+
report
.
getLanguage
()
+
"\t"
);
writer
.
write
(
"依赖管理工具:"
+
report
.
getDependenceManagement
()
+
"\t"
);
writer
.
write
(
"架构:"
+
report
.
getFramework
()
+
"\n"
);
writer
.
write
(
"文件数量:"
+
report
.
getFileNum
()
+
"\t"
);
writer
.
write
(
"代码行数:"
+
report
.
getLineNum
()
+
"\n\n"
);
writer
.
write
(
"后端依赖列表:\n"
);
for
(
PomDependency
dependency
:
report
.
getBackend
())
{
writer
.
write
(
""
+
dependency
.
getGroupId
()
+
":"
+
dependency
.
getArtifactId
()
+
":"
+
dependency
.
getVersion
()
+
":"
+
dependency
.
getGradle
()
+
"\n"
);
}
writer
.
write
(
"\n前端依赖列表:\n"
);
for
(
PomDependency
dependency
:
report
.
getFrontend
())
{
writer
.
write
(
""
+
dependency
.
getGroupId
()
+
":"
+
dependency
.
getArtifactId
()
+
":"
+
dependency
.
getVersion
()
+
":"
);
}
int
j
=
1
;
for
(
Inspector
.
Warn
warn
:
report
.
getWarnList
())
{
writer
.
write
(
j
++
+
"、所在文件:"
+
warn
.
getPath
()
+
" 行数:"
+
warn
.
getLine
()
+
"行 关键字:"
+
warn
.
getKeyWord
()
+
"\n"
+
"建议:"
+
warn
.
getSuggest
());
}
writer
.
close
();
}
catch
(
IOException
e
)
{
}
}
}
public
Report
notList
(
String
path
,
Map
<
String
,
Report
.
Language
>
suffixLanguageMapping
,
List
<
Rule
>
ruleList
){
Path
path1
=
Paths
.
get
(
path
);
File
file
=
path1
.
toFile
();
File
file2
=
new
File
(
file
.
getPath
()
+
"/评估报告"
+
file
.
getName
()
+
".txt"
);
if
(
file2
.
exists
()){
file2
.
delete
();
}
Report
report
=
new
Inspector
(
file
.
getPath
(),
suffixLanguageMapping
,
ruleList
).
inspect
();
try
{
FileWriter
writer
=
new
FileWriter
(
file2
);
writer
.
write
(
"系统名称:"
+
file
.
getName
()
+
"\n"
);
writer
.
write
(
"评估时间:"
+
new
Date
()
+
"\n\n"
);
writer
.
write
(
"语言:"
+
report
.
getLanguage
()
+
"\t"
);
writer
.
write
(
"依赖管理工具:"
+
report
.
getDependenceManagement
()
+
"\t"
);
writer
.
write
(
"架构:"
+
report
.
getFramework
()
+
"\n"
);
writer
.
write
(
"文件数量:"
+
report
.
getFileNum
()
+
"\t"
);
writer
.
write
(
"代码行数:"
+
report
.
getLineNum
()
+
"\n\n"
);
writer
.
write
(
"后端依赖列表:\n"
);
for
(
PomDependency
dependency
:
report
.
getBackend
())
{
writer
.
write
(
""
+
dependency
.
getGroupId
()
+
":"
+
dependency
.
getArtifactId
()
+
":"
+
dependency
.
getVersion
()
+
":"
+
dependency
.
getGradle
()
+
"\n"
);
}
writer
.
write
(
"\n前端依赖列表:\n"
);
for
(
PomDependency
dependency
:
report
.
getFrontend
())
{
writer
.
write
(
""
+
dependency
.
getGroupId
()
+
":"
+
dependency
.
getArtifactId
()
+
":"
+
dependency
.
getVersion
()
+
":"
);
}
int
j
=
1
;
for
(
Inspector
.
Warn
warn
:
report
.
getWarnList
())
{
writer
.
write
(
j
++
+
"、所在文件:"
+
warn
.
getPath
()
+
" 行数:"
+
warn
.
getLine
()
+
"行 关键字:"
+
warn
.
getKeyWord
()
+
"\n"
+
"建议:"
+
warn
.
getSuggest
());
}
writer
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
report
;
}
}
src/main/java/com/zjty/inspect/utils/AnalysisFile.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
utils
;
import
com.alibaba.fastjson.JSONObject
;
import
com.zjty.inspect.entity.*
;
import
com.zjty.inspect.entity.Properties
;
import
org.dom4j.Document
;
import
org.dom4j.DocumentException
;
import
org.dom4j.DocumentHelper
;
import
org.dom4j.Element
;
import
java.io.File
;
import
java.io.IOException
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.nio.file.Paths
;
import
java.util.*
;
public
class
AnalysisFile
{
public
static
ProjectPom
analysisPom
(
Path
pomPath
){
ProjectPom
projectPom
=
new
ProjectPom
();
List
<
PomDependency
>
dependencies
=
new
ArrayList
<>();
Document
document
=
null
;
try
{
document
=
DocumentHelper
.
parseText
(
new
String
(
Files
.
readAllBytes
(
pomPath
)));
}
catch
(
DocumentException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
Element
rootElement
=
document
.
getRootElement
();
if
(
rootElement
.
element
(
"properties"
)!=
null
){
Element
dependencies1
=
rootElement
.
element
(
"properties"
);
for
(
Element
element:
dependencies1
.
elements
()){
Properties
properties
=
new
Properties
();
String
name
=
element
.
getName
();
String
stringValue
=
element
.
getStringValue
();
properties
.
setValue
(
stringValue
);
properties
.
setName
(
name
);
projectPom
.
getProperties
().
add
(
properties
);
}
}
projectPom
.
setModelVersion
(
rootElement
.
elementText
(
"modelVersion"
));
projectPom
.
setGroupId
(
rootElement
.
elementText
(
"groupId"
));
projectPom
.
setArtifactId
(
rootElement
.
elementText
(
"artifactId"
));
projectPom
.
setPackaging
(
rootElement
.
elementText
(
"packing"
));
projectPom
.
setVersion
(
rootElement
.
elementText
(
"version"
));
if
(
rootElement
.
elementText
(
"version"
)!=
null
){
projectPom
.
setVersion
(
rootElement
.
elementText
(
"version"
));
}
projectPom
.
setName
(
rootElement
.
elementText
(
"name"
));
projectPom
.
setDescription
(
rootElement
.
elementText
(
"description"
));
if
(
rootElement
.
element
(
"dependencies"
)!=
null
){
Element
dependencies1
=
rootElement
.
element
(
"dependencies"
);
List
<
Element
>
dependency
=
dependencies1
.
elements
(
"dependency"
);
for
(
Element
element:
dependency
){
PomDependency
pomDependency
=
new
PomDependency
();
pomDependency
.
setGroupId
(
element
.
elementText
(
"groupId"
));
pomDependency
.
setArtifactId
(
element
.
elementText
(
"artifactId"
));
if
(
element
.
elementText
(
"version"
)!=
null
){
pomDependency
.
setVersion
(
element
.
elementText
(
"version"
));
}
dependencies
.
add
(
pomDependency
);
}
}
if
(
rootElement
.
elements
(
"parent"
)!=
null
){
List
<
Element
>
parent
=
rootElement
.
elements
(
"parent"
);
for
(
Element
p:
parent
){
PomDependency
pomDependency
=
new
PomDependency
();
pomDependency
.
setGroupId
(
p
.
elementText
(
"groupId"
));
pomDependency
.
setArtifactId
(
p
.
elementText
(
"artifactId"
));
if
(
p
.
elementText
(
"version"
)!=
null
){
pomDependency
.
setVersion
(
p
.
elementText
(
"version"
));
}
dependencies
.
add
(
pomDependency
);
}
}
if
(
rootElement
.
element
(
"dependencyManagement"
)!=
null
){
Element
dependencies1
=
rootElement
.
element
(
"dependencyManagement"
);
Element
dependencies2
=
dependencies1
.
element
(
"dependencies"
);
List
<
Element
>
dependency
=
dependencies2
.
elements
(
"dependency"
);
for
(
Element
element:
dependency
){
PomDependency
pomDependency
=
new
PomDependency
();
pomDependency
.
setGroupId
(
element
.
elementText
(
"groupId"
));
pomDependency
.
setArtifactId
(
element
.
elementText
(
"artifactId"
));
if
(
element
.
elementText
(
"version"
)!=
null
){
pomDependency
.
setVersion
(
element
.
elementText
(
"version"
));
}
dependencies
.
add
(
pomDependency
);
}
}
projectPom
.
setDependencies
(
dependencies
);
return
projectPom
;
}
public
static
List
<
PomDependency
>
analysisGradle
(
Path
pomPath
)
{
List
<
String
>
strings
=
null
;
try
{
strings
=
Files
.
readAllLines
(
pomPath
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
List
<
PomDependency
>
dependencies
=
new
ArrayList
<>();
for
(
String
string
:
strings
)
{
if
(
string
.
indexOf
(
"compile"
)>
0
){
PomDependency
pomDependency
=
new
PomDependency
();
int
compile
=
string
.
indexOf
(
"compile"
);
int
i
=
compile
+
8
;
String
substring
=
string
.
substring
(
i
);
pomDependency
.
setGradle
(
substring
);
dependencies
.
add
(
pomDependency
);
}
}
return
dependencies
;
}
public
static
void
main
(
String
[]
args
)
{
Path
path
=
Paths
.
get
(
"/Users/mcj/IdeaProjects/inspect/tree.txt"
);
int
is
=
0
;
boolean
b1
=
path
.
toString
().
endsWith
(
""
);
HashMap
<
Integer
,
DepTree
>
map
=
new
HashMap
<>();
int
one
=
1
;
DepTree
depTree
=
new
DepTree
();
try
{
List
<
String
>
strings
=
Files
.
readAllLines
(
path
);
String
s1
=
strings
.
get
(
7
);
String
s2
=
s1
.
replaceAll
(
"\\[INFO] "
,
""
);
depTree
.
setDepName
(
s2
);
map
.
put
(
1
,
depTree
);
int
now
=
0
;
for
(
int
i
=
8
;
i
<=
strings
.
size
()-
7
;
i
++)
{
DepTree
depTree1
=
new
DepTree
();
String
s
=
strings
.
get
(
i
).
replaceAll
(
"\\[INFO] "
,
""
);
int
i1
=
s
.
indexOf
(
"-"
);
if
(
i1
==
one
){
depTree1
.
setDepName
(
s
);
depTree
.
getDepTreeList
().
add
(
depTree1
);
}
else
{
if
(
i1
>
now
){
depTree1
.
setDepName
(
s
);
map
.
get
(
i1
).
getDepTreeList
().
add
(
depTree1
);
}
else
{
depTree1
.
setDepName
(
s
);
map
.
get
(
i1
).
getDepTreeList
().
add
(
depTree1
);
}
}
map
.
put
(
i1
+
3
,
depTree1
);
now
=
i1
;
}
DepTreeAndReport
depTreeAndReport
=
new
DepTreeAndReport
();
depTreeAndReport
.
setId
(
"报告id"
);
depTreeAndReport
.
setDepTree
(
depTree
);
Object
o
=
JSONObject
.
toJSON
(
depTreeAndReport
);
System
.
out
.
println
(
o
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
String
a
=
"AAbaaa"
;
String
b
=
"cccccaaB"
;
boolean
aaB
=
a
.
equalsIgnoreCase
(
"aaB"
);
int
aaB1
=
b
.
indexOf
(
"aaB"
);
int
i
=
AnalysisFile
.
EditDistance
(
a
,
b
);
System
.
out
.
println
(
i
);
}
public
static
int
EditDistance
(
String
source
,
String
target
)
{
char
[]
sources
=
source
.
toCharArray
();
char
[]
targets
=
target
.
toCharArray
();
int
sourceLen
=
sources
.
length
;
int
targetLen
=
targets
.
length
;
int
[][]
d
=
new
int
[
sourceLen
+
1
][
targetLen
+
1
];
for
(
int
i
=
0
;
i
<=
sourceLen
;
i
++)
{
d
[
i
][
0
]
=
i
;
}
for
(
int
i
=
0
;
i
<=
targetLen
;
i
++)
{
d
[
0
][
i
]
=
i
;
}
for
(
int
i
=
1
;
i
<=
sourceLen
;
i
++)
{
for
(
int
j
=
1
;
j
<=
targetLen
;
j
++)
{
if
(
sources
[
i
-
1
]
==
targets
[
j
-
1
])
{
d
[
i
][
j
]
=
d
[
i
-
1
][
j
-
1
];
}
else
{
//插入
int
insert
=
d
[
i
][
j
-
1
]
+
1
;
//删除
int
delete
=
d
[
i
-
1
][
j
]
+
1
;
//替换
int
replace
=
d
[
i
-
1
][
j
-
1
]
+
1
;
d
[
i
][
j
]
=
Math
.
min
(
insert
,
delete
)
>
Math
.
min
(
delete
,
replace
)
?
Math
.
min
(
delete
,
replace
)
:
Math
.
min
(
insert
,
delete
);
}
}
}
return
d
[
sourceLen
][
targetLen
];
}
}
src/main/java/com/zjty/inspect/utils/FileUtil.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
utils
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.zjty.inspect.entity.Report
;
import
com.zjty.inspect.entity.VueDep
;
import
org.dom4j.Attribute
;
import
org.dom4j.Document
;
import
org.dom4j.DocumentException
;
import
org.dom4j.Element
;
import
org.dom4j.io.SAXReader
;
import
java.io.*
;
import
java.util.Enumeration
;
import
java.util.List
;
import
java.util.Properties
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipFile
;
public
class
FileUtil
{
static
int
BUFFER_SIZE
=
1024
;
/**
* zip解压
*
* @param srcFile zip源文件
* @param destDirPath 解压后的目标文件夹
* @throws RuntimeException 解压失败会抛出运行时异常
*/
public
static
void
unZip
(
File
srcFile
,
String
destDirPath
)
throws
RuntimeException
{
long
start
=
System
.
currentTimeMillis
();
// 判断源文件是否存在
if
(!
srcFile
.
exists
())
{
throw
new
RuntimeException
(
srcFile
.
getPath
()
+
"所指文件不存在"
);
}
// 开始解压
ZipFile
zipFile
=
null
;
try
{
zipFile
=
new
ZipFile
(
srcFile
);
Enumeration
<?>
entries
=
zipFile
.
entries
();
while
(
entries
.
hasMoreElements
())
{
ZipEntry
entry
=
(
ZipEntry
)
entries
.
nextElement
();
System
.
out
.
println
(
"解压"
+
entry
.
getName
());
// 如果是文件夹,就创建个文件夹
if
(
entry
.
isDirectory
())
{
String
dirPath
=
destDirPath
+
"/"
+
entry
.
getName
();
File
dir
=
new
File
(
dirPath
);
dir
.
mkdirs
();
}
else
{
// 如果是文件,就先创建一个文件,然后用io流把内容copy过去
File
targetFile
=
new
File
(
destDirPath
+
"/"
+
entry
.
getName
());
// 保证这个文件的父文件夹必须要存在
if
(!
targetFile
.
getParentFile
().
exists
())
{
targetFile
.
getParentFile
().
mkdirs
();
}
targetFile
.
createNewFile
();
// 将压缩文件内容写入到这个文件中
InputStream
is
=
zipFile
.
getInputStream
(
entry
);
FileOutputStream
fos
=
new
FileOutputStream
(
targetFile
);
int
len
;
byte
[]
buf
=
new
byte
[
BUFFER_SIZE
];
while
((
len
=
is
.
read
(
buf
))
!=
-
1
)
{
fos
.
write
(
buf
,
0
,
len
);
}
// 关流顺序,先打开的后关闭
fos
.
close
();
is
.
close
();
}
}
long
end
=
System
.
currentTimeMillis
();
System
.
out
.
println
(
"解压完成,耗时:"
+
(
end
-
start
)
+
" ms"
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"unzip error from ZipUtils"
,
e
);
}
finally
{
if
(
zipFile
!=
null
)
{
try
{
zipFile
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
}
private
static
void
recursiveFiles
(
String
path
)
{
// 创建 File对象
File
file
=
new
File
(
path
);
// 取 文件/文件夹
File
files
[]
=
file
.
listFiles
();
// 对象为空 直接返回
if
(
files
==
null
)
{
return
;
}
// 存在文件 遍历 判断
for
(
File
f
:
files
)
{
// 判断是否为 文件夹
if
(
f
.
isDirectory
())
{
// 为 文件夹继续遍历
recursiveFiles
(
f
.
getAbsolutePath
());
// 判断是否为 文件
}
else
if
(
f
.
isFile
())
{
if
(
"pom.xml"
.
equals
(
f
.
getName
()))
{
System
.
out
.
println
(
"解析pom"
);
}
System
.
out
.
println
(
f
.
getName
());
// System.out.println(f.getAbsolutePath());
}
else
{
System
.
out
.
print
(
"未知错误文件"
);
}
}
}
static
VueDep
parseJsonFile
(
String
path
)
{
try
{
File
file
=
new
File
(
path
);
VueDep
vueDep
;
vueDep
=
new
ObjectMapper
().
readValue
(
file
,
VueDep
.
class
);
return
vueDep
;
}
catch
(
Exception
e
)
{
return
null
;
}
}
public
static
void
main
(
String
[]
args
)
throws
IOException
{
File
file
=
new
File
(
"/Users/mcj/Downloads/package.json"
);
VueDep
vueDep
=
new
ObjectMapper
().
readValue
(
file
,
VueDep
.
class
);
System
.
out
.
println
(
vueDep
);
SAXReader
reader
=
new
SAXReader
();
Document
document
=
null
;
}
}
src/main/java/com/zjty/inspect/utils/GitLabUtil.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
utils
;
import
org.eclipse.jgit.api.CloneCommand
;
import
org.eclipse.jgit.api.Git
;
import
org.eclipse.jgit.api.errors.GitAPIException
;
import
java.io.File
;
/**
* @author Mcj
* @date 2020-02-13 16:01
*/
public
class
GitLabUtil
{
String
downLoadProject
(
String
path
)
{
//String REMOTE_URL = "https://git.yfzx.zjtys.com.cn:8888/912-system/monitor/adaptation-master.git";
CloneCommand
cloneCommand
=
Git
.
cloneRepository
();
cloneCommand
.
setURI
(
path
);
// cloneCommand.setCredentialsProvider(mcj);
cloneCommand
.
setDirectory
(
new
File
(
"/Users/mcj/IdeaProjects/test5"
));
try
{
cloneCommand
.
call
();
}
catch
(
GitAPIException
e
)
{
e
.
printStackTrace
();
}
// try {
// cloneCommand.setTransportConfigCallback(new TransportConfigCallback() {
// @Override
// public void configure(Transport transport) {
// }
// }).call();
// } catch (GitAPIException e) {
// e.printStackTrace();
// }
// System.out.println("Listing remote repository " + REMOTE_URL);
// try {
// refs = Git.lsRemoteRepository()
// .setHeads(true)
// .setTags(true)
// .setRemote(REMOTE_URL)
// .call();
// } catch (GitAPIException ex) {
// ex.printStackTrace();
// }
return
""
;
}
}
src/main/java/com/zjty/inspect/utils/Inspector.java
0 → 100644
浏览文件 @
4e7849c1
差异被折叠。
点击展开。
src/main/java/com/zjty/inspect/utils/KmpUtil.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
utils
;
/**
* @author Mcj
* @date 2020-02-25 13:35
*/
public
class
KmpUtil
{
/**
* 求出一个字符数组的next数组
* @param t 字符数组
* @return next数组
*/
public
static
int
[]
getNextArray
(
char
[]
t
)
{
int
[]
next
=
new
int
[
t
.
length
];
next
[
0
]
=
-
1
;
next
[
1
]
=
0
;
int
k
;
for
(
int
j
=
2
;
j
<
t
.
length
;
j
++)
{
k
=
next
[
j
-
1
];
while
(
k
!=-
1
)
{
if
(
t
[
j
-
1
]
==
t
[
k
])
{
next
[
j
]
=
k
+
1
;
break
;
}
else
{
k
=
next
[
k
];
}
next
[
j
]
=
0
;
//当k==-1而跳出循环时,next[j] = 0,否则next[j]会在break之前被赋值
}
}
return
next
;
}
/**
* 对主串s和模式串t进行KMP模式匹配
* @param s 主串
* @param t 模式串
* @return 若匹配成功,返回t在s中的位置(第一个相同字符对应的位置),若匹配失败,返回-1
*/
public
static
int
kmpMatch
(
String
s
,
String
t
){
char
[]
s_arr
=
s
.
toCharArray
();
char
[]
t_arr
=
t
.
toCharArray
();
int
[]
next
=
getNextArray
(
t_arr
);
int
i
=
0
,
j
=
0
;
while
(
i
<
s_arr
.
length
&&
j
<
t_arr
.
length
){
if
(
j
==
-
1
||
s_arr
[
i
]==
t_arr
[
j
]){
i
++;
j
++;
}
else
{
j
=
next
[
j
];
}
}
if
(
j
==
t_arr
.
length
)
{
return
i
-
j
;
}
else
{
return
-
1
;
}
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
kmpMatch
(
"abcabaabaabcacb"
,
"abaabcac"
));
}
}
src/main/java/com/zjty/inspect/utils/TimeUtil.java
0 → 100644
浏览文件 @
4e7849c1
package
com
.
zjty
.
inspect
.
utils
;
import
java.time.LocalDateTime
;
public
class
TimeUtil
{
public
static
String
getNowDate
(){
LocalDateTime
date
=
LocalDateTime
.
now
();
return
date
.
getHour
()
+
":"
+
date
.
getMinute
()
+
":"
+
date
.
getSecond
();
}
}
src/main/resources/application.properties
0 → 100644
浏览文件 @
4e7849c1
# 配置文件使用 默认使用 dev 环境
spring.profiles.active
=
dev
#spring.profiles.active=doc
#spring.profiles.active=prod
# 服务器相关配置
server.port
=
8079
# 日志文件相关配置
# logging.level.org.hibernate.sql=debug
logging.file.path
=
./log/master.log
#logging.file=./log/master.log
#spring.datasource.url=jdbc:mysql://localhost:3306/adapt?useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true&characterEncoding=utf-8
#spring.datasource.username=root
#spring.datasource.password=root
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
# spring-data-jpa 相关配置
# 指jpa对表生成的策略
spring.jpa.hibernate.ddl-auto
=
update
# 是否显示sql语句
spring.jpa.show-sql
=
false
# 格式化sql
#spring.jpa.properties.hibernate.format_sql=true
spring.jpa.open-in-view
=
true
# 验证框架是否对数据操作验证
spring.jpa.properties.javax.persistence.validation.mode
=
none
# spring-http-文件上传相关配置
spring.servlet.multipart.max-file-size
=
200MB
spring.servlet.multipart.max-request-size
=
200MB
#配置时间格式
spring.jacksondate-format
=
yyyy-MM-dd HH:mm:ss
spring.thymeleaf.cache
=
false
spring.mvc.static-path-pattern
=
/**
spring.resources.static-locations
=
classpath:/uploads/
#highgo
#highgo.driver=org.postgresql.Driver
#highgo.connectionType=postgresql
#highgo.dbName=template1
#driverweb=C:/Program Files/driver/geckodriver.exe
#testCaseExcelTable=C:/Users/admin/Desktop/test.xls
#createTxtPath=C:/
# mysql数据库配置
spring.datasource.driver-class-name
=
com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://192.168.1.249:3306/bservice?useSSL=false&serverTimezone=UTC&autoReconnect=true&characterEncoding=utf-8
spring.datasource.url
=
jdbc:mysql://localhost:3306/adaptation?useSSL=false&serverTimezone=UTC&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username
=
root
spring.datasource.password
=
root
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论