2014-06-18 3 views
0

나는 아파치 평민 간부를 사용하여 Java 응용 프로그램 내에서 스크립트를 실행하려고 다음과 같은 오류 받고 있어요 : 다음 코드를 들어커먼즈 간부

Error: Could not find or load main class "-DappEnv=te 
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1) 
    at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:402) 
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:164) 
    at TestRunner.runTest(TestRunner.java:37) 
    at TestMain.main(TestMain.java:6) 

을 :

이 환경 변수에 대한 인용 값을 분할하고 그 이름으로 클래스를 찾는 대신에 환경 변수를 사용하여 명령을 실행 할 것으로 보이므로
String jOpts = "JAVA_OPTS=\"-DappEnv=te -DsetInstance=true -Dinstance=.01\""; 
String command = "/path/to/bin/script.sh -s argVal"; 
try { 
    Map<String, String> procEnv = EnvironmentUtils.getProcEnvironment(); 
    EnvironmentUtils.addVariableToEnvironment(procEnv, jOpts); 
    CommandLine cmdLine = CommandLine.parse(command); 
    DefaultExecutor executor = new DefaultExecutor(); 
    executor.setWorkingDirectory(new File("/path/to")); 
    executor.execute(cmdLine, procEnv); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

은 오류가 루프 날 던지고있다. 그것은 가치가 무엇인지를 들어, 다음은 배쉬에서 잘 실행 :

JAVA_OPTS="-DappEnv=te -DsetInstance=true -Dinstance=.01" /path/to/bin/script.sh -s argVal 

사람은 인용 값이 공백에 분할되고있는 이유에 대한 통찰력을 제공 할 수 및/또는 왜의 값에 기본 클래스를 찾고 있어요 JAVA_OPTS? 환경 맵을 제대로 사용하고 있습니까?

답변

0

문제의 일부는 JAVA_OPTS 값에 자체 따옴표를 추가하는 exec입니다. 값 주위에 따옴표가 없으면 환경 변수가 잘 설정됩니다.

String jOpts = "JAVA_OPTS=-DappEnv=te -DsetInstance=true -Dinstance=.01"; 

명령의 형식도 잘못되었습니다.

cmdLine.addArgument("-s"); 
cmdLine.addArgument("argVal"); 
:

String command = "/path/to/bin/script.sh"; 
CommandLine cmdLine = CommandLine.parse(command); 

나머지 인수가 addArgument()에 추가해야합니다 : commandLine.parse()에 전달 된 인수는 프로그램의 이름 실행 해야