2011-11-29 2 views
0

동적 인수를 제공하는 런타임 실행 중에 java keytool을 호출하고 싶습니다. 여기지만, 윈도우에서 작동하고 무엇을하지 리눅스 (우분투) 같은 자바 1.6.0 미만 :Linux에서 Runtime.getRuntime(). exec()를 사용하여 Keytool 사용

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 
} 

리눅스에서 출력이

keytool error: java.io.IOException: Invalid keyword ""CN"

이다 (리눅스 명령 줄에서 명령을하지 실행 자바에서 시작), 코드가 작동합니다. 어떻게 내가 잘못 일을하고 얼마나 것 미리

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

감사를 사용할 때처럼 String[] 봐! 내가 사용하는 것이 좋습니다

답변

3

http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec (java.lang.String의 []) 대신

다음

당신 당신이 여기에서하지 않는 각 인수를 벗어나는 것에 대해 걱정할 필요가 없습니다.

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

String [] - 표기법을 사용해 보았지만 작동시키지 않았습니다. 어떻게 인수를 정렬해야합니까 (특히 -dname "...."인수)? –

+0

사용 내역을 표시하도록 내 질문을 편집했습니다. – jontro

+0

감사합니다. @Bengt, 괜찮 았어! 나는 항상 String args [] = {arg1, arg2, "-dname dNameArguments"};를 시도했다. –

관련 문제