Playframework 从'/形态';Cloudbees上的目录 我们的工作:

Playframework 从'/形态';Cloudbees上的目录 我们的工作:,playframework,playframework-2.0,cloudbees,Playframework,Playframework 2.0,Cloudbees,我们在Cloudbees上运行Play2应用程序,并从“/conf”目录(在应用程序的类路径内)加载一个文件 这两个代码段在本地和heroku中工作 Play.application().getFile("conf/myfile.json") 及 但是,在Cloudbees上,我们得到FileNotFoundException: 那么,如何从Cloudbees上的类路径加载文件?嗯,“/conf”中的文件位于类路径中,而不是文件系统中,因此我们需要以这种方式加载文件: Play.applica

我们在Cloudbees上运行Play2应用程序,并从“/conf”目录(在应用程序的类路径内)加载一个文件

这两个代码段在本地和heroku中工作

Play.application().getFile("conf/myfile.json")

但是,在Cloudbees上,我们得到FileNotFoundException:
那么,如何从Cloudbees上的类路径加载文件?

嗯,“/conf”中的文件位于类路径中,而不是文件系统中,因此我们需要以这种方式加载文件:

Play.application.resourceAsStream("myfile.json")
//.resource() also works - depends what we want
请注意,我们没有将“conf”放在路径中-其中的文件位于根目录的类路径上。

请注意,在生产环境中,它来自jar/zip,而不是文件,因此getFile在使用中有些误导

Cloudbees的Michael Neale打开了这一期:


Cloudbees文档已更新:

Heroku似乎通过“play start”或“play run”运行play应用程序,这不是建议在生产环境中运行play应用程序的方式-这解释了为什么在那里可以看到“conf”-尽管这可能会在未来版本的play中发生变化。

我使用的是play 2.4。对我有用的是

import play.Play;
import org.apache.commons.io.IOUtils;

  String myfile = IOUtils.toString(Play.application().resourceAsStream("myfile.json"));

注意:
application()
被称为静态方法。

我认为它在Heroku上可以工作,因为他们不以生产方式运行play-他们只是运行play CLI来启动它,所以它在那里工作纯属偶然。不确定play api何时会发生变化,但我不得不使用play.application().resourceAsStream而不是Play.application.resourceAsStream如果我想要一个不是配置文件的文件,该怎么办?我不喜欢将与conf无关的文件放在conf dir中,这样我就可以通过resourceAsStream()访问它们。
conf/
目录中的文件打包为'lib/'文件夹中的
default appname version.jar
。因此正确的理解应该是,默认jar中的所有文件都是可访问的。但是,在使用dist`命令创建的zip归档文件中还有一个
conf/”文件夹。此
conf/
文件夹中的文件不在类路径中。
Play.application.resourceAsStream("myfile.json")
//.resource() also works - depends what we want
import play.Play;
import org.apache.commons.io.IOUtils;

  String myfile = IOUtils.toString(Play.application().resourceAsStream("myfile.json"));