如何解决以JAR格式导出时,资源不会加载
使用以下代码设置系统属性:
ClassLoader classLoader = StartMain.class.getClassLoader();
URL resource = classLoader.getResource("com/myname/lib/chromedriver/chromedriver.exe");
File f = new File("Driver");
if (!f.exists()) {
f.mkdirs();
}
File chromeDriver = new File("Driver" + File.separator + "chromedriver.exe");
if (!chromeDriver.exists()) {
chromeDriver.createNewFile();
org.apache.commons.io.FileUtils.copyURLToFile(resource,chromeDriver);
}
当我在IDE IntelliJ中运行我的应用程序配置时,这非常理想。但是,当我构建一个JAR并尝试在IntelliJ之外使用它时,资源URL返回为null。为什么会这样?
解决方法
通过类加载器是有风险的。它可能无法解释您的问题,但可能可以;无论如何,这种替代方法更短,更简单,更惯用,可在您需要的所有地方使用,并在更多的地方使用:
获取资源的最佳方法如下:
StartMain.class.getResource("/com/myname/lib/chromedriver/chromedriver.exe");
请注意,这个以斜杠开头!如果您不这样做,则此样式与您自己的类文件位置(基本上是您的包)有关。
任何一种形式都将查找条目:
/com/myname/lib/chromedriver/chromedriver.exe
位于StartMain.class
所在的同一jar中。如果不存在,则显然无法正常工作-修复您的构建,使其包含在内。在“运行时”,类路径中的某些文件夹可能会解析此文件;如果在构建过程中没有将该文件夹折叠到您的jar中,那将解释为什么它可以在IDE中工作,而不能在其他地方工作。
注意:您通常不需要任何Apache utils。例如,有InputStream的transferTo
也可以使它变成单线(取而代之的是获取getResourceAsStream
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。