Привет всем новичкам в Powershell , вот так.
Я хочу взять приведенный ниже код и преобразовать его в Java, чтобы мне не пришлось запускать отдельный Сценарий Powershell вне моей программы, когда он выполняется.
[string] $wspaceDir = "C:\Temp\loadDir",
[string] $scmLoc = "C:\Local Apps\IBM\SDP\scmtools\eclipse\scm.exe",
[string] $portNumForDaemon = "61938"
start-job -scriptblock {
Set-Location "$($args[1])"
Write-Host "Starting Daemon on port $args[2]" -foregroundcolor "Yellow"
&"$($args[0])" "daemon" "start" "$($args[1])" "--port" $args[2]
} -ArgumentList $scmLoc, $wspaceDir, $portNumForDaemon
И до сих пор у меня есть информация о том, что он делает выше, который выполняется в отдельном потоке, чтобы продолжить и не ждать егочтобы закончить.
В Java я пытался имитировать, что:
private static String portNumForDaemon = "61938";
private static String scmLoc = "C:\\Local Apps\\IBM\\SDP\\scmtools\\eclipse\\scm.exe";
private static String wspaceDir = "C:\\TempRQM";
public static void blah() {
ExecutorService pool = Executors.newSingleThreadExecutor();
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("cmd.exe", "/c", scmLoc + " daemon start " + wspaceDir + " --port " + portNumForDaemon);
try {
Process process = processBuilder.start();
System.out.println("process ping...");
ProcessReadTask task = new ProcessReadTask(process.getInputStream());
List<String> supplierNames = new ArrayList<String>();
Future<list<string>> future = pool.submit(task);
// no block, can do other tasks here
System.out.println("process task1...");
System.out.println("process task2...");
List<string> result = future.get(5, TimeUnit.SECONDS);
for (String s : result) {
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.shutdown();
}
}
private static class ProcessReadTask implements Callable<list<string>> {
private InputStream inputStream;
public ProcessReadTask(InputStream inputStream) {
this.inputStream = inputStream;
}
@Override
public List<string> call() {
return new BufferedReader(new InputStreamReader(inputStream))
.lines()
.collect(Collectors.toList());
}
}
И сколько бы я ни хотел выполнить это, я получаю сообщение об ошибке на всех орудиях Callable , Future .
Я не уверен, правильно ли я это делаю или нет. Я даже не знаю наверняка, что это эквивалентно тому, что делает Powershell ?
И Powershell / Java гуру было бы здорово выручить меня!