java启动应用_java 学习:在java中启动其他应用,由jenkins想到的
在jenkins的實踐中遇到了一個問題:
我的項目依賴其他第三方應用的地方比較多,而且會占用多個端口,如何處理端口和啟動/關閉第三方應用成了難題。
初級解決方案:在服務端上面寫一堆bat文件,,,,_(:з)∠)_ 而且我已經(jīng)寫好了,準備手動啟動bat,然后再跑jenkins
升級解決方案:和張輝聊了一下,本意是說可不可以用jenkins去啟動這一堆,不用我手動再啟動bat
最終解決方案:張輝推薦,在項目代碼中直接啟動/關閉第三方應用
怎么實現(xiàn)是個大問題。。。。
目的:初始化時啟動,結束時關閉: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版本不對的問題,就去微軟官網(wǎng)下載visulStudio2017社區(qū)的版本,安裝其中的組件-windows8.1 和windows10.
2.cmd中輸入 appium啟動服務
appium
3.編寫啟動三個應用的bat文件 all.bat
@echo off
@echo start mongod
start /d "C:\Program Files\MongoDB\Server\3.4\bin" mongod.exe
::@echo start jenkins
::d:
::cd D:\jenkins
::java -jar jenkins.war
@echo start klov
cd D:\testng\klov-0.1.1
java -jar klov-0.1.1.jar
@echo start appium
appium
exit
4.用java代碼來調(diào)用這個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的內(nèi)容
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("執(zhí)行完成");
}else{
System.out.println("執(zhí)行失敗");
}
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.基本想要的功能已經(jīng)實現(xiàn),然后在程序體初始化的時候,開啟服務,test結束的時候,銷毀服務或者關閉服務,就可以了。
總結
以上是生活随笔為你收集整理的java启动应用_java 学习:在java中启动其他应用,由jenkins想到的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python concurrent qu
- 下一篇: 一个控制器2套模版php,如何不用一个自