Maven 2 は、開発の実験 / 手っ取り早いモックアップ段階で私を困らせます。
pom.xml
使用したい Web アプリ フレームワークの依存関係を定義するファイルがあり、そのファイルからスターター プロジェクトをすばやく生成できます。ただし、ファイルがまだ定義されていないサードパーティ ライブラリにリンクしたい場合があります。そのため、サードパーティ ライブラリのファイルを手動でpom.xml
作成してインストールし、依存関係を に追加するのではなく、Maven に「定義した依存関係に加えて、 にある jar も含めます」と指示します。pom.xml
pom.xml
/lib
これは単純なことのように思えますが、もしそうなら、私は何かを見落としています。
これを実行する方法についてのアドバイスがあれば、大変助かります。それができない場合は、Maven をディレクトリにポイントし/lib
、pom.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.z
Maven は成果物の検索にプロジェクト ディレクトリ内の次の場所を含めます。
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 の公式ドキュメントは理解しやすいです。