gpt4 book ai didi

java - 类加载器 : java. io.FileNotFoundException : file:/home/aaa/. m2/repository/com/st/module-1.1-SNAPSHOT.jar!/com/st/resource (没有这样的文件或目录)

转载 作者:行者123 更新时间:2023-12-02 00:55:51 25 4
gpt4 key购买 nike

我在类加载器方面遇到问题。有时有效,有时无效。

当我开始时,我已经测试了它的工作原理,但不是从 *.jar 测试的:

URL url = AcAnalyzer.class.getResource("../stuff/resource");

// and this works even from jar file:
URL url = Acnalyzer.class.getResource("/stuff/resource");
URL url = AcAnalyzer.class.getClassLoader().getResource("stuff/resource");

// But I got into the problem with tomcat..when I need to deploy it into the tomcat I had to do this:
URL url = Thread.currentThread().getContextClassLoader().getResource("something.xml");

其中 something.xml 必须位于 WEB-INF/classes/

... url.getFile();

问题是大多数时候它必须同时在 jar 内和不同时在 jar 内工作。现在我测试了我的类在哪里获取资源,并且 jar 文件用于部署在 tomcat 下的某些项目中。不知何故,它不想再工作了:

我对类加载器有点困惑。如何获得这个资源呢?并且同时进行工作测试。

URL url = Thread.currentThread().getContextClassLoader().getResource("com/st/resource");
FileInputStream inputStream = new FileInputStream(url.getFile());
java.io.FileNotFoundException: file:/home/aaa/.m2/repository/com/st/module-1.1-SNAPSHOT.jar!/com/st/resource (No such file or directory)

最佳答案

我不确定第一部分中的问题到底是什么,尽管我建议不要在资源路径中使用“../”。

对于第二部分,如果您想加载资源,则不应使用 FileInputStream - 您应该使用 getResourceAsStream() 而不是 getResource().getFile()。只需从该 InputStream 加载 - 并不总是可以使用 FileInputStream 加载单个文件。

编辑:引用资源的两种方式是 ClassLoader.getResourceClass.getResource (以及带有 AsStream 后缀的等效方法)。它们之间的区别(我知道的唯一区别,尽管可能还有其他区别)是 Class.getResource 将给定路径视为相对于您调用它的类的包在。所以

ClassLoader.getResource("foo/bar/baz/test.xml")

相当于

foo.bar.SomeClass.class.getResource("baz/test.xml");

至于 Class.getClassLoader()Thread.getContextClassLoader() 之间的区别,我不会声称自己有很好的理解 - 我建议你这样问一个单独的问题。

关于java - 类加载器 : java. io.FileNotFoundException : file:/home/aaa/. m2/repository/com/st/module-1.1-SNAPSHOT.jar!/com/st/resource (没有这样的文件或目录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/577280/

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