在 Play dev 和 prod 模式下访问文件

Posted

技术标签:

【中文标题】在 Play dev 和 prod 模式下访问文件【英文标题】:Accessing files in Play dev and prod mode 【发布时间】:2015-07-30 22:22:35 【问题描述】:

我在跨应用运行模式以通用方式访问某些文件时遇到问题。 我在应用程序根文件夹中有文件夹“资源”,其中包含一些重要文件。 当我在开发模式下运行时,我以简单的方式访问它们,例如:

Play.application().path().getAbsolutePath()+"/resources/file.file";

但是在我通过 dist 命令打包我的应用程序后(我修改了 build.sbt 以便将“resources”文件夹复制到 conf 和 lib 文件夹附近),由于这一行,上面的代码停止工作

Play.application().path().getAbsolutePath()

现在返回 bin 文件夹的路径,app.bat 从该文件夹运行。因此,如果在 dev 模式下,上面的代码返回正确的路径,如 X:/app/resources/file.file,在 prod 模式下,它就像 X:/app/bin/resources/file.file 不正确。

附:由于许多实际上并不重要的原因,我绝对不能将我的文件放在 conf 文件夹中并作为资源从类加载器访问它们。

所以问题就这么简单:如何以通用的方式跨模式访问这些文件资源,而无需任何硬编码。 提前 TY。

【问题讨论】:

【参考方案1】:

Application 上有一个方法可以让您访问应用程序根目录中的文件。

https://playframework.com/documentation/2.4.x/api/java/play/Application.html#getFile-java.lang.String-

default java.io.File getFile(java.lang.String relativePath)

获取相对于应用程序根路径的文件。

参数:relativePath - 要获取的文件的相对路径

返回:一个文件实例——不保证文件存在

既然你已经有了application,你应该可以用这个方法直接访问文件了。

【讨论】:

以上是关于在 Play dev 和 prod 模式下访问文件的主要内容,如果未能解决你的问题,请参考以下文章

Play Framework 2.4.1:在测试模式下忽略 play.application.loader 设置

Play Framework:生产和开发模式下的不同图标

在生产模式下访问 Play 框架的嵌入式 H2 数据库

PlayFramework HTTPS 仅在 prod 模式下路由,HTTP 在 dev 模式下

404 API 请求,在 prod 模式下分页,但在 dev 中工作

Scala Play Production 开始无法正常工作(资产文件夹不可用)