java – 如何指定war文件中资源的路径?
作者:互联网
我使用文本编辑器使用maven和spring框架构建我的项目.
我可以使用终端上的命令运行项目根文件夹
mvn spring-boot:run
我使用java语句引用了java文件中的源文件
Document doc = builder.parse("src/main/resources/data/resorts.xml");
一切正常.
当我使用该命令将整个项目导出为war文件时
mvn package
在终端上
我在根目录的目标文件夹中获得了一个war文件
我使用命令运行war文件
java -jar filename.war
没有编译错误,但在运行时它显示错误java.io.FileNotFoundException
我想我没有正确指定参考文件的路径
你能提一下如何在路径字符串中提到相对路径,以便能够从war文件中运行它.
我的目录结构是
.
|-- src
| `-- main
| |-- java
| | `-- hello
| | `-- org
| | `-- json
| `-- resources
| |-- data
| `-- templates
`-- target
|-- classes
| |-- data
| |-- hello
| |-- org
| | `-- json
| `-- templates
|-- generated-sources
| `-- annotations
|-- gs-handling-form-submission-0.1.0
| |-- META-INF
| `-- WEB-INF
| |-- classes
| | |-- data
| | |-- hello
| | |-- org
| | | `-- json
| | `-- templates
| `-- lib
|-- maven-archiver
`-- maven-status
`-- maven-compiler-plugin
`-- compile
`-- default-compile
33 directories
java文件位于hello目录中.
解决方法:
您可能遇到从URI类接收的路径到位于jar内的文件的问题.
Application.class.getClassLoader().getResource("path-to/filename.txt").getPath()
输出:/path-to-your/application.jar!/path-to/filename.txt
如果您尝试创建File对象或Stream到该路径,它将失败并出现FileNotFoundException
如果可能,您应该更改类Document以接收文件或InputStream的内容.
然后,您可以使用类加载器来获取文件的流而不是路径.
在你的情况下:
InputStream is = Application.class.getClassLoader()
.getResourceAsStream("data/resorts.xml");
然后使用is对象创建Document.
标签:java,spring,maven,relative-path,ubuntu-14-04 来源: https://codeday.me/bug/20190706/1397709.html