【问题标题】:Packing Ressources into Jar and accessing them将资源打包到 Jar 中并访问它们
【发布时间】:2013-09-23 07:45:03
【问题描述】:

我是 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 并运行它时,我得到以下异常:

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

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

【问题讨论】:

    标签: java eclipse deployment jar executable-jar


    【解决方案1】:

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

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

    最重要的变化是使用getResourceAsStream而不是getResource

    【讨论】:

    • 您能否告诉我,即使我们提取了 jar 文件,样式表是否也会是二进制格式。几分钟前,我刚刚问了一个这样的问题here。你能帮帮我吗?
    • 我看到这个问题已经回答了。如果你不想以这种方式混淆你的样式表不适合你,那么如果从 jar 中提取样式表,每个人都可以阅读。
    • 谢谢。所以我需要混淆我的样式表。
    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 2011-02-08
    • 2021-03-05
    • 2017-12-10
    • 2012-11-28
    • 2013-07-07
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多