zoukankan      html  css  js  c++  java
  • java 学习:在java中启动其他应用,由jenkins想到的

    在jenkins的实践中遇到了一个问题:

      我的项目依赖其他第三方应用的地方比较多,而且会占用多个端口,如何处理端口和启动/关闭第三方应用成了难题。

      初级解决方案:在服务端上面写一堆bat文件,,,,_(:з)∠)_ 而且我已经写好了,准备手动启动bat,然后再跑jenkins

      升级解决方案:和张辉聊了一下,本意是说可不可以用jenkins去启动这一堆,不用我手动再启动bat

      最终解决方案:张辉推荐,在项目代码中直接启动/关闭第三方应用

    怎么实现是个大问题。。。。

    目的:初始化时启动,结束时关闭:klov,mongoD,appium;

      klov和mongoD用bat就可以开启服务,比较纠结的是appium,我用的appium-desktop,手动的话还需要点击开启。这里的思路是下载命令行启动的版本。

    步骤:

        1.安装appium命令行版本:

    npm --registry http://registry.npm.taobao.org install appium -g

        参考 https://www.cnblogs.com/mapu/p/8666239.html

          https://www.cnblogs.com/iTlijun/p/8193588.html

          如果安装时提示2.0,4.0msbuild版本不对的问题,就去微软官网下载visulStudio2017社区的版本,安装其中的组件-windows8.1 和windows10.

        2.cmd中输入 appium启动服务

    appium
    

        3.编写启动三个应用的bat文件 all.bat

    @echo off
    @echo start mongod
    start /d "C:Program FilesMongoDBServer3.4in" mongod.exe
    ::@echo start jenkins
    ::d:
    ::cd D:jenkins
    ::java -jar jenkins.war
    @echo start klov
    cd D:	estngklov-0.1.1
    java -jar klov-0.1.1.jar
    @echo start appium
    appium
    exit
    

        4.用java代码来调用这个bat文件

    package com.test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.PseudoColumnUsage;
    
    public class StartBat {
    	public static void main(String[] args) {
    		String cmd="cmd /c start C:\Users\user\Desktop\all.bat";
    		run_cmd(cmd);
    	}
    	public static void run_cmd(String cmd){
    		Runtime runtime = Runtime.getRuntime();
    		Process process = null;
    		try{
    			process=runtime.exec(cmd);
    			//输出cmd的内容
    			InputStream inputStream = process.getInputStream();
    			int c ;
    			while((c=inputStream.read())!=-1){
    				System.out.println(c);
    			}
    			inputStream.close();
    			process.waitFor();
    		}catch(IOException e){
    			e.printStackTrace();
    		}catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		int i = process.exitValue();
    		if(i==0){
    			System.out.println("执行完成");
    		}else{
    			System.out.println("执行失败");
    		}
    		
    		process.destroy();
    		process=null;
    		new StartBat().killProcess();
    	}
    	public void killProcess(){
    		Runtime rt=Runtime.getRuntime();
    		Process process =null;
    		try {
    			rt.exec("cmd.exe /C start wmic process where name = 'cmc.exe' call terminate");
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    }
    

         5.基本想要的功能已经实现,然后在程序体初始化的时候,开启服务,test结束的时候,销毁服务或者关闭服务,就可以了。

        

  • 相关阅读:
    野火书籍《STM32库开发实战指南》配套例程
    使你的MFC程序具有win7的透明立体风格
    C#:params 关键字的学习
    "ASP.NET Ajax 客户端框架未能加载"解决办法
    未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。
    GIS:如何将东城和崇文合并
    委托和Lambda表达式(一):委托概述
    Cron表达式详解
    正则表达式在JAVA中的简单实例
    使用jdom创建XML文件
  • 原文地址:https://www.cnblogs.com/zhizhiyin/p/9141129.html
Copyright © 2011-2022 走看看