5

現在、sbt-native-packagerを使用して、scala アプリケーションの開始スクリプトを生成しています。を使用してpackageArchetype.java_applicationいます。sbt でスクリプトを作成します。

sbt clean myproject/stage

lib次に、作成したディレクトリとディレクトリをインストール ディレクトリにコピーして、アプリケーションを「インストール」しますbin。私はそれを誰にも配布していないので、実行可能な jar や tarball などを作成していません。クラスをコンパイルし、jar とすべてのライブラリ依存 jar を 1 か所に配置して、開始スクリプトを実行できるようにします。

ここで、アプリケーションに 2 つ目のメイン クラスを追加したいので、target/universal/stage/bin実行時に2 つ目の開始スクリプトが表示されるようにしますsbt stage。同じスクリプトになると思いますが、名前がapp_mainclass異なり、異なるクラスに設定されています。どうすればいいですか?

4

3 に答える 3

3

sbt-native-packager によって生成されたスクリプトを使用すると-main、実行するメイン クラスを指定する引数を渡すことができます。という名前のプロジェクトに対して私が行うことは次のfooとおりです。

run.shsbt-native-packager によって生成されたスクリプトを呼び出す、必要な一般的なオプションを指定してスクリプトを作成します。

#!/bin/bash

./target/universal/stage/bin/foo -main "$@"

次に、実行するメイン クラスごとに個別のスクリプトを作成します。例first.sh:

#!/bin/bash

export JAVA_OPTS="-Xms512m -Xmx512m"

./run.sh com.example.FirstApp -- "$@"

second.sh:

#!/bin/bash

export JAVA_OPTS="-Xms2048m -Xmx2048m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC"

./run.sh com.example.SecondApp -- "$@"
于 2015-11-05T17:15:08.497 に答える
2

複数のメイン クラスを持つことは現在サポートされていません。回避策として、単一のメイン クラスを使用し、コマンド ライン引数を確認することができます。アプリの起動:

myApp prog1

あなたのメインクラスで:

def main(args: Array[String]): Unit = {
  if(args[0] == "prog1")
    Programm1.start()
  else 
    Programm2.start()
}
于 2014-08-01T06:51:03.380 に答える