在 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 设置
PlayFramework HTTPS 仅在 prod 模式下路由,HTTP 在 dev 模式下