我想使用一个网页来打包我项目的apk,但在servlet中,每次java执行到“./gradlew assembleRelease"命令就要报错,说什么端口已经被占用。开发环境是idea。
报的错是:
错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use:
1099; nested exception is:
java.net.BindException: Address already in use
下面是我执行打包命令的方法,即runCommands方法。进入for循环开始执行命令行。
public static String orders[] = {"cd /Users/whoami/Downloads/WebSocketDemo","./gradlew assembleRelease"};
public static void runCommands(String[] orders) throws IOException {
File wd = new File("/bin");
Process proc = null;
try {
proc = Runtime.getRuntime().exec("/bin/bash", null, wd);
} catch (IOException e) {
e.printStackTrace();
}
if (proc != null) {
// BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
SequenceInputStream sis = new SequenceInputStream(proc.getInputStream(), proc.getErrorStream());
InputStreamReader isr = new InputStreamReader(sis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
for (String s : orders) {
System.out.println("command is: " + s);
out.println(s);
}
out.println("exit");
try {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
if (line.equals("BUILD SUCCESSFUL")) {
return;
}
}
proc.waitFor();
br.close();
sis.close();
out.close();
proc.destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
}
大兄弟可以用jetty,是没有问题的.