我是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
我修改该行以添加我的文件夹,因此它将成为
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脚本重启我的播放应用程序,我的应用程序可以正确读取包。
但是,上面的工作必须手动完成,我想将其外化。
我想解决的是以下内容:
BTW我也试图在调用脚本文件时附加-classpath,即./siproproject -classpath“/ mybundle”但是它会生成“Bad application path:-cp”错误。使用-cp替换-classpath时的情况也是如此。
有人可以就上面提出建议吗?
是否包括他们在分配中的选项?如果是这样,请执行以下操作:
unmanagedResourceDirectories in Compile += file("/mybundle")
除此之外,生成启动脚本的SBT本地打包程序并不能提供这种灵活性。但是您可以编写自己的启动脚本,将其放在项目中的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...
在开始脚本中。因此可以将相对路径条目添加到应用程序类路径中。