提交 ba4c2052 authored 作者: 马晨俊's avatar 马晨俊

更新项目结构(依赖,报告)

上级 5563a446
...@@ -29,13 +29,4 @@ public class Test { ...@@ -29,13 +29,4 @@ public class Test {
return ServerResponse.success(); return ServerResponse.success();
} }
@GetMapping("/testCollection")
public ServerResponse testCollection(){
Report report = new Report();
String[] array = {"aa","bb","cc"};
List<String> jarPath = Arrays.asList(array);
report.setJarPath(jarPath);
reportDao.save(report);
return ServerResponse.success();
}
} }
package com.zjty.adaptationmaster.adaptor.entity; package com.zjty.adaptationmaster.adaptor.entity;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.ProjectPom; import com.zjty.adaptationmaster.adaptor.entity.pomEntity.ProjectPom;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.Dependency;
import com.zjty.adaptationmaster.utils.Assessor; import com.zjty.adaptationmaster.utils.Assessor;
import com.zjty.adaptationmaster.utils.Inspector; import com.zjty.adaptationmaster.utils.Inspector;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -17,15 +18,13 @@ import java.util.List; ...@@ -17,15 +18,13 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
public class Report { public class Report {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; private Integer id;
private Language language;//语言 private Language language;//语言
private String framework;//架构 private String framework;//架构
private DatabaseType databaseType;//数据库类型 private DatabaseType databaseType;//数据库类型
private int fileNum; private int fileNum;
private long lineNum; private long lineNum;
private List<Dependency> dependencies;
@Transient @Transient
private ProjectPom projectPom; private ProjectPom projectPom;
......
package com.zjty.adaptationmaster.adaptor.entity;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.Dependency;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.List;
/**
* 返回
* @author Mcj
* @date 2020-01-03 10:33
*/
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ReportEntity {
@Id
@GeneratedValue
private Integer id;
private Report.Language language;//语言
private String framework;//架构
private Report.DatabaseType databaseType;//数据库类型
private int fileNum;
private long lineNum;
private Report.Separate isSeparate;//前后端是否分离
private String compileFilePath;//项目编译文件,如果是maven项目,用maven编译,那么就是pom.xml
public Report.DependenceManagement dependenceManagement;//版本管理方式
private String packagePath;
public enum DependenceManagement{
MAVEN,GRADLE,ANT
}
public enum Separate{
WHOLE,SEPARATE
}
public enum DatabaseType{
MYSQL,ORACLE,SQLSERVER,POSTGRE
}
public enum Language{
JAVA,PYTHON,CPP,JSP,ASP,ONLYVIEW
}
}
...@@ -8,12 +8,10 @@ import javax.persistence.Entity; ...@@ -8,12 +8,10 @@ import javax.persistence.Entity;
import javax.persistence.Id; import javax.persistence.Id;
import java.util.List; import java.util.List;
@Entity
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public class ProjectPom { public class ProjectPom {
@Id
private int id;
//private Parent parent; //private Parent parent;
private String modelVersion; private String modelVersion;
private String groupId; private String groupId;
...@@ -38,7 +36,7 @@ public class ProjectPom { ...@@ -38,7 +36,7 @@ public class ProjectPom {
//private List<Module> modules;//模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径 //private List<Module> modules;//模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径
//private List<Repository> repositories;//发现依赖和扩展的远程仓库列表 //private List<Repository> repositories;//发现依赖和扩展的远程仓库列表
//private List<PluginRepository> pluginRepositiries;//发现插件的远程仓库列表,这些插件用于构建和报表 //private List<PluginRepository> pluginRepositiries;//发现插件的远程仓库列表,这些插件用于构建和报表
//private List<Dependency> dependencies; private List<Dependency> dependencies;
//private Repoting repoting;//该元素描述使用报表插件产生报表的规范。当用户执行“mvn site”,这些报表就会运行。 在页面导航栏能看到所有报表的链接 //private Repoting repoting;//该元素描述使用报表插件产生报表的规范。当用户执行“mvn site”,这些报表就会运行。 在页面导航栏能看到所有报表的链接
//private DependencyManagement dependencyManagement;//继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID匹配到这里的依赖,并使用这里的依赖信息 //private DependencyManagement dependencyManagement;//继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID匹配到这里的依赖,并使用这里的依赖信息
//private DistributionManagement distributionManagement;//项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库 //private DistributionManagement distributionManagement;//项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库
......
...@@ -62,5 +62,5 @@ public class Dependency { ...@@ -62,5 +62,5 @@ public class Dependency {
//private List<Dependency> parentDependencies;// //private List<Dependency> parentDependencies;//
private int pomId; private int reportId;
} }
package com.zjty.adaptationmaster.adaptor.repository; package com.zjty.adaptationmaster.adaptor.repository;
import com.zjty.adaptationmaster.adaptor.entity.Dependency; import com.zjty.adaptationmaster.adaptor.entity.Dependency;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
......
package com.zjty.adaptationmaster.adaptor.repository;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.Dependency;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PomDependencyDao extends JpaRepository<Dependency, Integer> {
}
package com.zjty.adaptationmaster.adaptor.repository; package com.zjty.adaptationmaster.adaptor.repository;
import com.zjty.adaptationmaster.adaptor.entity.Report; import com.zjty.adaptationmaster.adaptor.entity.Report;
import com.zjty.adaptationmaster.adaptor.entity.ReportEntity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface ReportDao extends JpaRepository<Report, Integer>, JpaSpecificationExecutor { public interface ReportDao extends JpaRepository<ReportEntity, Integer>, JpaSpecificationExecutor {
} }
...@@ -2,6 +2,10 @@ package com.zjty.adaptationmaster.adaptor.service.Impl; ...@@ -2,6 +2,10 @@ package com.zjty.adaptationmaster.adaptor.service.Impl;
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.ReportEntity;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.Dependency;
import com.zjty.adaptationmaster.adaptor.repository.DependencyDao;
import com.zjty.adaptationmaster.adaptor.repository.PomDependencyDao;
import com.zjty.adaptationmaster.adaptor.repository.ProjectDao; import com.zjty.adaptationmaster.adaptor.repository.ProjectDao;
import com.zjty.adaptationmaster.adaptor.repository.ReportDao; import com.zjty.adaptationmaster.adaptor.repository.ReportDao;
import com.zjty.adaptationmaster.adaptor.service.InspectService; import com.zjty.adaptationmaster.adaptor.service.InspectService;
...@@ -14,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -14,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Service
...@@ -23,6 +28,9 @@ public class InspectServiceImpl implements InspectService { ...@@ -23,6 +28,9 @@ public class InspectServiceImpl implements InspectService {
@Autowired @Autowired
private ReportDao reportDao; private ReportDao reportDao;
@Autowired
private PomDependencyDao pomDependencyDao;
@Transactional @Transactional
@Override @Override
...@@ -38,12 +46,30 @@ public class InspectServiceImpl implements InspectService { ...@@ -38,12 +46,30 @@ public class InspectServiceImpl implements InspectService {
//suffixLanguageMapping.put("html",Report.Language.ONLYVIEW); //suffixLanguageMapping.put("html",Report.Language.ONLYVIEW);
LoggerFactory.getLogger(getClass()).info("这里rulelist为空,需要设置"); LoggerFactory.getLogger(getClass()).info("这里rulelist为空,需要设置");
Report report = new Inspector(project, suffixLanguageMapping, new ArrayList<>()).inspect(); Report report = new Inspector(project, suffixLanguageMapping, new ArrayList<>()).inspect();
ReportEntity reportEntity = new ReportEntity();
reportEntity.setCompileFilePath(report.getCompileFilePath());
reportEntity.setDatabaseType(report.getDatabaseType());
reportEntity.setDependenceManagement(report.getDependenceManagement());
reportEntity.setFileNum(report.getFileNum());
reportEntity.setFramework(report.getFramework());
reportEntity.setIsSeparate(report.getIsSeparate());
reportEntity.setLanguage(report.getLanguage());
reportEntity.setPackagePath(report.getPackagePath());
List<Dependency> dependencies = report.getDependencies();
if(report.getPackagePath() == null){ if(report.getPackagePath() == null){
report.setPackagePath(project.getCodeUrl()); report.setPackagePath(project.getCodeUrl());
} }
reportDao.save(report);
Project one = projectDao.getOne(project.getId()); Project one = projectDao.getOne(project.getId());
ReportEntity reportEntitySave = reportDao.save(reportEntity);
for (Dependency dependency : dependencies) {
dependency.setReportId(reportEntitySave.getId());
}
one.setReport(report); one.setReport(report);
report.setId(reportEntitySave.getId());
pomDependencyDao.saveAll(dependencies);
return ServerResponse.success(report); return ServerResponse.success(report);
}else{ }else{
return ServerResponse.error("未上传源代码"); return ServerResponse.error("未上传源代码");
......
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.Rule;
...@@ -28,48 +27,11 @@ import java.util.*; ...@@ -28,48 +27,11 @@ import java.util.*;
/** /**
* 项目体检,根据既定特征值, * 项目体检,根据既定特征值,
* 扫描、统计、分析项目特征, * 扫描、统计、分析项目特征,
* 生成报告 * 生成报告VO
* *
*/ */
public class Inspector { public class Inspector {
public static void main(String[] args) {
System.out.println(LocalDateTime.now());
//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<>();
suffixLanguageMapping.put("java",Report.Language.JAVA);
suffixLanguageMapping.put("cpp",Report.Language.CPP);
suffixLanguageMapping.put("py",Report.Language.PYTHON);
suffixLanguageMapping.put("jsp",Report.Language.JSP);
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"));
ruleList.add(new Rule("WebOffice",""));
ruleList.add(new Rule("pdfobject.min.js",""));
ruleList.add(new Rule("pdfobject.js",""));
ruleList.add(new Rule("PDFJS.getDocument",""));
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;
private Report report; private Report report;
...@@ -223,7 +185,13 @@ public class Inspector { ...@@ -223,7 +185,13 @@ public class Inspector {
if(path.getFileName().endsWith("pom.xml")){ if(path.getFileName().endsWith("pom.xml")){
report.setDependenceManagement(Report.DependenceManagement.MAVEN); report.setDependenceManagement(Report.DependenceManagement.MAVEN);
report.setCompileFilePath(path.toString()); report.setCompileFilePath(path.toString());
report.setProjectPom(AnalysisPom.analysis(path)); //解析pom文件
ProjectPom analysis = AnalysisPom.analysis(path);
//设置依赖
List<Dependency> dependencies = analysis.getDependencies();
report.setDependencies(dependencies);
SAXReader reader = new SAXReader(); SAXReader reader = new SAXReader();
Document document = null; Document document = null;
try { try {
...@@ -264,7 +232,7 @@ public class Inspector { ...@@ -264,7 +232,7 @@ public class Inspector {
try { try {
properties1.load(new FileInputStream(file)); properties1.load(new FileInputStream(file));
String driver = properties1.getProperty("spring.datasource.driver-class-name"); String driver = properties1.getProperty("spring.datasource.driver-class-name");
if (driver != null) datasourceDriver = driver; if (driver != null){ datasourceDriver = driver;}
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论