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 ...
随机推荐
- Server酱微信推送中的问题
1.写在URL的文字就是不在微信端显示 当时为了明显提示写了个这个:<--11111-->后来发现1111不能显示,去掉两边的<---->就可以了, 2.输出到微信端的文字不换 ...
- C_输入一个整数N,输出从0~N(算法思考)
1.for循环实现 #include <stdio.h> #include <time.h> clock_t start, stop; double duration; voi ...
- Java当中的IO一
1.IO操作的目标 什么是IO操作的目标? 输入: 从数据源当中读取数据 输出: 将数据写入到数据目的地当中 有数据进入到程序当中,这个过程就可以被叫做输入 流:即在数据源与程序之间建立的传输通道 2 ...
- 在页面上获取web项目信息
获取协议名称:request.getScheme() 获取域名:request.getServerName() 获取项目名称:request.getContextPath() 使用EL表达式获取项目名 ...
- 04_ switch 练习 _ 你及格了吗
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- [LeetCode] Most Common Word 最常见的单词
Given a paragraph and a list of banned words, return the most frequent word that is not in the list ...
- JavaScript Concurrency model and Event Loop 并发模型和事件循环机制
原文地址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop JavaScript 有一个基于 event loop 的 ...
- static和extern的用法小结
以前写程序是,基本不管static和extern,一个工程文件也只有一个c文件.今天尝试用多个文件来写,自然就涉及到这两个关键词的使用,自己查了些资料,并且做了些实验,总结如下. extern的用法 ...
- Web项目中手机注册短信验证码实现的全流程及代码
最近在做只能净化器的后台用户管理系统,需要使用手机号进行注册,找了许久才大致了解了手机验证码实现流程,今天在此和大家分享一下. 我们使用的是榛子云短信平台, 官网地址:http://smsow.zhe ...
- JDBC 利用反射 配置文件
import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.s ...