【问题标题】:How relative paths to .war work?.war 的相对路径如何工作?
【发布时间】:2017-07-27 10:07:16
【问题描述】:

我有一个 Spring Boot 应用程序,我尝试将其部署到 .war 以从 Tomcat 服务器运行它。

在此之前,我正在部署到一个可执行的 .jar 并且一切正常。

在应用程序中,我需要读取一个 .json 文件并读取一个目录,它们的位置是相对的。部署到 .jar 时,我会将文件放在与 .jar 相同的文件夹中。我将访问它:./branchMap.json。该目录也将与 jar 位于同一文件夹中,我将访问它:./patches

现在,当我部署到 .war 时,我将应用程序放在 Tomcat 的 webapps 中,并将 json 文件和文件夹也放在 webapps 中。当我运行应用程序时,它能够读取 json 文件,但无法读取 /patches 文件夹。

为什么会这样?我已经看到 Tomcat 尝试将 /patches 文件夹作为应用程序加载,在 tomcat 管理器中列出。这对尝试读取该文件夹的应用程序有何影响?部署到战争的应用访问相对路径的方式有什么不同吗?

【问题讨论】:

    标签: java spring tomcat spring-boot path


    【解决方案1】:

    从属性文件中读取补丁文件夹位置,在属性文件中您可以提及补丁文件夹的完整路径。

    【讨论】:

    • 这不是一个解决方案,因为我希望能够在不同的机器上部署 jar
    • 在这种情况下,您可以进行集中配置。对于不同的机器,您可以在集中配置服务器中创建具有相同路径的补丁文件夹。
    • 是的,我可以这样做,但我的问题更多是关于为什么只有在部署到战争时才会发生这种情况,为什么可执行 jar 工作
    • 作为独立 jar 运行时,jar 文件位置位于类路径下。所以只有你没有遇到任何问题。但是,当在 tomcat 服务器中作为 jar 运行时,webapps/${application}/WEB-INF/classes 下的应用程序文件夹将成为类路径文件夹。因此,如果您将文件保存在特定文件夹中(webapps/${application}/WEB-INF/classes),那么您的应用程序可能可以读取。你可以试试……
    猜你喜欢
    • 2018-06-04
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多