Java从类路径外部加载资源(pentaho)

时间:2016-08-13 07:25:25

标签: java pentaho

我在Java编程工作了几周,并试图从类路径之外的文件夹中获取pentao报告定义,但到目前为止还没有成功。

以下成功从类路径中包含的文件夹加载定义,但是我无法弄清楚如何从类路径之外的绝对路径获取它:

// 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问题,但是如何根据绝对路径(linux)获取文件定义,该路径不在类路径中,例如

"/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 ...

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

默认系统类加载器将仅在类路径中查找资源。如果你知道绝对路径,那么直接创建URL对象会更容易:

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

我不熟悉pentaho api,所以不确定以下api是如何工作的。

resourceMgr.createDirectly(reportDefinitionURL, MasterReport.class);     

在最后一行它返回一个“MasterReport”的实例,因此“MasterReport.class”应该在你的类路径中。

修改

我刚看了这个pentaho wiki - http://wiki.pentaho.com/display/Reporting/Using+the+DocumentBundle+Reader+and+Writer

看起来createDirectly()apis可以采用文件对象

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