“它在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]
2条答案
按热度按时间6mzjoqzu1#
这可能有点晚了,但我最近在Windows上遇到了同样的错误,并用一个肮脏的黑客修复了它。我希望未来寻找同样问题的人会发现这对他们的问题有用。
首先,eclipse以一种不同的方式“运行”你的Sping Boot 应用程序。它不做
java -jar foo.jar
,而是直接引用所有的类和库,即java -classpath xxx/target/classes:a.jar:b.jar...
。所以在eclipse中运行的时候会有不同的表现。我想您遇到的情况和我一样,您有一个Sping Boot 应用程序,您希望将其打包为可执行jar,您引用了外部依赖项,但无法修复这些外部依赖项中的错误。
我发现,在我使用的外部库内部的某个地方生成了一个临时文件,并使用Java的
ClassLoader
阅读该文件,但Sping Boot 的LaunchedURLClassLoader
无法处理Windows的“x:\”语法在我的情况下,它是
因此,这个方法是构建自己的
LaunchedURLClassLoader
,并将其替换到可执行jar中。如果您打开可执行jar,您将在org\springframework\boot\loader
下找到LaunchedURLClassLoader.class
。这个想法是将C:\foo\bar.xml
替换为file:///C:/foo/bar.xml
,这样Java ClassLoader就知道如何处理该文件。qyzbxkaa2#
我在使用JasperReport时遇到了这个问题,当我在文本编辑器中打开JRXML文件时,我解决了这个问题,例如(记事本,记事本++).在这个文件里面有几个对“name”标记的引用,其中一个,是引用硬盘上固定路径中的一个图像,导致,当我在另一台机器上运行应用程序时,直接通过jar文件,将显示错误“java.lang .非法参数异常:名称”
为了解决这个问题,我删除了一个硬引用图像,如下图所示:
[“D:\项目\报告\徽标. png”]
并将图像作为报表参数中的ImputStream传递给JRXML