记录瞬间

  1. import org.dom4j.Document;
  2. import org.dom4j.DocumentException;
  3. import org.dom4j.Element;
  4. import org.dom4j.io.SAXReader;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7.  
  8. import java.io.*;
  9. import java.util.ArrayList;
  10. import java.util.Iterator;
  11. import java.util.List;
  12.  
  13. /**
  14. * @author
  15. * @version MavenUtil,
  16. */
  17. public class MavenUtil {
  18. private static final Logger LOGGER = LoggerFactory.getLogger(MavenUtil.class);
  19. private final String WEB_INF_PATH = "./";//MavenUtil.class.getClassLoader().getResource("../").getPath();
  20. private final String COMPILE_PATH = WEB_INF_PATH + "sourceCode/";
  21. private final String EMBEDDED_MAVEN_PATH = WEB_INF_PATH + "maven/";
  22. private final List<String> fileList = new ArrayList<String>();
  23.  
  24. public void maven(String path) {
  25. List<String> getPoms = findPomFile(path);
  26. boolean flag = isJacoco(getPoms);
  27. List<String> fileList = getModuleList(getPoms);
  28. for (String pom: fileList) {
  29. ProcessBuilder pb = new ProcessBuilder();
  30. //构建命令
  31. if (System.getProperty("os.name").contains("Windows")) {
  32. if (flag) {
  33. pb.command("cmd", "/c", "mvn", "clean", "test", "compile", "-f", pom);
  34. } else {
  35. pb.command("cmd", "/c", "mvn", "-DskipTests=true", "clean", "compile", "-f",
  36. pom);
  37. }
  38.  
  39. } else if (System.getProperty("os.name").contains("Linux")) {
  40. if (flag) {
  41. pb.command("mvn", "clean", "test", "compile", "-f", pom);
  42. } else {
  43. pb.command("mvn", "-DskipTests=true", "clean", "compile", "-f", pom);
  44. }
  45. } else {
  46. LOGGER.info("Unknown System..." + System.getProperty("os.name"));
  47. }
  48. try {
  49. //执行命令
  50. Process process = pb.start();
  51. InputStream inputStream = process.getInputStream();
  52. byte[] buffer = new byte[1024];
  53. int readSize;
  54. while ((readSize = inputStream.read(buffer)) > 0) {
  55. System.out.write(buffer, 0, readSize);
  56. }
  57. } catch (IOException ioe) {
  58. ioe.printStackTrace();
  59. }
  60. }
  61. }
  62.  
  63. /**
  64. * 查找所有pom文件
  65. * @param path
  66. * @return
  67. */
  68. private List<String> findPomFile(String path){
  69. File file = new File(path);
  70.  
  71. if (file.exists()) {
  72. File[] files = file.listFiles();
  73. if (null == files || files.length == 0) {
  74. System.out.println("文件夹是空的!");
  75. return fileList;
  76. } else {
  77. for (File file2 : files) {
  78. if (file2.isDirectory() && ! file2.getName().contains(".git")
  79. && ! file2.getName().contains("src")) {
  80. // 此处是文件夹
  81. findPomFile(file2.getAbsolutePath());
  82. } else {
  83. if (file2.getName().contains("pom.xml")) {
  84. fileList.add(file2.getAbsolutePath());
  85. System.out.println("文件:" + file2.getAbsolutePath());
  86. }
  87. }
  88. }
  89. }
  90. } else {
  91. System.out.println("文件不存在!");
  92. }
  93. return fileList;
  94. }
  95.  
  96. /**
  97. * 判断是否存在多模块,如果存在将会去除存在模块的pom文件
  98. * @param fromPoms
  99. * @return
  100. */
  101. private List<String> getModuleList(List<String> fromPoms) {
  102. int count = fromPoms.size();
  103. for (String getPom: fromPoms) {
  104. final SAXReader reader = new SAXReader();
  105. Document document = null;
  106. try {
  107. document = reader.read(getPom);
  108. final List modules = document.getRootElement().element("modules").elements();
  109. if (modules != null) {
  110. for (final Object module : modules) {
  111. final String moduleName = ((Element) module).getText();
  112. Iterator<String> iterator = fromPoms.iterator();
  113. while (iterator.hasNext()) {
  114. String pom = iterator.next();
  115. if (pom.contains(moduleName)) {
  116. iterator.remove();
  117. count--;
  118. }
  119. }
  120. }
  121. }
  122. if (count <= 1){
  123. break;
  124. }
  125. } catch (final DocumentException e) {
  126. e.printStackTrace();
  127. } catch (NullPointerException e) {
  128. System.out.print(getPom);
  129. }
  130. }
  131. return fromPoms;
  132. }
  133.  
  134. /**
  135. * 读取文件,判断读取的行中是否存在jacoco字符串
  136. * @param poms
  137. * @return
  138. */
  139. private boolean isJacoco(List<String> poms){
  140. boolean flag = false;
  141. BufferedReader reader = null;
  142. try {
  143. for (String getPom: poms){
  144. File pomFile = new File(getPom);
  145. reader = new BufferedReader(new FileReader(pomFile));
  146. String tempString = null;
  147. while ((tempString = reader.readLine()) != null) {
  148. if (tempString.contains("org.jacoco")) {
  149. flag = true;
  150. break;
  151. }
  152. }
  153. reader.close();
  154. if (flag) { break; }
  155. }
  156. } catch (IOException e) {
  157. e.printStackTrace();
  158. } finally {
  159. if (reader != null) {
  160. try {
  161. reader.close();
  162. } catch (IOException e1) {
  163. }
  164. }
  165. }
  166. return flag;
  167. }
  168. /**
  169. * 修改权限(这里粗犷的修改为777,如有精细化的权限控制,自己调整一下)
  170. * 因为一些原因,虽然线上默认的执行用户是root,并且权限为rwx,依然会报权限不足的错误
  171. * 如果有大神指导原因请指点一二
  172. * @throws Exception
  173. */
  174. public void afterPropertiesSet() throws Exception {
  175. //修改maven目录权限
  176. Process chmodMaven = new ProcessBuilder("chmod", "-R", "777", EMBEDDED_MAVEN_PATH).start();
  177. //等待完成
  178. chmodMaven.waitFor();
  179. LOGGER.info("修改权限完成:{}", EMBEDDED_MAVEN_PATH);
  180.  
  181. //修改编译目录权限
  182. Process chmodCompile = new ProcessBuilder("chmod", "-R", "777", COMPILE_PATH).start();
  183. chmodCompile.waitFor();
  184. LOGGER.info("修改权限完成:{}", COMPILE_PATH);
  185. }
  1. /**
    * 递归查找文件
    * @param baseDirName 查找的文件夹路径
    * @param targetFileName 需要查找的文件名
    * @param fileList 查找到的文件集合
    */
    public static void findFiles(String baseDirName, String targetFileName, List<File> fileList) {
  2.  
  3. File baseDir = new File(baseDirName); // 创建一个File对象
    if (!baseDir.exists() || !baseDir.isDirectory()) { // 判断目录是否存在
    System.out.println("文件查找失败:" + baseDirName + "不是一个目录!");
    }
    String tempName = null;
  4.  
  5. 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());
    }
    }
    }
    }
  1. }

