gpt4 book ai didi

java - 从命令行运行java程序时无法加载资源

转载 作者:行者123 更新时间:2023-12-01 11:02:30 24 4
gpt4 key购买 nike

我能够从 IDE (IntelliJ) 中正确运行 java 程序;但是,当我尝试从命令行运行相同的程序时,它失败了。抛出的错误是:

RuntimeUnmarshallException: org.xml.sax.SAXParseException; schema_reference.4: Failed to read schema document 'file:/home/Experiments/file:/home/path/to/jar/my.jar!/configuration.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.

堆栈跟踪指出问题出在这里:

String SCHEMA_FILE_PATH = "configuration.xsd";
ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource(SCHEMA_FILE_PATH); // <- breaks here
return new File(resource.getFile());

我无法找到存储在 IDE 中标记为资源根的目录中的架构文件。我敢打赌,当我从命令行运行时,因为我是从不同的工作目录运行,所以它不知道在哪里查找。我尝试在命令行上设置类路径,以便能够查看包含架构的目录,但这没有帮助。我想我可以将工作目录设置为从 IDE 运行时的位置,但这似乎是一个糟糕的设计选择。

感谢您的帮助。

编辑:我刚刚确认了configuration.xsd文件包含在jar中,但无论出于何种原因,它似乎在奇怪的地方寻找它......

最佳答案

运行.jar时,其内容不会解压,而是直接从.jar中读取。因此,您正在加载的资源不能表示为 File(它仍然嵌套在 .jar 内)。可以看到错误信息中感叹号后面的部分是jar内资源的路径。

我建议使用Classloader.getResourceAsStream(..)反而。它透明地处理加载。

请注意,您可以使用 new StreamSource(InputStream)从流构造对架构文档的引用。

Here是一些关于资源加载的官方信息,以及 this问题可能会引起兴趣。

关于java - 从命令行运行java程序时无法加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33228708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com