2016-08-13 14 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(); 

これは、Pentahoの固有または汎用のJavaの問題ですが、どのように私は、このような

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

としてクラスパスに配置されていない絶対パス(Linux)のに基づいてファイル定義を得ることができる場合、私はこれを試してみました:

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のPentahoのに慣れていないですので、わからないどのように以下のAPI作品。最後の行で

resourceMgr.createDirectly(reportDefinitionURL, MasterReport.class);  

それは「MasterReport」のインスタンスを返しているので、「MasterReport.classは、」あなたのクラスパスに存在する必要があります。

編集:私はちょうどこのPentahoのウィキを見

- 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); 
関連する問題