5

よし、卒論完成!プレッシャーから解放され、Skyrim を存分にプレイできるようになったので、論文用に書いたコードを、ant で構築された混沌としたディレクトリから素敵な Maven プロジェクトに変換しています。

私はもともとbin、最終的な jruby/sinatra ベースの Web サーバーを含む、私の論文で使用されているさまざまな Java および Ruby プログラムを実行する約 20 の bash スクリプトを含むディレクトリを持っていました。スクリプトを に移動する予定ですsrc/main/scriptsが、クラスパスの処理方法を理解する必要があります。

以前は、手動でダウンロードした依存関係へのパスをスクリプトにハードコーディングしていました。ただし、maven が必要なすべての jar をダウンロードして保存するようになったので、スクリプトからそれらを参照する最良の方法は次のとおりです。

  • 以前のように、ローカル リポジトリ内のさまざまな jar のフル パスを参照するようにスクリプトを取得する必要がありますか?
  • ローカル リポジトリ ディレクトリをスクリプトの構成オプションにし、このディレクトリへの相対パスを使用する必要がありますか?
  • Maven アセンブリ プラグインを使用してすべての依存関係を含む大きな毛むくじゃらの jar を構築し、スクリプト相対パスを介してこれにアクセスする必要があります../../../target/*-jar-with-dependencies.jarか?
  • 私が考えていなかったより良いオプションはありますか?
4

5 に答える 5

2

スクリプトで、exec:javaプラグインを使用して Java クラスを実行します。定義された依存関係に基づいてクラスパスを分類します。それなら気にする必要はありません。

于 2012-06-12T07:00:22.800 に答える
1

持っているすべてのスクリプトをもう一度見てください。maven exec pluginを使用して、それらの一部の機能を実現できる可能性があります。

アセンブリ プラグインとシェード プラグインに加えて、 maven 依存関係プラグインによって提供される機能も確認することができます。

于 2012-06-12T13:11:39.413 に答える
1

私のプロジェクト ( Soluvas fb-tools/fbcli ) では、Java 6 以降 (ワイルドカード クラスパスをサポート) を使用しているため、次のようにします。

#!/bin/bash                                                                                
# Must run first: mvn package dependency:copy-dependencies                                 
java -cp 'target/dependency/*:target/fbcli-1.0.0-SNAPSHOT.jar' org.jboss.weld.environment.se.StartMain "$@"         

クラスパスを手動で生成する必要はありません。:)

于 2012-06-20T17:14:02.530 に答える
0

あなたが言及したのと同様のことをするプラグインがかなりあります。あなたが言及したアセンブリプラグインは、間違いなくそれらの1つです(そして、あなたが提案した方法もきちんとした実用的なソリューションです)。

AppAssemblerShadeを参照してください。それらはすべて、依存関係をバンドルして直接実行可能なパッケージを生成するためのメカニズムを提供します。

于 2012-06-12T07:24:00.980 に答える