java操作Maven
记录瞬间
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; /**
* @author
* @version MavenUtil,
*/
public class MavenUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(MavenUtil.class);
private final String WEB_INF_PATH = "./";//MavenUtil.class.getClassLoader().getResource("../").getPath();
private final String COMPILE_PATH = WEB_INF_PATH + "sourceCode/";
private final String EMBEDDED_MAVEN_PATH = WEB_INF_PATH + "maven/";
private final List<String> fileList = new ArrayList<String>(); public void maven(String path) {
List<String> getPoms = findPomFile(path);
boolean flag = isJacoco(getPoms);
List<String> fileList = getModuleList(getPoms);
for (String pom: fileList) {
ProcessBuilder pb = new ProcessBuilder();
//构建命令
if (System.getProperty("os.name").contains("Windows")) {
if (flag) {
pb.command("cmd", "/c", "mvn", "clean", "test", "compile", "-f", pom);
} else {
pb.command("cmd", "/c", "mvn", "-DskipTests=true", "clean", "compile", "-f",
pom);
} } else if (System.getProperty("os.name").contains("Linux")) {
if (flag) {
pb.command("mvn", "clean", "test", "compile", "-f", pom);
} else {
pb.command("mvn", "-DskipTests=true", "clean", "compile", "-f", pom);
}
} else {
LOGGER.info("Unknown System..." + System.getProperty("os.name"));
}
try {
//执行命令
Process process = pb.start();
InputStream inputStream = process.getInputStream();
byte[] buffer = new byte[1024];
int readSize;
while ((readSize = inputStream.read(buffer)) > 0) {
System.out.write(buffer, 0, readSize);
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
} /**
* 查找所有pom文件
* @param path
* @return
*/
private List<String> findPomFile(String path){
File file = new File(path); if (file.exists()) {
File[] files = file.listFiles();
if (null == files || files.length == 0) {
System.out.println("文件夹是空的!");
return fileList;
} else {
for (File file2 : files) {
if (file2.isDirectory() && ! file2.getName().contains(".git")
&& ! file2.getName().contains("src")) {
// 此处是文件夹
findPomFile(file2.getAbsolutePath());
} else {
if (file2.getName().contains("pom.xml")) {
fileList.add(file2.getAbsolutePath());
System.out.println("文件:" + file2.getAbsolutePath());
}
}
}
}
} else {
System.out.println("文件不存在!");
}
return fileList;
} /**
* 判断是否存在多模块,如果存在将会去除存在模块的pom文件
* @param fromPoms
* @return
*/
private List<String> getModuleList(List<String> fromPoms) {
int count = fromPoms.size();
for (String getPom: fromPoms) {
final SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(getPom);
final List modules = document.getRootElement().element("modules").elements();
if (modules != null) {
for (final Object module : modules) {
final String moduleName = ((Element) module).getText();
Iterator<String> iterator = fromPoms.iterator();
while (iterator.hasNext()) {
String pom = iterator.next();
if (pom.contains(moduleName)) {
iterator.remove();
count--;
}
}
}
}
if (count <= 1){
break;
}
} catch (final DocumentException e) {
e.printStackTrace();
} catch (NullPointerException e) {
System.out.print(getPom);
}
}
return fromPoms;
} /**
* 读取文件,判断读取的行中是否存在jacoco字符串
* @param poms
* @return
*/
private boolean isJacoco(List<String> poms){
boolean flag = false;
BufferedReader reader = null;
try {
for (String getPom: poms){
File pomFile = new File(getPom);
reader = new BufferedReader(new FileReader(pomFile));
String tempString = null;
while ((tempString = reader.readLine()) != null) {
if (tempString.contains("org.jacoco")) {
flag = true;
break;
}
}
reader.close();
if (flag) { break; }
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
return flag;
}
/**
* 修改权限(这里粗犷的修改为777,如有精细化的权限控制,自己调整一下)
* 因为一些原因,虽然线上默认的执行用户是root,并且权限为rwx,依然会报权限不足的错误
* 如果有大神指导原因请指点一二
* @throws Exception
*/
public void afterPropertiesSet() throws Exception {
//修改maven目录权限
Process chmodMaven = new ProcessBuilder("chmod", "-R", "777", EMBEDDED_MAVEN_PATH).start();
//等待完成
chmodMaven.waitFor();
LOGGER.info("修改权限完成:{}", EMBEDDED_MAVEN_PATH); //修改编译目录权限
Process chmodCompile = new ProcessBuilder("chmod", "-R", "777", COMPILE_PATH).start();
chmodCompile.waitFor();
LOGGER.info("修改权限完成:{}", COMPILE_PATH);
}
/**
* 递归查找文件
* @param baseDirName 查找的文件夹路径
* @param targetFileName 需要查找的文件名
* @param fileList 查找到的文件集合
*/
public static void findFiles(String baseDirName, String targetFileName, List<File> fileList) { File baseDir = new File(baseDirName); // 创建一个File对象
if (!baseDir.exists() || !baseDir.isDirectory()) { // 判断目录是否存在
System.out.println("文件查找失败:" + baseDirName + "不是一个目录!");
}
String tempName = null; File tempFile;
File[] files = baseDir.listFiles();
if ( files.length == 0 ) {//该文件夹下没有文件,为空文件夹
System.out.println("为空文件夹");
}
for (int i = 0; i < files.length; i++) {
tempFile = files[i];
if ( tempFile.isDirectory() ) {
findFiles(tempFile.getAbsolutePath(), targetFileName, fileList);
} else if ( tempFile.isFile() ) {
tempName = tempFile.getName();
if ( tempName.equals(targetFileName) ) {
System.out.println(tempFile.getAbsoluteFile().toString());
fileList.add(tempFile.getAbsoluteFile());
}
}
}
}
}
主要实现了,对maven项目的编译操作。区分了Windows和Linux两个下同的不同操作。
可以考虑不去读取pom文件,而是直接到target目录下遍历带exec的文件,
这样操作可以直接定位到指定的模块,使得覆盖率信息圈定在摸一个具体模块下。
===============================
java操作Maven的更多相关文章
- java操作redis之jedis篇
首先来简单介绍一下jedis,其实一句话就可以概括的,就是java操作redis的一种api.我们知道redis提供了基本上所有常用编程语言的clients,大家可以到http://redis.io/ ...
- Elasticsearch笔记五之java操作es
Java操作es集群步骤1:配置集群对象信息:2:创建客户端:3:查看集群信息 1:集群名称 默认集群名为elasticsearch,如果集群名称和指定的不一致则在使用节点资源时会报错. 2:嗅探功能 ...
- java 操作elasticsearch之搭建测试项目环境
在创建项目之前请确认maven是否安装好,在此我是以环境都搭建好的情况下进行示范,现在以eclipse开发工具为例,具体操作如下: 1.创建maven项目 File - new -other 2.在p ...
- Java操作队列
Java操作队列 常见的几种模式: 1 简单队列simple 模型:(p + 队列 + c) P:生产者producer,将消息发送到队列 红色:消息队列 C:消费者consumer,从队列消费消 ...
- Java操作memcache
[本文出自天外归云的博客园] 准备工作 Java操作memcache需要spymemcache类库的支持,在Eclipse中修改maven项目的pom.xml文件—— 添加仓库: <reposi ...
- Java操作Sqoop对象
Windows下使用Eclipse工具操作Sqoop1.4.6对象 Sqoop是用来在关系型数据库与Hadoop之间进行数据的导入导出,Windows下使用Eclipse工具操作时,需要先搭建好Had ...
- JEECG(二) JEECG框架下调用webservice java springmvc maven 调用 webservice
JEECG系列教程二 如何在JEECG框架下使用webservice 本文所使用的webservice是c#开发的 其实无论是什么语言开发的webservice用法都一样 java springmvc ...
- spark集群配置以及java操作spark小demo
spark 安装 配置 使用java来操作spark spark 安装 tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz rm spark-2.4.0-bin-hadoo ...
- java操作redis学习(一):安装及连接
文章参考自:http://www.cnblogs.com/edisonfeng/p/3571870.html,在此基础上进行了修改. 一.下载安装Redis redis官网显示暂时不支持Windows ...
随机推荐
- 对屏幕的理解---分辨率,dpi,ppi,屏幕尺寸,像素 等
1. 名词理解 屏幕尺寸(screen size) 屏幕尺寸(screen size),是屏幕的对角线长度,一般讲的大小单位都是英寸. DPI (dots per inch) dpi 是(英文Dots ...
- hdu4791-Alice's Print Service
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4791 题目解释:给你一组数据s1,p1,s2,p2...sn,pn,一个数字q,问你当要打印q张资料时 ...
- 2018-2019-1 20189201 《LInux内核原理与分析》第七周作业
我的愿望是 好好学习Linux 一.书本第六章知识总结[进程的描述和进程的创建] 基础知识1 操作系统内核实现操作系统的三大管理功能,即进程管理功能,内存管理和文件系统.对应的三个抽象的概念是进程,虚 ...
- .Net Core WebAPI 搭建
.Net Core WebAPI 搭建 1.创建项目 使用开发工具为 Visual Studio 2017 2.创建 Controller 实体类 public class Book { public ...
- Nginx实现URL重写
本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL. 1.准备工作. 结合本文场景,需要安装Nginx. 1.1 关于Linux系统安装Nginx可以参考我的文章---(传送 ...
- 输入,输出与Mad Libs游戏
name1=input('请输入一个名字') name2=input('请输入一个名字') car=input('请输入一种车子') print('饥饿的{}看到{}穿着三级甲骑着{}下山'.form ...
- 04_ switch 练习 _ 你及格了吗
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- BOM 浏览器对象模型_不超过 4 KB 的 document.cookie 对象
注意: 客户端储存应该使用 Web storage API 和 IndexedDB,不推荐使用 Cookie document.cookie 对象 是服务器保存在浏览器的一小段文本信息 用于读写当前网 ...
- ubuntu16.04 anaconda的安装和卸载
第一次安装: 1.直接从官网下载了anaconda安装包,然后bash ...sh安装. 2.过程中主要需要选择安装路径,为了把安装的软件都放在一起,我新建了一个install_software在系统 ...
- 数据结构-堆 Java实现
数据结构-堆 Java实现. 实现堆自动增长 /** * 数据结构-堆. 自动增长 * */ public class Heap<T extends Comparable> { priva ...