1

Maven ベースのビルド パイプラインでは、現在、target/lib 内の特定のアーティファクトのすべての依存関係を収集し、その依存関係を指す空の実行可能な jar を作成します。これは、Eclipse 内と同じ方法で呼び出すことができます。

これは私たちにとってはうまくいきますが、必要なアーティファクトだけを含むMavenリポジトリを配布し、メインのアーティファクトの「座標」が与えられただけで、メインを指すクラスパスを作成できる小さなランチャーを持つことで、プロセスを簡素化できるかどうか疑問に思っていましたすべての推移的な依存関係とともにリポジトリ内のアーティファクト (コピー手順なし) を作成し、main(....)?

つまり、Maven 自体ができることは、「単一のオフライン リポジトリで適切な成果物を見つける」機能と「クラスパスを作成してクラスを呼び出す」機能のみです。ネットワーク アクセスなし。範囲解決などはありません。小さいほど良いです。

助言がありますか?

4

3 に答える 3

1

よくわかりませんが、スクリプト内でクラスパスを自動的に生成するシェル/バッチファイルを生成するappassemblyr-maven-pluginを見ることができます。その後、すべての依存関係などを含む結果の zip ファイルにパッケージ化できます。 . zip を展開し、bat/sh スクリプトを開始して、コマンド ラインでアプリケーションを実行するだけです。

他のオプションはmaven-exec-pluginを使用することかもしれませんが、ビルド時に Java/外部プログラムをより多く実行することを目的としていますが、目的のためにも機能する可能性があります。

于 2013-01-04T17:28:11.920 に答える
0

Appassemblyr Maven Pluginがそれを行います。

私がこれを使って作成したプロジェクトの 1 つは、get-another-label です。その pom を見て、それがどのように機能するかを理解できます。

別の解決策は pomstrap で、ステロイドの scm:checkout のようになります。

http://pomstrap.tigris.org/

于 2013-01-04T18:37:04.247 に答える
0

IMO で最も簡単な解決策は、shadeプラグインです。内部にすべての依存関係を含む「uber-JAR」を作成します。

このプラグインの主な欠点は、同じクラスパスの場所に存在する非クラス ファイルがある場合です (これは、Spring 構成ファイルでよく発生します)。オーバーラップを解決する方法をプラグインに伝える必要があります。

すべての依存関係を保持するオフライン リポジトリを作成できます。実際、Spring はトレーニング クラスでこれを行います。ただし、これを機能させるには、ユーザーがオーバーライドを持っていないことを確認する必要がありますsettings.xml(既に Maven を持っていることをユーザーに依存している場合はありそうにありません)。しかし、星がすべて揃っている場合はmvn:exec、正しいパラメーターを渡すことが問題になります。


@ThorbjørnRavnAndersen - あなたの質問は、実行可能な JAR の作成に関するものだったようです。Maven の部分は、ソリューションへのアプローチのように見えました。Maven リポジトリを配布する理由はわかりませんが、G/A/V からリポジトリの場所への変換は非常に簡単で、XPath を少し使用するだけで実行できます。または、 Aetherに切り替えることもできますが、それは「軽量、ネットワークなし、バージョン範囲なし」の基準に反するようです。

uber-JAR がニーズに合わない理由を説明していただけますか?

于 2013-01-04T17:27:36.150 に答える