「 stage 」タスクを使用してWindows Server Server 2012で2つのアプリケーションを再生しようとしています。これをサービスにまとめて、サーバーの再起動時にアプリケーションが自動的に実行されるようにすることを目的としています。ただし、アプリを実行すると、次のメッセージが表示されます。
The input line is too long.
The syntax of the command is incorrect.
これは、Windowsのコマンドライン命令の文字数が 8000文字以内 であるためですが、クラスパスを引数として渡すことで、Playステージコマンドがこれを超えているようです。
「stage」フォルダをc:\mightにコピーすると、問題が修正されます(クラスパスのサイズが小さくなるため)が、そうなることを期待していました。よりエレガントなソリューションになります。
誰かがこれを回避する方法を見つけましたか?または、サーバーの再起動時に自動的に実行されるように、WindowsでPlayアプリケーションを実行するための提案がありますか。
ありがとう。
更新:sbtネイティブパッケージャーには、これに対する多くの組み込みソリューションが付属しています。以下のNieMaszNicの回答を参照してください。
これは既知の問題であり、SBTネイティブパッケージャー(開始スクリプトを生成する)で追跡されています。
https://github.com/sbt/sbt-native-packager/issues/72
この問題を回避するための私の推奨事項は、ワイルドカードクラスパスマッチャーを使用する独自の開始バッチスクリプトを作成することです。このスクリプトは、Playプロジェクトのdist
ディレクトリに置くことができ、最終的にはアプリケーションにパッケージ化されます。そのスクリプトは次のようになります。
Java %1 -cp "./lib/*;" play.core.server.NettyServer .
ワイルドカードクラスパスマッチャーを使用する場合、クラスパスの順序が開発モードと同じであることに依存できなくなることに注意してください。とにかくクラスパスの順序に依存するべきではありませんが、人々は必然的に依存します。
私も同じ問題を抱えていて、あなたが提供した解決策に満足していませんでした。
もっと簡単な解決策を見つけました。
Build.sbtファイルに次の行を追加します
lazy val root = (project in file(".")).enablePlugins(PlayScala, LauncherJarPlugin)
ここで、次を使用して本番アプリケーションを生成する場合:
sbt dist
またはで本番モードを実行します
sbt start
LauncherJarPluginプラグインは、適切なbash /バッチ実行スクリプトの生成を処理します。
LauncherJarPluginの詳細については、次のドキュメントをお読みください。
Jamesの提案を考慮に入れると、次のソリューションはPlay2アプリケーションで機能します。
play clean stage
を実行します「dist」ディレクトリに配置されたファイルは「universal」ディレクトリ(「bin」ではなく)に配置されるため、ホーム変数を変更する必要があります。つまり、最後の2つのピリオドを削除して、に移動しないようにします。親ディレクトリ(現在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%\\*"
重要:アップグレードするたびにこのファイルを再作成することをお勧めします
将来のリリースでビルドスクリプトが変更された場合に備えて再生してください。
Batファイルの最長行を次のように変更します。
set "APP_CLASSPATH=%APP_LIB_DIR%\..\conf\;%APP_LIB_DIR%\ *"
set "APP_MAIN_CLASS=play.core.server.ProdServerStart"
最初にLauncherJarPlugin
を有効にする
lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean, LauncherJarPlugin)
次に、プロダクションモードでプレイを開始したい場合は、アクティベーターを使用できます。
activator clean compile stage testProd
または高速バージョン:
activator testProd
これは本番モードで再生を実行します。コマンドにstage
を追加する必要があるかどうかはわかりません。これは、すでにtestProd
でビルドされていると確信しているためですが、確認することをお勧めします。ステージバージョンを構築しました。