web-dev-qa-db-ja.com

Mavenのアーティファクトとは何ですか?

アーティファクトとは何ですか。また、Mavenはなぜそれを必要としますか?

305
Maxim Veksler

成果物は、Mavenリポジトリーにデプロイされるファイル(通常はJAR)です。

Mavenビルドは、コンパイル済みJARや「ソース」JARなど、1つ以上の成果物を生成します。

各成果物には、グループID(通常はcom.example.fooのような反転ドメイン名)、成果物ID(単なる名前)、およびバージョンストリングがあります。これら3つは一緒になってアーティファクトを一意に識別します。

プロジェクトの依存関係は成果物として指定されます。

278
Stuart Sierra

一般的なソフトウェア用語では、 " アーティファクト "は、ソフトウェア関連のドキュメントでも実行可能ファイルでも、ソフトウェア開発プロセスによって生成されるものです。

Mavenの用語では、アーティファクトはMavenビルドの結果の出力であり、通常はjarまたはwarまたはその他の実行可能ファイルです。 Mavenの成果物は、groupId、artifactId、およびversionの座標系によって識別されます。 Mavenはコードのビルドと実行に必要な依存関係(通常は他のjarファイル)を識別するためにgroupIdartifactId、およびversionを使用します。

102
Ken Liu

私はこれが古代のスレッドであることを知っていますが、私はいくつかのニュアンスを加えたいと思いました。

Maven成果物、リポジトリー・マネージャー成果物があり、次にMaven Artifactname__sがあります。

Mavenのアーティファクトは他のコメント投稿者や回答者の言うとおりです。それはMavenプロジェクトを構築することによって吐き出されるものです。それは.jarファイル、.warファイル、.Zipファイル、または.dll、あるいはあなたが持っているものかもしれません。

リポジトリマネージャアーティファクトは、リポジトリマネージャによって管理されているものです。リポジトリマネージャは、基本的にソフトウェアの実行可能ファイルとライブラリ用の高性能なネームサービスです。リポジトリマネージャは、アーティファクトがどこから来たのかは気にしません(たぶんそれらはMavenビルド、ローカルファイル、Antビルド、あるいは手作業によるコンパイルなどから来ています)。

MavenのArtifactname__は、リポジトリマネージャによってリポジトリマネージャアーティファクトに間接参照される一種の「名前」を表すJavaクラスです。この意味で使用される場合、Artifactname__は、groupIdname__、artifactIdname__、versionname__、scopename__、classifiername__などの部分で構成される見せかけの名前です。

まとめると、

  • あなたのMavenプロジェクトはおそらくその<dependency>要素によっていくつかのArtifactname__sに依存しています。
  • Mavenは、リポジトリマネージャに内部のArtifactname__sに対応するリポジトリマネージャアーティファクトを送信するように指示することによって、リポジトリマネージャと対話してこれらのArtifactname__sをファイルに解決します。
  • 最後に、解決後、MavenはプロジェクトをビルドしてMavenアーティファクトを生成します。順番に、好きなツールを使用して、他の人が見つけられるように十分な調整情報を付けてリポジトリマネージャに送信することで、リポジトリマネージャアーティファクトに「変換する」ことを選択できます。彼らはリポジトリマネージャにそれを要求します。

それが役立つことを願っています。

23
Laird Nelson

Mavenは、ビルドをプロジェクトに編成します。

Mavenのartifactは、mavenプロジェクトによって生成されたリソースです。各Mavenプロジェクトには、jar, war, earなどのようにartifactを1つだけ含めることができます。
プロジェクトの構成ファイル"pom.xml"は、アーティファクトのビルド方法、単体テストの実行方法などを記述します。通常、mavenを使用したソフトウェアプロジェクトビルドは、アーティファクト(jarなど)をビルドする多くのmavenプロジェクトで構成されます。製品を構成します。
例えば。

Root-Project   // produces no artifact, simply triggers the build of the other projects
  App-Project  // The application, that uses the libraries
  Lib1-Project // A project that creates a library (jar)
  Lib2-Project // Another library
  Doc-Project  // A project that generates the user documentation from some resources

MavenアーティファクトはJavaリソースに限定されません。必要なリソースを生成できます。例えば。ドキュメント、プロジェクトサイト、Zipアーカイブ、ネイティブライブラリなど.

各Mavenプロジェクトには、[groupId, artifactId, version]で構成される一意の識別子があります。 Mavenプロジェクトが別のプロジェクトのリソースを必要とする場合、上記の識別子を使用してpom.xmlで依存関係が構成されます。ビルドがトリガーされると、Mavenは依存関係を自動的に解決します。必要なプロジェクトのアーティファクトは、ユーザーの自宅の単純なディレクトリであるローカルrepositoryから、またはpom.xmlで指定された他の(リモート)リポジトリからロードされます。

Q。Mavenのアーティファクトとは何ですか?
ANS:ARTIFACTはJAR(WARまたはEAR)ですが、それ以外のものも考えられます。各アーティファクトは、

  • グループID(com.your.packageなど)
  • 案件ID(単なる名前)
  • バージョン文字列.
    3つは一緒になってアーティファクトを一意に識別します。

Q. Mavenはなぜそれらを必要としますか?
回答:Mavenはそれらを私たちのアプリケーションで利用できるようにするために使われています。

17
VdeX

アーティファクトはJARまたはリポジトリに格納したものです。 Mavenがそれらを取り出してあなたのコードをビルドします。

9
duffymo

一言で言えば、ビルドプロセスはアーティファクトのセットとして配置されています。アーティファクトは次のとおりです。

  1. Maven自体を構成するプラグイン。
  2. あなたのコードが依存する依存関係。
  3. あなたのビルドが生み出すものすべてが、他のものによって消費される可能性があります。

成果物はリポジトリーにあります。

8
bmargulies

通常、グループID、アーティファクトID、およびスナップショットバージョンについて、Mavenの用語を使用しています。

グループID:プロジェクトのグループのIDアーティファクトID:プロジェクトのIDスナップショットのバージョン:プロジェクトで使用されているバージョン。

アーティファクトは、Jar、War、Earなどの結果ファイルに他なりません。

成果物はパッケージに他ならないと簡単に言います。

4
Venky Vungarala