Использование Keytool с Runtime.getRuntime (). Exec () под Linux - PullRequest
1 голос
/ 29 ноября 2011

Я хотел бы вызвать инструмент Java Keytool во время выполнения, предоставляя динамические аргументы.Вот что работает под Windows, но не под Linux (Ubuntu) на той же Java 1.6.0:

File f = new File("mykey.jks");
StringBuilder command = new StringBuilder();
command.append(System.getProperty("java.home")
            + System.getProperty("file.separator") + "bin"
            + System.getProperty("file.separator") + "keytool");
command.append(" -genkey");
command.append(" -dname \"cn=foo,ou=bar,o=company,c=CH\"");
command.append(" -alias myProduct");
command.append(" -keypass " + "testtest");
command.append(" -keystore " + f.getAbsolutePath());
command.append(" -storepass " + "testtest");
command.append(" -validity " + 3650);
final Process pr = Runtime.getRuntime().exec(command.toString());

BufferedReader input = new BufferedReader(new InputStreamReader(
    pr.getInputStream()));

String line = null;
while ((line = input.readLine()) != null) {
    System.out.println(line);
}

int exitVal = -1;
try {
    exitVal = pr.waitFor();
    System.out.println("Exited with error code " + exitVal);
} catch (InterruptedException e) {
    // handle
}

Вывод под Linux

ошибка keytool: java.io.IOException: Неверное ключевое слово "" CN "

При запуске команды в командной строке Linux (не запускается в Java), код работает. Что я делаю неправильно и как будет выглядеть String[]при использовании

Runtime.getRuntime().exec(String[])

Заранее спасибо!

1 Ответ

4 голосов
/ 29 ноября 2011

Я рекомендую использовать http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec(java.lang.String[]) вместо

Тогда вам не нужно беспокоиться о экранировании каждого аргумента, который вы здесь не делаете

String args [] = {arg1, arg2, "-dname", "dNameArguments"};
...