2016-08-13 86 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

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

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

我不熟悉Pentaho的API的,所以不知道怎么以下API的工作。

resourceMgr.createDirectly(reportDefinitionURL, MasterReport.class);  

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

编辑:

我只是看着这个Pentaho的维基 - http://wiki.pentaho.com/display/Reporting/Using+the+DocumentBundle+Reader+and+Writer

貌似createDirectly()API可采取一个文件对象

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