如何指定war文件中的资源路径?

时间:2015-12-04 07:05:05

标签: java spring maven ubuntu-14.04 relative-path

我使用文本编辑器使用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目录中。

1 个答案:

答案 0 :(得分:1)

您可能会遇到从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对象创建文档。