将资源打包到Jar中并访问它们

时间:2013-09-18 13:52:30

标签: java eclipse deployment jar executable-jar

我对Java很新,我无法将应用程序导出到可运行的jar中。 我的应用程序使用Saxon运行一些转换,我希望样式表在runnable jar中。

现在我只是在eclipse的项目中有一个子文件夹,我正在使用该路径访问样式表。 但是,只要我将项目导出为该jar中的runnable jar,所有样式表都与使用的库处于同一级别(子文件夹无处可寻。)

此外,应用程序在cwd中搜索该子文件夹,当然也找不到它。

如何打包样式表并在jar中正确访问它们?

//更新:

我想我会更进一步。

我在src下创建了一个子文件夹,并将所有样式表放在那里。我这样访问它们:

xsltexps = comp.compile(new StreamSource(new File(this.getClass().getResource("/stylesheets/" + stylesheets).toURI())));

如果我在eclipse中运行它一切正常。当我将其导出为runnable jar并运行它时,我得到以下异常:

  

线程“main”java.lang.reflect.InvocationTargetException中的异常           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)           at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)           at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)           at java.lang.reflect.Method.invoke(Unknown Source)           在org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
  引起:java.lang.IllegalArgumentException:URI不是分层的          在java.io.File。(未知来源)

我不知道这意味着什么。

1 个答案:

答案 0 :(得分:2)

好的,这就是实际工作的内容:

xsltexps = comp.compile(new StreamSource(
    getClass().getResourceAsStream("/stylesheets/" + stylesheets)));

最重要的变化是使用getResourceAsStream代替getResource