1

いくつかのロジックがあり、すべてのサーブレットと同じようにブラウザを介して使用されるサーブレットがあります。今、サーブレットと同じことを行うメソッドを探していますが、CLIのように機能するはずです。CLIは、JBossにデプロイされたロジック(warファイル内のクラス)にリクエストを送信し、ターミナル(コマンドライン)にレスポンスを出力します。同じロジックをトリガーし、すべてのものをこの1つのwarファイルに配置する必要があります。

それで、この機能を提供するJavaコードを書くとしましょう。jarにコンパイルして戦争に配置し、次にこのjarを戦争から起動する必要があります。サーブレットである必要はありません。唯一の要件は、すべてがこの1つのwarファイルに含まれている必要があることです。CLIは、java -cpjarfileinwarcom.blah.Mainのように1行で呼び出す必要があります。

ロジックは、すべてがデプロイされているJBoss JVMで機能する必要があり、サーブレットのように機能する必要がありますが、呼び出し方法はCLIである必要があります。

挨拶

4

2 に答える 2

0

実行可能な jar ファイルは、war ファイルとは異なる構造を持っているため、実行可能な war ファイルを作成しようとして成功するとは思えません。

ただし、必要なクラスと jar 依存関係からのクラスを 1 つの大きな「uber jar」に再パッケージ化し、適切なマニフェスト エントリを使用してその実行可能ファイルを作成できます。

これを手作業で行うのは簡単ではないため、ビルド ツールを使用してこれを行うことをお勧めします。Maven には 2 つのプラグインがあります。Shade プラグインと、これを非常に簡単に実行できる新しい (私が思うに) Maven Assembly プラグインです。

Maven を使用する利点は、2 つの異なるターゲットを使用できることです。1 つは war ファイルをビルドし、もう 1 つは実行可能な jar ファイルを同じプロジェクトからビルドします。

于 2013-01-04T22:05:18.613 に答える
0

私はそれについて考えるのをやめることができませんでした。元の投稿にコメントしたように、WAR 内で実行可能な JAR を模倣することで、WAR ファイルを実行可能にすることができると考えました。

Maven 3 Web プロジェクト arche タイプ (基礎として) の上に、これを実際に実装する概念実証プロジェクトを少し作成しました。

見てみましょう:

https://github.com/is-already-taken/executable-war-example

これは、カスタム クラスローダー ( javablogging.com のクラスローダーに関するこの記事が役に立ちました) を使用します。これは、カスタム クラス ローダーとカスタム マニフェストを使用してビジネス ロジックの最初の部分をロードする「ブートストラップ」クラスです。クラスローダーは、クラスのロードを「インターセプト」して、WAR ファイル内でクラスが通常配置されている場所でクラスを検索し、ストリーミングされた unzip コードを使用して WAR ファイル内にパッケージ化されたライブラリからクラスを抽出するために使用されます。

すぐに使えるソリューションや Maven プラグインに付属する何かがまだあるかもしれませんが、私はそれを見つけられませんでした。さらに、この小さな概念実証は、クラスのクローダについても学習するのに役立ちました。;)

私のソリューションと一般的なアプローチについてのコメントを楽しみにしています。

于 2013-01-16T21:34:34.143 に答える