`
uule
  • 浏览: 6349992 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

AntExecutor 组装执行【本地命令】

 
阅读更多

1、组装生成ant 打包、发布命令

 

String[] cmd = AntExecutor.generateCmd(project.getLocation() + File.separator + "build.xml", "jar", null);
//String[] cmd = AntExecutor.generateCmd(project.getLocation() + File.separator + "build.xml", "deploy", null);
detail.append(Arrays.toString(cmd)).append("\n");
detail.append(AntExecutor.execute(cmd).replaceAll("\n", "\n    "));

 

public class AntExecutor {

	private static final Logger logger = LoggerFactory.getLogger(AntExecutor.class);
	
	/**
	 * @param cmd ant命令
	 * 
	 * @return 执行日志
	 * 
	 * @exception 执行有错误会抛出AntExecException
	 */
	public static String execute(String[] cmd){
		// 标准输出
		InputStream standardInput = null;
		BufferedReader standardReader = null;
		// 错误输出
		InputStream errInput = null;
		BufferedReader errReader = null;
		
		StringBuilder standardMsg = new StringBuilder();
		StringBuilder errMsg = new StringBuilder();
		
		Process process = null;
		try {
			// 执行ant
			process = Runtime.getRuntime().exec(cmd);
			// 读取标准输入流
			standardInput = process.getInputStream();
			if(standardInput != null){
				standardReader = new BufferedReader(new InputStreamReader(standardInput));
				String line = standardReader.readLine();
				while (null != line) {
					standardMsg.append(line).append("\n");
					line = standardReader.readLine();
				}
			}

			// 检查错误流是否有信息,如果有,则说明执行失败
			errInput = process.getErrorStream();
			if(errInput != null){
				errReader = new BufferedReader(new InputStreamReader(errInput));
				String errLine = errReader.readLine();
				while (null != errLine) {
					errMsg.append(errLine).append("\n");
					errLine = errReader.readLine();
				}
				if(errMsg.length() > 0){
					throw new AntExecException(standardMsg.append(errMsg).toString());
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
			throw new AntExecException(standardMsg.append(errMsg).toString());
		} finally {
			// 销毁进程对象,否则可能引起资源不能释放问题,出现Too many open files错误
			if (process != null) {
				process.destroy();
			}
			if (null != standardReader) {
				try {
					standardReader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != errReader) {
				try {
					standardReader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		logger.debug("executeAnt end...");
		return standardMsg.toString();
	}
	
	/**
	 * 生成命令
	 * 
	 * @param buildFilePath
	 * @param task
	 * @return
	 */
	public static String[] generateCmd(String buildFilePath, String task, String[] parameter){
		String ant = "ant.bat";
		if (!System.getProperty("os.name").contains("Windows")) {
			ant = "ant";
		}
		String[] cmd = null;
		if(parameter != null){
			cmd = new String[4 + parameter.length];
			System.arraycopy(parameter, 0, cmd, 4, parameter.length);
		}else{
			cmd = new String[4];
		}
		cmd[0] = ant;
		cmd[1] = "-f";
		cmd[2] = buildFilePath;
		cmd[3] = task;
		return cmd;
	}
	
}

 

public class AntExecException extends RuntimeException {

	private static final long serialVersionUID = -3708533380275512493L;

	public AntExecException() {
		super();
	}

	public AntExecException(String message, Throwable cause) {
		super(message, cause);
	}

	public AntExecException(String message) {
		super(message);
	}

	public AntExecException(Throwable cause) {
		super(cause);
	}

}

 

。。。

 

 

分享到:
评论

相关推荐

    java代码调用ant执行类

    public class AntExecutor { public static void main(String[] args) { try { Main.main(new String[]{"-f", "path/to/build.xml", "targetName"}); } catch (BuildException e) { e.printStackTrace(); } }...

    Java调用Ant API用法收集

    public class AntExecutor { public static void main(String[] args) { Project project = new Project(); project.init(); project.setUserProperty("ant.file", "path/to/build.xml"); // 指定构建文件路径 ...

    MiniGui业务开发基础培训-htk

    MiniGui业务开发基础培训-htk

    com.harmonyos.exception.DiskReadWriteException(解决方案).md

    鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案

    网络分析-Wireshark数据包筛选技巧详解及应用实例

    内容概要:本文档详细介绍了Wireshark软件中各种数据包筛选规则,主要包括协议、IP地址、端口号、包长以及MAC地址等多个维度的具体筛选方法。同时提供了大量实用案例供读者学习,涵盖HTTP协议相关命令和逻辑条件的综合使用方式。 适合人群:对网络安全或数据分析有一定兴趣的研究者,熟悉基本网络概念和技术的专业人士。 使用场景及目标:适用于需要快速准确捕获特定类型网络流量的情况;如网络安全检测、性能优化分析、教学演示等多种实际应用场景。 阅读建议:本资料侧重于实操技能提升,在学习时最好配合实际操作练习效果更佳。注意掌握不同类型条件组合的高级用法,增强问题解决能力。

    com.harmonyos.exception.BatteryOverheatException(解决方案).md

    鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案

    com.harmonyos.exception.ServiceUnavailableException(解决方案).md

    鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案

    MATLAB上机试题 MATLAB原理及应用实验报告 第3章 MATLAB的符号运算.docx

    内容概要:本文档详细介绍了MATLAB的符号运算,涵盖符号对象的命名方法、基本运算、级数求法等多个方面。通过具体的实验案例,如确定符号表达式中的变量、执行四则运算、提取分子分母、因式分解与展开、化简符号表达式、级数符号求和、符号微积分以及符号方程的求解,帮助学生理解和掌握MATLAB中的符号运算技巧。 适合人群:适用于对MATLAB有一定了解的大专院校的学生、研究人员和技术工作者。 使用场景及目标:通过本课程的学习,学员能够熟练使用MATLAB完成复杂的数学问题解决,提高科研项目和工程任务中对数学模型的建模能力和问题解决效率。 其他说明:文档包含详细的实验步骤指导和实例演示,同时提供了丰富的练习题供读者巩固所学知识。对于想要深入研究MATLAB符号运算的人来说是一份宝贵资料。

    springboot vue2 mysql 校园美食分享平台 论文.docx

    适合参考论文写作

    联通精准营销平台外呼系统HTTP接口规范

    内容概要:文档介绍了联通精准营销平台外呼系统的HTTP接口规范(V2.3),提供了API接口用于外呼业务的各种功能,确保企业的市场拓展和技术操作的无缝衔接。主要涵盖接口列表如坐席登录、数据获取、企业修改密码等,并详细说明了每个接口的方法、路径、请求参数及返回状态。针对外呼过程中的常见问题给出了处理指导,旨在帮助企业高效开展外呼业务,同时保障数据的安全性和合规性。 适用人群:适用于企业IT技术人员、营销人员以及任何希望利用电信运营商提供的API来增强自身外呼和数据分析能力的专业人士。 使用场景及目标:企业可通过这些API实现与联通平台的数据交互,包括但不限于获取客户资料、发起呼叫、管理和统计外呼数据,从而提升营销效率和客户服务体验。特别强调在外呼过程中涉及的身份认证、信息安全等方面的处理措施。 其他说明:此接口文档更新频繁,版本为2.3。企业需要及时关注最新动态以便充分利用各项功能优化营销策略。同时应注意遵守中国联通关于数据安全的相关政策法规。

    springboot vue2 mysql 图书馆管理系统 论文.docx

    适合参考论文写作

    java项目,课程设计-springboot校园在线拍卖系统

    java项目,课程设计-springboot校园在线拍卖系统,随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的,在人们的工作生活中,也就需要互联网技术来方便人们的日常工作生活,实现工作办公的自动化处理,实现信息化,无纸化办公。 本课题在充分研究了在Springboot框架基础上,采用B/S模式,以Java为开发语言,MyEclipse为开发工具,MySQL为数据管理平台,实现的内容主要包括首页,个人中心,综合管理等功能。

    全媒体运营+江苏工匠比赛

    全媒体运营+江苏工匠比赛

    com.pureharmony.exception.CredentialValidationException.md

    鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案

    com.harmonyos.exception.CloudServiceConnectionException(解决方案).md

    鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案

    com.harmonyos4.exception.VirtualMemoryAllocationException

    鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案

    IEC 60598-1-2020中文翻译.pdf

    IEC 60598-1-2020中文翻译

    com.pureharmony.exception.ResourceLockException.md

    鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案

    诗经数据,包含注释,翻译以及解读

    {"_id":{"$oid":"67302bf63eeb6773961e96bb"},"title":"关雎","belong":"国风·周南","appreciation":[{"title":"【注释】","content":"关关雎鸠〔jūjiū〕:关关,雄雌水鸟相互应和的鸣叫声。雎鸠,亦称王鴡,一种水鸟名,上体暗褐,下体白色,善捕鱼。洲:水中的陆地。窈窕〔yǎo tiǎo〕:娴静貌,美好貌。窈,喻女子心灵美;窕,喻女子仪表美。仇〔qiú〕:古同“逑”,配偶。荇〔xìng〕菜:又名莕菜,多年生水生草本,圆叶细茎,叶可食用。流:义同“求”,此指顺水势摘采。寤寐〔wù mèi〕:日夜。寤,醒时。寐,睡时。思服:思,语气助词,无实义。服,思念。友:亲近,结交。芼〔mào〕:以手指或指尖采摘。"},{"title":"【翻译】","content":"\n\r\n\t相对啼鸣的雌雄雎鸠,就在河水中央的小洲之上。娴静淑雅的女子,是君子最好的配偶。长短不齐的荇菜,从长短不齐的荇菜,从左边或右边逐一采摘。娴静淑雅的女子,演奏琴瑟来与她相交。长短不齐的荇菜,从左边或右边轻轻拈取。娴静淑雅的女子,

    com.pureharmony.exception.FirmwareUpdateFailureException

    鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案

Global site tag (gtag.js) - Google Analytics