在Play类路径中添加外部文件夹

Sim*_*014 7 sbt playframework-2.0

我是Play框架和SBT新手.

在我的Play for Java项目中,在其中一个类中,我需要使用ResourceBundle.getBundle()读取Play应用程序之外的属性文件.

通过在Runtime + = file("/ mybundle")中的build.sbt unmanagedClasspath中添加以下内容,我已经能够在"Play Console"模式下执行此操作

由于我需要在"生产"模式下运行应用程序,我尝试播放dist,然后解压缩压缩文件,然后转到"bin",然后在bin文件夹中运行生成的shell脚本.

我发现我的班级没能读到这个包.(这在"Play Console"模式下很好).然后我注意到在生成的shell脚本中运行播放,有以下内容

declare -r app_classpath="$lib_dir/com.foo.abc-web-1.0-SNAPSHOT.jar:$lib_dir/com.foo.abc-common-1.0-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)

我修改该行以添加我的文件夹,因此它将成为

declare -r app_classpath="/mybundle:$lib_dir/com.foo.simpleproject-web-1.0-SNAPSHOT.jar:$lib_dir/com.foo.abc-common-1.0-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)

然后使用shell脚本重启我的播放应用程序,我的应用程序可以正确读取包.

但是,上面的工作必须手动完成,我想将其外化.

我想解决的是以下内容:

  1. 有没有办法让我在build.sbt中指定的bundle文件夹可以在play dist中重用?

  2. 或者,如果无法实现上述目标,那么在播放dist期间,有没有办法指定所以我的文件夹(即"/ mybundle")会被添加到app_classpath中,如上所述?

  3. 有没有办法在"播放控制台"模式下在build.sbt中外化我的文件夹?

BTW我也试图在调用脚本文件时附加-classpath,即./simpleproject -classpath"/ mybundle"但是它会生成"Bad application path:-cp"错误.使用-cp替换-classpath时的情况也是如此.

任何人都可以给出上述建议吗?先谢谢你.

Jam*_*per 2

将它们包含在发行版中是一种选择吗?如果是这样,只需执行以下操作:

unmanagedResourceDirectories in Compile += file("/mybundle")
Run Code Online (Sandbox Code Playgroud)

除此之外,生成启动脚本的 SBT 本机打包程序无法为您提供这种灵活性。但是您可以编写自己的启动脚本,将其放入dist/bin/my-start-script.sh您的项目中,它最终会出现在bin您的发行版目录中,然后您就可以使用它了。确保类路径正确的一个简单方法是使用通配符类路径,即:

libdir=...
java -classpath "/mybundle:$libdir/*" ...
Run Code Online (Sandbox Code Playgroud)