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 ...
随机推荐
- 基于IPv6的数据包分析
1.首先我们来构建拓扑:如下所示 2.对各个路由器进行配置使得网络ping通:命令如下 a)配置各路由器接口的IPv6地址,可由上图注释配置 b)配置各路由器的静态路由(此处举例R4) (global ...
- 【mybatis】-- springboot整合mybatis
1.添加依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>m ...
- JAVA基础复习与总结<二>构造方法_static关键字_final关键字
构造方法详解 构造器也叫做构造方法(constructor),用于对象的初始化. class Person2 { String name; int age; public Person2(String ...
- Ubuntu安装并使用sogou输入法
1.下载搜狗输入法的安装包 下载地址为:http://pinyin.sogou.com/linux/ ,如下图,要选择与自己系统位数一致的安装包,我的系统是64位,所以我下载64位的安装包 2.按键C ...
- North American Invitational Programming Contest 2018
A. Cut it Out! 枚举第一刀,那么之后每切一刀都会将原问题划分成两个子问题. 考虑DP,设$f[l][r]$表示$l$点顺时针一直到$r$点还未切割的最小代价,预处理出每条边的代价转移即可 ...
- 【Tomcat】Tomcat配置JVM参数步骤
这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.您可以选择自己的需要选择不同的操作系统和对应的JDK ...
- Codechef July Challenge 2018 : Picking Fruit for Chefs
传送门 好久没写题解了,就过来水两篇. 对于每一个人,考虑一个序列$A$,$A_I$表示当k取值为 i 时的答案. 如果说有两个人,我们可以把$(A+B)^k$二项式展开,这样就发现把两个人合并起来的 ...
- Vue使用vue-echarts图表
vue-echarts和echarts的区别: vue-echarts是封装后的vue插件, 基于 ECharts v4.0.1+ 开发,依赖 Vue.js v2.2.6+,功能一样的只是把它封装成v ...
- CSS3_线性渐变_径向渐变----背景
渐变的本质: 绘制一张背景图片,所以使用 background 或者 background-image background 的诸多属性,渐变都是可以使用的(repeat,position) 百分比: ...
- (91)Wangdao.com第二十四天_Mutation Observer API 突变监视器
Mutation Observer API 突变监视接口 用来监视 DOM 变动. DOM 的任何变动,比如节点的增减.属性的变动.文本内容的变动,这个 API 都可以得到通知 概念上,它很接近事件, ...