Java 从类路径外加载资源 (pentaho)
Java loading a resource from outside the classpath (pentaho)
我已经进入 Java 编程几个星期了,我正试图从 class 路径之外的文件夹中获取 pentao 报告定义,但到目前为止还没有成功。
以下成功地从 class 路径中包含的文件夹加载定义,但是我无法弄清楚如何从 class 路径之外的绝对路径获取它:
// 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 问题,但是我如何根据不位于class 路径,例如
"/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 ...
非常感谢任何帮助!
默认系统 class 加载程序将仅在 class 路径中查找资源。如果你知道绝对路径,那么直接创建 URL 对象会更容易:
URL reportDefinitionURL = new URL("file:/tmp/Sample1.prpt");
我不熟悉 pentaho api,所以不确定下面的 api 是如何工作的。
resourceMgr.createDirectly(reportDefinitionURL, MasterReport.class);
在最后一行它返回了一个 "MasterReport" 的实例,所以 "MasterReport.class" 应该在你的 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);
我已经进入 Java 编程几个星期了,我正试图从 class 路径之外的文件夹中获取 pentao 报告定义,但到目前为止还没有成功。
以下成功地从 class 路径中包含的文件夹加载定义,但是我无法弄清楚如何从 class 路径之外的绝对路径获取它:
// 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 问题,但是我如何根据不位于class 路径,例如
"/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 ...
非常感谢任何帮助!
默认系统 class 加载程序将仅在 class 路径中查找资源。如果你知道绝对路径,那么直接创建 URL 对象会更容易:
URL reportDefinitionURL = new URL("file:/tmp/Sample1.prpt");
我不熟悉 pentaho api,所以不确定下面的 api 是如何工作的。
resourceMgr.createDirectly(reportDefinitionURL, MasterReport.class);
在最后一行它返回了一个 "MasterReport" 的实例,所以 "MasterReport.class" 应该在你的 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);