我对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。(未知来源)
我不知道这意味着什么。
答案 0 :(得分:2)
好的,这就是实际工作的内容:
xsltexps = comp.compile(new StreamSource(
getClass().getResourceAsStream("/stylesheets/" + stylesheets)));
最重要的变化是使用getResourceAsStream
代替getResource