簡體   English   中英

如何指定war文件中的資源路徑?

[英]How to specify path to resources inside a war file?

我使用文本編輯器使用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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM