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

时间:2014-03-28 11:35:35

标签: playframework-2.0 sbt

我是一个Play框架& SBT新手。

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

我已经能够在" Play Console"通过在我的build.sbt中添加以下模式     运行时中的unmanagedClasspath + =文件(" / mybundle")

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

我发现我的课无法阅读该课程。 (在#34;播放控制台"模式下,这很好)。 然后我注意到在生成的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

我修改该行以添加我的文件夹,以便它变为

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

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

但是,上述工作必须手动完成,我想将其外化。

我试图解决的问题如下:

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

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

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

  4. BTW我也试过在调用脚本文件时附加-classpath,即 ./simpleproject -classpath" / mybundle" 但它会生成"错误的应用程序路径:-cp"错误。 当我用-cp替换-classpath时的情况相同。

    任何人都可以就上述事项提出建议吗?

2 个答案:

答案 0 :(得分:2)

将它们包括在分发中吗?如果是这样,请执行以下操作:

unmanagedResourceDirectories in Compile += file("/mybundle")

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

libdir=...
java -classpath "/mybundle:$libdir/*" ...

答案 1 :(得分:2)

添加到build.sbt的行:

scriptClasspath in bashScriptDefines ~= (cp => "../../mybundle" +: cp)

将导致

declare -r app_classpath="$lib_dir/../../mybundle:$lib_dir/../conf/:etc...

在启动脚本中。因此可以将相对路径条目添加到应用程序类路径中。