Abh*_*hek 5 java spring spring-mvc spring-boot jakarta-ee
“它在 Eclipse 中工作正常,但是当我创建 jar 并运行它时会给我这个异常。这是我正在使用的非 Web Spring Boot 应用程序,我应该作为独立 jar 运行”
java.lang.IllegalArgumentException: name
at sun.misc.URLClassPath$Loader.findResource(Unknown Source) ~[na:1.8.0_171]
at sun.misc.URLClassPath.findResource(Unknown Source) ~[na:1.8.0_171]
at java.net.URLClassLoader$2.run(Unknown Source) ~[na:1.8.0_171]
at java.net.URLClassLoader$2.run(Unknown Source) ~[na:1.8.0_171]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
at java.net.URLClassLoader.findResource(Unknown Source) ~[na:1.8.0_171]
at org.springframework.boot.loader.LaunchedURLClassLoader.findResource(LaunchedURLClassLoader.java:58) ~[extension-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
at java.lang.ClassLoader.getResource(Unknown Source) ~[na:1.8.0_171]
at java.net.URLClassLoader.getResourceAsStream(Unknown Source) ~[na:1.8.0_171]
Run Code Online (Sandbox Code Playgroud)
小智 3
可能有点晚了,但我最近在 Windows 上遇到了同样的错误,并通过一个肮脏的 hack 修复了它。我希望未来寻找同样问题的人会发现这对他们的问题有用。
首先,eclipse 以不同的方式“运行”您的 Spring Boot 应用程序。它不做java -jar foo.jar,而是直接引用所有类和库,即java -classpath xxx/target/classes:a.jar:b.jar...。所以在 eclipse 中运行的时候会有不同的行为。
我想您遇到了与我相同的情况,即您有一个 Spring Boot 应用程序,并且希望将其打包为可执行 jar,并且您正在引用外部依赖项,并且无法修复这些外部依赖项中出现的问题。
我发现我使用的外部库中的某个地方正在生成一个临时文件并使用 Java 读取它,ClassLoader但 Spring BootLaunchedURLClassLoader无法处理 Windows 的“x:\”语法
就我而言,是
URL findResource(name): C:\foo\bar.xml
Run Code Online (Sandbox Code Playgroud)
因此,破解方法是构建您自己的LaunchedURLClassLoader并将其替换到可执行 jar 中。如果您解压可执行 jar,您将LaunchedURLClassLoader.class在org\springframework\boot\loader. 这个想法是为了C:\foo\bar.xml让file:///C:/foo/bar.xmlJava ClassLoader 知道如何处理该文件。
URL findResource(name): C:\foo\bar.xml
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7905 次 |
| 最近记录: |