1.概述:
根据业务需要,要求通过在线方式打包java程序,由于服务器是windows系统,想到是思路就是:
通过git远程下载相关源代码,再通过maven命令工具进行项目打包。这样就要求JavaWeb在服务器运行cmd命令
2.具体代码如下:
/**
*sourcePath 项目文件路径
*/
public String mvnPackage(String sourcePath) {
InputStream error = null;
try {
StringBuffer command = new StringBuffer();
command.append("cmd /c d: ");
//这里的&&在多条语句的情况下使用,表示等上一条语句执行成功后在执行下一条命令,
//也可以使用&表示执行上一条后台就立刻执行下一条语句
command.append(String.format(" && cd %s", sourcePath));
command.append(" && mvn -Dmaven.test.skip=true package");
Process p = Runtime.getRuntime().exec(command.toString());
error = p.getErrorStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(error));
StringBuffer buffer = new StringBuffer();
String s = "";
while ((s = bufferedReader.readLine()) != null) {
buffer.append(s);
}
bufferedReader.close();
p.waitFor();
if (p.exitValue() != 0) {
return buffer.toString();
} else {
return "";
}
} catch (Exception ex) {
if (error != null) {
try {
error.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return ex.getMessage();
}
}
3.具体说明:
p.getErrorStream() :表示获取执行后的错误信息
p.waitFor() :表示等待执行,直到cmd执行完成后才进行下一步程序的执行操作
p.exitValue():状态,0表示执行成功,其他表示没有执行成功,有错误