我正在尝试使用“stage”任务在Windows Server Server 2012上播放2个应用程序,目标是将其包装在服务中,以便应用程序在服务器重新启动时自动运行。但是,在运行应用程序时,我收到以下消息:
The input line is too long.
The syntax of the command is incorrect.
这是因为Windows的命令行指令有limit of around 8000个字符,但似乎Play阶段命令通过将类路径作为参数传递而超出此范围。
将“stage”文件夹复制到c:\ 可能会修复问题(因为它会减少类路径的大小),但我希望有一个更优雅的解决方案。
有没有人找到解决方法?或者,人们对在Windows上运行Play应用程序有任何建议,以便在服务器重新启动时自动运行。
感谢。
答案 0 :(得分:19)
更新:sbt native packager现在提供了许多内置的解决方案,请参阅下面的NieMaszNic的答案。
这是一个已知问题,在SBT本地打包程序(生成启动脚本)中进行跟踪:
https://github.com/sbt/sbt-native-packager/issues/72
我解决此问题的建议是编写自己的使用通配符类路径匹配器的启动批处理脚本。您可以将此脚本放在Play项目的dist
目录中,最终将与您的应用程序打包在一起。该脚本可能如下所示:
java %1 -cp "./lib/*;" play.core.server.NettyServer .
请注意,如果使用通配符类路径匹配器,则不能再依赖类路径排序与开发模式中的相同。你不应该依赖类路径排序,但人们不可避免地会这样做。
答案 1 :(得分:19)
我也有同样的问题,我对你提供的解决方案不满意。
我找到了一个更简单的解决方案。
将以下行添加到build.sbt文件
<button>
<svg width="200px" height="100px">
<polygon points="165.083,84.769 15.971,84.769 15.971,28.227 33.742,11.263 185.114,11.263 185.114,66.837 "/>
<text x="100" text-anchor="middle" y="55">CLICK ME</text>
</svg>
</button>
现在,如果您使用以下命令生成生产应用程序:
lazy val root = (project in file(".")).enablePlugins(PlayScala, LauncherJarPlugin)
或使用
运行生产模式sbt dist
LauncherJarPlugin插件将负责生成正确的bash / batch run scrips。
要了解有关LauncherJarPlugin的更多信息,请阅读文档:
答案 2 :(得分:11)
考虑到James的建议,以下解决方案适用于Play 2应用程序。
play clean stage
放在“dist”目录中的文件放在“通用”目录(而不是“bin”)中,因此您需要更改主变量,即删除最后两个句点,以便它没有导航到父目录(目前在第11行), 例如
if "%WEB_PORTAL_HOME%"=="" set "WEB_PORTAL_HOME=%~dp0\\.."
<强>变为:强>
if "%WEB_PORTAL_HOME%"=="" set "WEB_PORTAL_HOME=%~dp0"
然后,您需要根据James的说明更改类路径,以使用通配符而不是显式列出所有JAR文件(此时此位于第91行) 例如
set "APP_CLASSPATH=%APP_LIB_DIR%\web-portal.web-portal-1.0-SNAPSHOT.jar;%APP_LIB_DIR%\commons-c.....
<强>变为:强>
set "APP_CLASSPATH=%APP_LIB_DIR%\web-portal.web-portal-1.0-SNAPSHOT.jar;%APP_LIB_DIR%\\*"
重要提示:我建议您每次升级时重新创建此文件
播放以防将来版本中的构建脚本更改。
答案 3 :(得分:1)
使用以下命令更改bat文件中的最长行:
if(jsonObject.getString("success").equals(" Welcome teste")){
Toast.makeText(getApplicationContext(),"SUCCESS "+jsonObject.getString("success"),Toast.LENGTH_SHORT).show();
startActivity(new Intent(getApplicationContext(),aprenderActivity.class));
}else {
Toast.makeText(getApplicationContext(), "Error" +jsonObject.getString("error"), Toast.LENGTH_SHORT).show();
}
答案 4 :(得分:0)
首先启用LauncherJarPlugin
lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean, LauncherJarPlugin)
然后,如果您只想开始使用生产模式,您可以使用激活器:
activator clean compile stage testProd
或快速版:
activator testProd
这将在生产模式下运行,我不确定你是否必须添加stage
来命令,因为我很确定它已经用testProd
建立,但它更好用确定你建立了舞台版本。