主要实现了,对maven项目的编译操作。区分了Windows和Linux两个下同的不同操作。

可以考虑不去读取pom文件,而是直接到target目录下遍历带exec的文件,

这样操作可以直接定位到指定的模块,使得覆盖率信息圈定在摸一个具体模块下。

===============================

java操作Maven的更多相关文章

  1. java操作redis之jedis篇

    首先来简单介绍一下jedis,其实一句话就可以概括的,就是java操作redis的一种api.我们知道redis提供了基本上所有常用编程语言的clients,大家可以到http://redis.io/ ...

  2. Elasticsearch笔记五之java操作es

    Java操作es集群步骤1:配置集群对象信息:2:创建客户端:3:查看集群信息 1:集群名称 默认集群名为elasticsearch,如果集群名称和指定的不一致则在使用节点资源时会报错. 2:嗅探功能 ...

  3. java 操作elasticsearch之搭建测试项目环境

    在创建项目之前请确认maven是否安装好,在此我是以环境都搭建好的情况下进行示范,现在以eclipse开发工具为例,具体操作如下: 1.创建maven项目 File - new -other 2.在p ...

  4. Java操作队列

    Java操作队列 常见的几种模式:   1 简单队列simple 模型:(p + 队列 + c) P:生产者producer,将消息发送到队列 红色:消息队列 C:消费者consumer,从队列消费消 ...

  5. Java操作memcache

    [本文出自天外归云的博客园] 准备工作 Java操作memcache需要spymemcache类库的支持,在Eclipse中修改maven项目的pom.xml文件—— 添加仓库: <reposi ...

  6. Java操作Sqoop对象

    Windows下使用Eclipse工具操作Sqoop1.4.6对象 Sqoop是用来在关系型数据库与Hadoop之间进行数据的导入导出,Windows下使用Eclipse工具操作时,需要先搭建好Had ...

  7. JEECG(二) JEECG框架下调用webservice java springmvc maven 调用 webservice

    JEECG系列教程二 如何在JEECG框架下使用webservice 本文所使用的webservice是c#开发的 其实无论是什么语言开发的webservice用法都一样 java springmvc ...

  8. 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 ...

  9. java操作redis学习(一):安装及连接

    文章参考自:http://www.cnblogs.com/edisonfeng/p/3571870.html,在此基础上进行了修改. 一.下载安装Redis redis官网显示暂时不支持Windows ...

