Playframework 2.0 在播放类路径中添加外部文件夹

Playframework 2.0 在播放类路径中添加外部文件夹,playframework-2.0,sbt,Playframework 2.0,Sbt,我是一个游戏框架&SBT新手 在我的Play for Java项目中,在其中一个类中,我需要使用ResourceBundle.getBundle()读取Play应用程序外部的属性文件 我已经能够在“Play Console”模式下通过在我的build.sbt中添加以下内容来实现这一点 运行时中的unmanagedClasspath+=文件(“/mybundle”) 由于我需要在“生产”模式下运行应用程序, 我尝试执行playdist,然后解压缩压缩文件,然后转到“bin”,然后在bin文件夹中运

我是一个游戏框架&SBT新手

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

我已经能够在“Play Console”模式下通过在我的build.sbt中添加以下内容来实现这一点 运行时中的unmanagedClasspath+=文件(“/mybundle”)

由于我需要在“生产”模式下运行应用程序, 我尝试执行playdist,然后解压缩压缩文件,然后转到“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
我修改该行以添加我的文件夹,使其成为

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脚本重新启动我的play应用程序,我的应用程序就可以正确地读取捆绑包了

然而,上述工作必须手动完成,我想将其外部化

我试图解决以下问题:

  • 我在build.sbt中指定的bundle文件夹是否可以在play dist中重用

  • 或者,如果在play dist期间无法执行上述操作,是否有任何方法可以指定将我的文件夹(即“/mybundle”)添加到上述应用程序的类路径

  • 在“播放控制台”模式下,是否有办法将我的文件夹外部化到my build.sbt中

  • 顺便说一句,我还尝试在调用脚本文件时附加-classpath,即 ./simpleproject-classpath”/mybundle 但是,它会生成“错误的应用程序路径:-cp”错误。 当我用-cp替换-classpath时也是这样


    有人能就上述内容提供建议吗?

    是否可以将其纳入发行版?如果是这样,就这样做:

    unmanagedResourceDirectories in Compile += file("/mybundle")
    
    除此之外,不,生成启动脚本的SBT native packager并没有给您这种灵活性。但是,您可以编写自己的开始脚本,将其放入项目中的
    dist/bin/my start script.sh
    ,然后它将最终出现在发行版的
    bin
    目录中,然后您就可以使用它了。确保类路径正确的简单方法是使用通配符类路径,即:

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

    添加到build.sbt的行:

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

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

    在开始脚本中。因此,可以将相对路径条目预先添加到应用程序类路径中。

    在我的场景中,分发捆绑文件不是一个选项。捆绑文件将由SCM管理,并且根据环境的不同,文件夹路径会有所不同。由于需要对所有环境使用相同的发行版,我发现是否有可能将该包的文件夹路径外部化。感谢您的帮助,James。对于我来说,在Compile+=文件(“/mybundle”)中添加非托管源目录并不能解决问题/mybundle没有出现在app_classpath=“…”中,老实说,这么简单的任务在sbt中是一个巨大的痛苦,这是非常令人沮丧的。sbt中有半打类路径设置,没有一个可以帮助您哇,谢谢!它的工作原理非常完美,但是如果它没有在前面连接
    $lib_dir/
    ,那就太好了。