2016-10-20 6 views
0

Java의 Runtime 클래스를 사용하면 jar를 실행할 때 명명 된 시스템 등록 정보 값을 명령 행 인수로 보낼 수 있습니다. 아래처럼 :processBuilder에 시스템 속성 값을 전달하는 방법은 무엇입니까?

Runtime.getRuntime().exec("java -jar -DiName=ABC C:\\Test.jar"); 

동일한 기능을 얻기 위해 런타임에서 ProcessBuilder로 이동하려고합니다. 이 작업을 수행하는 올바른 방법에 대한 조언이 필요합니다.

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "C:\\Test.jar").start(); 

위의 코드에서 어떻게 "iName"을 전달할 수 있습니까?

런타임에서 ProcessBuilder로 이동하는 이유는이 런타임 코드를 트리거하는 Java 프로그램이 1.8.0_40 JDK를 사용하는 특정 프로덕션 환경에서 작동하지 않기 때문입니다.

+0

"iName"이란 무엇입니까? –

+2

'("java", "- DiName = ABC", "-jar", "C : \ Test.jar")' –

답변

1

Javadoc을 살펴보십시오. 이

ProcessBuilder 생성자 (예를 들어 디모데 작은 바퀴 코멘트 참조) 형태 public ProcessBuilder(String... command) 될 동등하거나, 입력 List<String>의 단지 하나의 매개 변수를 수 있다는 것을 명확하게 적혀있다.

하나의 단일 문자열 (여기서는 ProcessBuilder)을 토큰 화하는 Runtime의 반대쪽에는 이미 토큰 화 된 매개 변수 목록이 필요합니다.

아마도 혼란을 피하기 위해 나중에 쉽게 수정할 수 있도록 매개 변수를 변수에 저장하는 것이 가장 좋습니다. 예 :

List<String> params = java.util.Arrays.asList("java", "-jar", "-DiName=ABC", "C:\\Test.jar"); 
ProcessBuilder pb = new ProcessBuilder(params).start(); 

장기적으로 도움이되기를 바랍니다.

0
new ProcessBuilder("java", "-jar", "-DiName=ABC", "C:\\Test.jar"); 

ProcessBuilder가 연접되어 실행된다 파라미터의 어레이 (가변 인자)를 수신한다.