随机推荐

  1. 基于IPv6的数据包分析

    1.首先我们来构建拓扑:如下所示 2.对各个路由器进行配置使得网络ping通:命令如下 a)配置各路由器接口的IPv6地址,可由上图注释配置 b)配置各路由器的静态路由(此处举例R4) (global ...

  2. 【mybatis】-- springboot整合mybatis

    1.添加依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>m ...

  3. JAVA基础复习与总结<二>构造方法_static关键字_final关键字

    构造方法详解 构造器也叫做构造方法(constructor),用于对象的初始化. class Person2 { String name; int age; public Person2(String ...

  4. Ubuntu安装并使用sogou输入法

    1.下载搜狗输入法的安装包 下载地址为:http://pinyin.sogou.com/linux/ ,如下图,要选择与自己系统位数一致的安装包,我的系统是64位,所以我下载64位的安装包 2.按键C ...

  5. North American Invitational Programming Contest 2018

    A. Cut it Out! 枚举第一刀,那么之后每切一刀都会将原问题划分成两个子问题. 考虑DP,设$f[l][r]$表示$l$点顺时针一直到$r$点还未切割的最小代价,预处理出每条边的代价转移即可 ...

  6. 【Tomcat】Tomcat配置JVM参数步骤

    这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.您可以选择自己的需要选择不同的操作系统和对应的JDK ...

  7. Codechef July Challenge 2018 : Picking Fruit for Chefs

    传送门 好久没写题解了,就过来水两篇. 对于每一个人,考虑一个序列$A$,$A_I$表示当k取值为 i 时的答案. 如果说有两个人,我们可以把$(A+B)^k$二项式展开,这样就发现把两个人合并起来的 ...

  8. Vue使用vue-echarts图表

    vue-echarts和echarts的区别: vue-echarts是封装后的vue插件, 基于 ECharts v4.0.1+ 开发,依赖 Vue.js v2.2.6+,功能一样的只是把它封装成v ...

  9. CSS3_线性渐变_径向渐变----背景

    渐变的本质: 绘制一张背景图片,所以使用 background 或者 background-image background 的诸多属性,渐变都是可以使用的(repeat,position) 百分比: ...

  10. (91)Wangdao.com第二十四天_Mutation Observer API 突变监视器

    Mutation Observer API 突变监视接口 用来监视 DOM 变动. DOM 的任何变动,比如节点的增减.属性的变动.文本内容的变动,这个 API 都可以得到通知 概念上,它很接近事件, ...