2016-12-05 17 views
2

Mavenにはローカルリポジトリのビルド結果(~/.m2/repository/の下にアーチファクトがインストールされています)が格納されていますが、srcの隣のtargetフォルダにコンパイルされたクラスが出力されます。ターゲットフォルダとローカルリポジトリ

ローカルリポジトリの内容とtargetフォルダの内容に違いはありますか?

答えて

3

これらは完全に異なり、混同しないでください。

  • targetはビルドディレクトリを表します。つまり、ソースからビルド中に生成されたすべての一時ファイルがそこに終わります。特に、メインとテストのJavaソースのコンパイル済みクラスがありますが、you'll also find lots of things in there(生成されたソースファイル、フィルタされたファイルなど)が見つかります。重要なことは、このフォルダに含まれるものはすべて本質的に一時的なものであるということです。 mvn cleanを実行していつでも削除して、次のビルドが(または少なくともになるはずです)うまく動作することを確認してください。 targetの下に生成されたすべてのファイルとフォルダは、プロジェクトの成果物を作成する単一の目的を果たします。たとえば、jarパッケージ化のMavenプロジェクトは、jarという拡張子を持つits final nameで構成され、コンパイルされたJavaクラスを含む単一の主要な成果物を持ちます。最終的な名前は、POM内で設定されたカスタム名、またはプロジェクトのMaven coordinatesから派生したデフォルト名です。このようなプロジェクトには、テストJARやソースJARなど、追加のアーチファクトが追加されることもあります。

  • ローカルリポジトリにはアーティファクトのみが含まれています。そこには一時ファイルはありません。 mvn installの実行時にインストールされるものは、厳密にはMavenプロジェクトの生成物、つまり最終製品とプロジェクトのPOMファイルです。それらを作成するのに役立つものはすべてローカルのリポジトリに入れられず、プロジェクトのビルドは決してそこに一時的なものを入れてはいけません。ローカルリポジトリはMavenリポジトリであり、厳密な命名規則に従っていることに注意してください。グループIDがmy.groupid、アーチファクトIDがmy-artifactid、バージョンが1.0の場合は、my/groupid/my-artifactid/1.0フォルダにインストールされます。 POMファイルとその他すべての成果物を見つけることができます。成果物そのものの名前を上書きすることはできません。a classifierが追加されたJARプロジェクトの場合はmy-artifactid-1.0.jarになります。

これは、一般に混乱の元である:targetフォルダの下に生成される主アーティファクトファイルの名前は、完全にインストールされたとき、それはローカルリポジトリに有すること名前は異なる、またはリモートリポジトリにあります配備されたとき最初のものは制御することができますが、後者はリポジトリの名前付けスキームによって定義されます。リポジトリの名前は、座標から計算されます。

要約:targetには、プロジェクトの成果物(メインのJAR、ソース、Javadoc、つまりそのプロジェクトによって展開され、リリースされることになっているすべてのもの)を作成するビルド中に、ローカル・リポジトリー(およびリモート・リポジトリー)には、成果物そのもののみが含まれます。

1

あなたが本当に心配している場合は、module.jarの生成に関してはあまりありません。生成された.jarファイルは同じです。コードを再コンパイルすると、/targetフォルダは消去されますが、.m2は消去されません。

/targetフォルダは、一般に、コンパイルされたソースクラス/target/classes/target/generated-sourceなどとmodule.jarで構成されていますが、

一方ローカル~.m2/repositoryが必要な場合にそのモジュールを再構築するために、そのモジュールのpom.xmlと全てコンフィグ(repositoriesdependenciesなど)と共にmodule.jarから成ります。

関連する問題