5

一連の依存関係 (Apache Commons libs など) と、Spring フレームワークへの依存関係を持つスタンドアロンの Java アプリケーションを作成しました。

私はこれを Eclipse で構築しましたが、正常に動作します。今、私はそれを本番環境にデプロイする必要があるので、すべての依存関係と一緒にパッケージ化する最良の方法と、それを呼び出す方法を見つけようとしています (コマンドラインから呼び出されます)。

強引な方法は、私のプロジェクトを jar としてエクスポートし、すべての依存 jar (およびその依存関係) を見つけて、それらを共通ディレクトリにコピーし、クラスパス上のすべてを含むシェル スクリプトを作成して実行することです。明らかに、それは愚かで退屈に思えます。

Ant、Maven を使用する必要がありますか? 依存するすべての Spring jar を 1 つの大きなファイルにパッケージ化する必要がありますか? これに対処するためのヒントは役に立ちます。

4

10 に答える 10

4

2009 年になっても、Java のデプロイは依然として愚かで退屈です。したがって、通常のオプションは、この小さなスクリプトを作成することです。すべての JAR を 1 つのディレクトリ (たとえば、lib\) に配置すると、クラスパスを自動的に構築する共通スクリプトを使用できます (このブログ エントリを参照)。cd /d %~dp0先頭に a を追加して、スクリプトのディレクトリに cd することをお勧めします。

Maven 2 には、アプリケーションを 1 つの「スーパー JAR」( mvn assembly:assembly )にアセンブルできるプラグインがあります。これは、DB2 JCC ドライバー (com.ibm. -> ClassNotFoundExceptionに変換される「COM.ibm.」パッケージを含む) を使用しない限り機能します。

動作する ANT build.xml が既にある場合の最後の解決策は、すべての依存 JAR を解凍し、「スーパー JAR」を自分で作成することです。

于 2009-02-19T09:43:22.780 に答える
1

このすべてのMavenの愛であり、誰もIvyについて言及していませんか?まあ!

さて、これがAnt Ivyで、これがMaven2との比較です。ほとんどの人が提案していると行く前に、それも見てください。

于 2009-02-21T15:00:18.027 に答える
1

依存関係の管理とパッケージ化の最適なソリューションは、Assemblyプラグインで Maven を使用することであることがわかりました。これにより、すべてのランタイム依存関係とサポート スクリプトをバイナリ ディストリビューションにパッケージ化するための非常に洗練された手段が提供されます。アセンブリを使用する最大の利点の 1 つは、必要に応じてプロジェクトを個別のコンポーネントに分割できることです。Spring Integration を使用している場合、非常に一般的ですが、個別のコンポーネントを複数のマシンに分割する必要があります。アセンブリ プラグインを使用すると、これを要件に合わせて構成できます。

于 2009-02-19T09:44:43.900 に答える
0

JARを実行可能にし、ClassPathを含むマニフェストを追加すると、多くの懸念がなくなります。残念ながら、JARとその依存関係を一緒にZIPする必要がありますが、CLASSPATHの問題は処理されます。

OSGiバンドルの作成はどうですか?私自身はまだ調べていませんが、Javaアプリをパッケージ化するための次のことになるはずです。SpringのdmServerなどのアプリサーバーで使用されます。おそらくそれはあなたにも役立つでしょう。

于 2009-02-21T14:22:51.847 に答える
0

ANTビルドスクリプトでは、ビルドのlibディレクトリの内容に基づいてビルド時に動的にビルドされたJARのリストを使用して*.batおよび*.shスタートアップスクリプトを生成します。

たとえば、適切な区切り文字を使用してjarのリストを作成するには、次のようにします。

<path id="jar-classpath">
    <fileset dir="${build.war.dir}/WEB-INF/lib">
        <include name="**/*.jar" />
    </fileset>
</path>

<pathconvert refid="jar-classpath" targetos="unix" property="exec.classpath.unix">
       <map from="${build.war.dir}\WEB-INF\lib\" to="../lib/"/>
</pathconvert>

<pathconvert refid="jar-classpath" targetos="windows" property="exec.classpath.windows">
        <map from="${build.war.dir}\WEB-INF\lib\" to="../lib/"/>
</pathconvert>

その後、Java呼び出しスクリプトで${exec.classpath.unix}との値を使用できます。${exec.classpath.windows}

于 2009-02-21T14:41:46.963 に答える
0

クラスパスを正しく設定するランチャーを使用できます。そうすれば、JAR をより柔軟にパッケージ化できます。それらすべてをディレクトリに簡単に配置できます。これは、「ろくでなし」の ueber jar を作成するよりもはるかにクリーンです...

そのようなランチャーの 1 つがcommons-launcherです。

于 2009-02-19T09:50:48.817 に答える
0

maven-assembly-plugin は最良の選択ではない可能性があります。ここで説明されているように、onejar-maven-plugin を確認する必要があります。

http://blog.jayway.com/2009/03/22/executable-jar-with-onejar-maven-plugin/

すべての依存関係の jar を jar のままにし、コードを独自の jar に入れることができます。これらの jar はすべて、実行可能になっているより大きな jar に入れられます。

于 2009-04-17T06:43:50.210 に答える
0

m2eclipseプラグインで Maven 2 を使用しています。かなりうまくいきます。プラグインには依存関係グラフ ビューがあり、競合などが表示されます。

ここで、すべての依存関係を 1 つの jar にパッケージ化したい場合は、Jar Jar Linksを確認できます(冗談ではありません!)。

于 2009-02-20T00:01:17.523 に答える