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结束的时候,销毁服务或者关闭服务,就可以了。

        

  • 相关阅读:
    WPF中调用资源字典的方法
    DataGridView控制单元格修改的输入规则
    将dataGridView数据转成DataTable
    窗体打开后设置某个控件为默认的焦点
    自定义控件属性英文类别
    VMWare虚拟机与主机建立共享文件夹
    与.Net大师Jeffrey Richter面对面交流——TUP对话大师系列活动回顾(多图配详细文字)
    一个编程小题目引发的思考(下)
    一个Quicksort究竟可以写到多么短
    我是如何设计并实现一门程序设计语言——一门函数式编程语言Lucida的诞生
  • 原文地址:https://www.cnblogs.com/zhizhiyin/p/9141129.html
Copyright © 2011-2022 走看看