2017-05-03 8 views
1

우리 OSB 버전의 앱으로 ProcessBuilder에 기괴한 문제가 있습니다. 이것은 universalJavaApplicationStub로 전환했을 때 시작되었습니다. 이전에는 AppBundlerTask를 사용했습니다. 참고 :이 결과를 확인하기 위해 전체 맥 응용 프로그램 번들을 구축 할 필요에 따라, 샘플 클래스를 수행 할 수 없습니다OSX 앱 번들에서 실행하면 ProcessBuilder가 파일을 찾지 못함

log.debug("render: {}", Arrays.toString(myCommandLine.toArray())); 
log.debug("render: dir={}", m_workingDir); 
final ProcessBuilder processBuilder = new ProcessBuilder(myCommandLine); 
processBuilder.directory(new File(m_workingDir)); 
final Process process = processBuilder.start(); 

및 로그 출력은 보았다 : 프로세스를 시작하는

우리의 코드 것은 다음과 같이하십시오 :

render: [/Applications/EFI/Metrix/bin/cli/rasters, --saveasimg, --pagebox=MEDIABOX, --smoothing=All] 
render: dir=/Applications/EFI/Metrix/bin/cli/ 

이로 인해 래스터 응용 프로그램에서 로그에 오류가 발생하여 설치 디렉토리에서 실행 중이 지 않음을 나타냅니다. (두 번째 로그 라인의 디렉토리입니다.)

작업 디렉토리가 processBuilder.directory() 호출에서 지정한 디렉토리가 아닌 것 같습니다.

아무도 무슨 일이 일어나고 있는지 설명 할 수 있습니까?

+0

현재 작업 디렉토리가 설정중인 것에 의존 할 수없는 것처럼 들립니다 (이는 매우 일반적입니다). JVM에 클래스가로드 된 위치를 묻고 그 위치에서 설치 디렉토리를 파생시킬 수 있습니다. 아니면 그냥'myCommandLine [0]'을 사용할 수 있습니까? –

+0

"pwd"를 수행하는 쉘 스크립트를 호출하도록 코드를 수정했습니다. 작업 디렉토리가 정확합니다. – CasaDelGato

+0

'new File (m_workingDir) .getAbsolutePath()'의 값을 출력 해보십시오. –

답변

0

앱 공급 업체와 협력하여 앱을 실행하기 전에 "설정되지 않은 CFProcessPath"를 수행해야합니다.