1

我对 Java 还很陌生,我无法将我的应用程序导出到可运行的 jar 中。我的应用程序使用 Saxon 运行一些转换,并且我希望样式表曾经位于可运行的 jar 中。

现在,我在 Eclipse 的项目中有一个子文件夹,我正在使用该路径访问样式表。但是,一旦我将项目导出为该 jar 中的可运行 jar,所有样式表都与使用的库处于同一级别(找不到子文件夹。)

应用程序还在 cwd 中搜索该子文件夹,当然在那里找不到。

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

//更新:

我觉得我走得更远了。

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

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

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

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 处 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 处 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 处的线程“main”java.lang.reflect.InvocationTargetException 中的异常java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
原因:java.lang.IllegalArgumentException:URI 在 java 中没有层次结构。 io.File.(未知来源)

我什至不知道这意味着什么。

4

1 回答 1

2

好的,这就是实际工作的方法:

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

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

于 2013-09-19T08:37:46.777 回答