11

EclipseにScalaプロジェクトがあり、サーバーにデプロイできるようにパッケージ化する必要があります。Jettyに基づいていますが、スタンドアロンアプリケーションとして実行されます。これには、Scalaクラス、Javaクラス、および多数のサードパーティjarが含まれています。

Scala Eclipseプラグインにはある種のデプロイメントオプションがあると思いましたが、空白を描画しました。

Scalaプロジェクトを実行可能なファイルにパッケージ化してデプロイできるようにする最も簡単な方法は何ですか?

どんな助けでも大歓迎です。乾杯。

4

5 に答える 5

5

多くの試行錯誤の末、これは配布用にScalaアプリをパッケージ化するために私が見つけた最良の方法です。

まず、Gary Boonの説明に従って、アプリケーションのメインエントリポイントとなるJavaクラスを作成します。これにより、javaコマンドを使用してJARからアプリケーションを実行できます。ソースパスにScalaライブラリがある場合でも、javaコマンドでScalaクラスを実行すると問題が発生することがわかりました。

import java.util.ArrayList;

import scala.tools.nsc.MainGenericRunner;


public class Main { 
    public static void main (String[] args) {
        ArrayList<String> argList = new ArrayList<String>();
        argList.add("fully.qualified.ClassName");
        for (String s : args) {
            argList.add(s);
        }
        MainGenericRunner.main(argList.toArray(new String[0]));
    }
}

これで、EclipseのExport Runnable JARコマンドを使用して、すべてのクラスとライブラリをJARファイルにパッケージ化できます。JARのメインクラスをJavaエントリポイントに設定します。Eclipseで生成された出力設定をANTビルドファイルとして保存して、調整を行うこともできます。ANTを使用してJavaエントリポイントでJARを作成すると、最良の結果が得られました。この方法で他のJAR依存関係をパッケージ化することもできます。これにより、別のホストでJARを実行しようとするときに非常に簡単になります。少なくとも、ScalaライブラリとScalaツールJARが必要になります。

<zipfileset excludes="META-INF/*.SF" src="${scala.lib.jar}"/>
<zipfileset excludes="META-INF/*.SF" src="${scala.tools.jar}"/>

私のように組み込みJettyを使用している場合は、次のコマンド(ソース)を使用してサーバーをデーモンプロセスとして実行できます。

nohup java -jar MyJettyServer.jar < /dev/null >> server.log 2>> server_error.log &

これにより、現在のユーザーセッションに依存しないバックグラウンドプロセスとしてプログラムが実行されるため、ホストからログアウトした後もプロセスが続行されます。

于 2010-05-29T02:39:50.137 に答える
5

Sbtは、Webアプリケーションのデプロイメントをサポートします。もちろん、Ant、Maven、または別のビルドツールを使用して、Jettyデプロイメント用にWARをパッケージ化できます。Eclipseから外部ツールとしてsbtを開始できます。

SbtはJRebel構成をサポートしているようです。実行すると、追加の戦争展開手順なしで、Eclipseからリソースとクラスを変更できるようになります。

于 2010-05-27T14:00:55.497 に答える
2

私はまったく同じことをしています。Jettyを埋め込んだプレーンなアプリケーション内で実行されるサーバー側のコードを開発することです。現在はほとんどがScalaコードであり、以前はJavaでした。どちらの方法でも、1つ以上のJARファイルからJavaコードを実行するだけです。

どちらの場合も、デプロイメントビルドにAntを使用します。私のScalaプロジェクトは、既存のJavaクラスを使用することがあります。そのために、JavaクラスをJARにコンパイルするAntターゲットを追加します。これは、その後、EclipseScalaプラグインとAntデプロイビルドターゲットの両方で使用されます。

于 2010-05-27T15:00:50.950 に答える
2

簡単な解決策は、Scalaプログラムのmainメソッドを呼び出す小さなJavaクラスを作成することです。次に、標準のeclipsejarエクスポートを使用できます。

public class Main { 
    public static void main (String[] args) {
        MyScalaObjectWithMainMethod.main(args);
    }
}

重要:エクスポートする前に、scala-library.jarが(ライブラリとしてではなく)外部jarとしてビルドパスにあることを確認して、jarと一緒にエクスポートされるようにしてください。

この解決策は、 Gary Booneのページ(やや複雑なアプローチを提案している)のJesperVilladsenによるコメントとして見つかりました。Garyのソリューションを実行するのに問題がありましたが、Jesperによるこのソリューションは私にとって完璧に機能します。ありがとう!

于 2012-09-23T15:23:44.827 に答える
0

Javaの場合と同じように、Eclipseの機能を使用してWARファイルを作成します。または、Javaの場合と同じようにjarファイル。なぜなら、実行時にはJavaだからです。これ以上の魔法は必要ありません。

于 2010-05-27T23:37:18.527 に答える