インストールせずにMaven 2ビルドクラスパスにjarを追加できますか? 質問する

インストールせずにMaven 2ビルドクラスパスにjarを追加できますか? 質問する

Maven 2 は、開発の実験 / 手っ取り早いモックアップ段階で私を困らせます。

pom.xml使用したい Web アプリ フレームワークの依存関係を定義するファイルがあり、そのファイルからスターター プロジェクトをすばやく生成できます。ただし、ファイルがまだ定義されていないサードパーティ ライブラリにリンクしたい場合があります。そのため、サードパーティ ライブラリのファイルを手動でpom.xml作成してインストールし、依存関係を に追加するのではなく、Maven に「定義した依存関係に加えて、 にある jar も含めます」と指示します。pom.xmlpom.xml/lib

これは単純なことのように思えますが、もしそうなら、私は何かを見落としています。

これを実行する方法についてのアドバイスがあれば、大変助かります。それができない場合は、Maven をディレクトリにポイントし/libpom.xmlすべての同梱の jar を単一の依存関係にマップした を簡単に作成し、名前を付けてインストールし、一気にリンクできる簡単な方法があれば十分です。

ベストアンサー1

一般的なアプローチの問題点

インターネット上で見つかる回答のほとんどは、依存関係をローカル リポジトリにインストールするか、または「システム」スコープを指定してpomプロジェクトのソースとともに依存関係を配布することを提案します。しかし、これらの解決策はどちらも実際には欠陥があります。

「ローカルリポジトリにインストール」アプローチを適用すべきでない理由

依存関係をローカル リポジトリにインストールすると、その依存関係はそこに残ります。配布アーティファクトは、このリポジトリにアクセスできる限り問題なく動作します。問題は、ほとんどの場合、このリポジトリはローカル マシン上に存在するため、他のマシンでこの依存関係を解決する方法がないことです。アーティファクトを特定のマシンに依存させることは、明らかに問題に対処する方法ではありません。そうしないと、この依存関係を、そのプロジェクトで作業しているすべてのマシンにローカルにインストールする必要があり、これはあまり良くありません。

「システムスコープ」アプローチを適用すべきでない理由

「システム スコープ」アプローチで依存する jar は、どのリポジトリにもインストールされず、ターゲット パッケージにも添付されません。そのため、配布パッケージでは、使用時にその依存関係を解決する方法がありません。これが、システム スコープの使用が非推奨になった理由だと思います。いずれにしても、非推奨の機能には依存したくないでしょう。

静的プロジェクト内リポジトリソリューション

これを に入れた後pom:

<repository>
    <id>repo</id>
    <releases>
        <enabled>true</enabled>
        <checksumPolicy>ignore</checksumPolicy>
    </releases>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <url>file://${project.basedir}/repo</url>
</repository>

グループ ID が の形式の各成果物について、x.y.zMaven は成果物の検索にプロジェクト ディレクトリ内の次の場所を含めます。

repo/
| - x/
|   | - y/
|   |   | - z/
|   |   |   | - ${artifactId}/
|   |   |   |   | - ${version}/
|   |   |   |   |   | - ${artifactId}-${version}.jar

これについてさらに詳しく知りたい方は、このブログ投稿

Mavenを使用してプロジェクトリポジトリにインストールする

この構造を手動で作成する代わりに、Maven プラグインを使用して jar をアーティファクトとしてインストールすることをお勧めします。したがって、フォルダーの下のプロジェクト内リポジトリにアーティファクトをインストールするには、次をrepo実行します。

mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]

このアプローチを選択すると、リポジトリ宣言を次のように簡素化できますpom

<repository>
    <id>repo</id>
    <url>file://${project.basedir}/repo</url>
</repository>

ヘルパースクリプト

各ライブラリのインストールコマンドを実行するのはかなり面倒で、間違いなくエラーが発生しやすいので、ユーティリティ スクリプトこれにより、フォルダーからプロジェクト リポジトリにすべての jar が自動的にインストールされlib、ファイル名からすべてのメタデータ (groupId、artifactId など) が自動的に解決されます。スクリプトは依存関係の xml も出力し、それを にコピーして貼り付けることができますpom

ターゲットパッケージに依存関係を含める

プロジェクト内リポジトリを作成すると、プロジェクトの依存関係をソースとともに配布するという問題は解決されますが、それ以降、プロジェクトのターゲット成果物は公開されていない jar に依存するため、リポジトリにインストールすると解決できない依存関係が発生します。

この問題を解決するには、ターゲットパッケージにこれらの依存関係を含めることをお勧めします。これは、アセンブリプラグインまたは、OneJar プラグインOneJar の公式ドキュメントは理解しやすいです。

おすすめ記事