2016-08-13 2 views
1

Java 프로그래밍을 몇 주 동안하고 클래스 경로 외부에있는 폴더에서 pentao 보고서 정의를 가져 오려고했지만 지금까지 성공하지 못했습니다.Java 클래스 패스 (pentaho) 외부에서 리소스를로드하는 중

성공적 그러나 내가 클래스 경로 외부에 절대 경로에서 활용하는 방법을 알아낼 수없는 오전, 클래스 경로에 포함 된 폴더에서 정의를로드 다음 : 나는 확실하지 않다

// Parse the report file 
final URL reportDefinitionURL = classloader.getResource("some/path/inclass/Sample1.prpt"); 
final ResourceManager resourceManager = new ResourceManager(); 
final Resource directly = resourceManager.createDirectly(reportDefinitionURL, MasterReport.class);  
return (MasterReport) directly.getResource(); 

이 펜타 특정 또는 일반 자바 문제입니다,하지만 어떻게 나는 내가 이것을 시도 등

"/usr/share/pentaho/Sample1.prpt" ? 

클래스 경로에 위치하지 않는 절대 경로 (리눅스)를 기반으로 파일 정의를 얻을 수있는 경우 :

File file = new File("/usr/share/pentaho/"); 
URL url = file.toURI().toURL(); 
URL[] urls = new URL[]{url};     
ClassLoader cl = new URLClassLoader(urls); 
final URL reportDefinitionURL = cl.getResource("Sample1.prpt"); 
나는 또한 외부 실행시 경로하지만 그 중 하나가 작동 표시되지 않습니다를 포함하여 시도

: 모든 지원이 크게 감사합니다

java -cp ./lib/*:/usr/share/pentaho/*.prpt ... 

!

답변

0

기본 시스템 클래스 로더는 클래스 경로에서만 자원을 찾습니다. u는 절대 경로를 알고 있다면, 직접 URL 객체를 생성하는 것이 더 쉽습니다 :

URL reportDefinitionURL = new URL("file:/tmp/Sample1.prpt"); 

나는 펜타 API 년대에 익숙하지 않은 나는, 어떻게 다음 API를 작동 확신하지. 마지막 줄에서

resourceMgr.createDirectly(reportDefinitionURL, MasterReport.class);  

그것은 "MasterReport"의 인스턴스를 반환, 그래서 "MasterReport.class는"클래스 경로에서이 있어야합니다.

편집 : 난 그냥이 펜타 위키 보았다

- http://wiki.pentaho.com/display/Reporting/Using+the+DocumentBundle+Reader+and+Writer

는 API를 파일 객체를 취할 수)합니다 (createDirectly 것 같은데

File reportDefinitionFile = new File ("/tmp/Sample1.prpt"); 
resManager.createDirectly(reportDefinitionFile, MyClass.class); 
관련 문제