4

私は本当に新しいMavenです。私は依存関係の特徴について少し混乱しています。私は、これは実際に何を意味する、私はこのMavenの依存関係

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.6.1</version> 
</dependency> 

のようにポンポンファイルに依存関係を追加できることをご存知ですか?私のプロジェクトにslf4j jarファイルをインポートする必要はありませんか?もしそうなら、私のプロジェクトはどのようにそれらのライブラリにアクセスできますか?

私はmaven siteから依存関係について読んだことがありますが、それほど助けになりませんでした。

簡単な方法で説明できる人もいます。

おかげ

答えて

5

一言で言えば:それはあなたのプロジェクトがSLF4J、バージョン1.6.1への依存性を有することを意味します。さらに

:あなたが(またはあなたのIDEは、Mavenの-認識している)Mavenを持つプロジェクトをビルドする場合

  • 、あなたはSLF4Jを使用するために他に何もする必要はありません。 (別に、通常のソース・コードの配慮から、合理的なimport声明などのような)
  • SLF4JのV。1.6.1は...
  • を意味し、ローカルリポジトリにデフォルトのMavenのリポジトリから取得されます... ~/.m2/repositoryはあなたのリポジトリです。 slf4jは$M2_HOME/org/slf4j/$(artifactId}/1.6.1に入れられ、(一般的に)jarファイル、pomファイル、およびハッシュファイルが含まれます。
  • Slf4jの依存関係もローカルリポジトリにダウンロードされます。
  • 依存関係これらの依存関係は、無限にダウンロードされます。 (slf4jの場合ではなく、多くの依存関係がある場合は、 "ライブラリの最初の使用はインターネットをダウンロードする"というジョークです)これはMavenの本来の目的の一つである "推移的依存性管理"です。
1

インターネット上のサーバーの様々なあなたはMavenのビルドの一部としてダウンロードすることができますホストアーティファクト(jarファイル)があります。上記のような依存関係を追加して、コードをビルドするために必要なjarファイルを記述することができます。 Mavenのビルドに行くときは、これらのサーバーのいずれかに連絡して、お使いのコンピュータにjarファイルをダウンロードし、ローカルリポジトリに配置します通常

${user_home}/.m2/repository 

連絡先をMavenのサーバーは、MavenプロジェクトのPOMファイルで構成されている必要があり、

<repositories> 
    <repository> 
    </repository> 
</repositories> 

のようなセクションの下にプロトタイプサーバーは、Mavenのいいところは、あなたが一覧表示jarファイルが必要な場合、それだけではなく、そのjarファイルを引っ張ってくるが、任意のjarはそのことであるrepo1.maven.org

で見ることができますその瓶の必要性。明らかに、あなたがあなたのマシンにジャーを引っ張っているので、マシン上でジャーを見つけることができないときにそれらをダウンロードするだけなので、毎回ビルドを遅くすることはありません。

1

プロジェクトをコンパイルするとき、Mavenは対応する.jarファイルをリポジトリ(通常はセントラルリポジトリ)からダウンロードします(ミラーリング用またはセントラルリポジトリでは利用できない独自のライブラリ用に異なるリポジトリを設定できます) 。

IDEがMavenについて知っている場合、pomを解析し、依存関係をダウンロードするか、Mavenに依頼してください。それから、依存関係のjarファイルが開きます。これが自動補完の仕組みです。IDEはあなたのためにjarファイルを "インポート"します。

リポジトリには、依存関係の ".jar"ファイルだけでなく、その依存関係を説明する ".pom"ファイルも含まれています。したがって、mavenは再帰的に依存関係をダウンロードし、ソフトウェアをコンパイルするのに必要なすべてのjarファイルを取得します。

あなたがソフトウェアを実行しようとするとき、これらの依存関係をどこで見つけるべきかをJVMに伝える必要があります(つまり、それらをクラスパスに置く必要があります)。

私が通常行っていることは、依存関係をtarget/lib/ディレクトリにコピーすることです。ソフトウェアを展開して起動するのは簡単です。そのためには、あなたが<build>で指定maven-dependency-pluginを、使用することができます。

<build> 
    <plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.1</version> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>${project.build.directory}/lib</outputDirectory> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</build> 
2

mavenを使用していない場合は、プロジェクトに必要な依存関係を手動でダウンロードして使用します。おそらくそれらをlibフォルダに置き、あなたのIDEとビルドツールでこの場所を指定するでしょう。

mavenはこれらの依存関係を管理します。プロジェクトで必要とされる依存関係を規定の形式で指定し、インターネットからダウンロードして管理します。プロジェクトをビルドするとき、Mavenはこれらの依存関係をどこに配置し、使用するのかを知っています。ほとんどのIDEは、これらの依存関係がどこにあるのかを知っています。

なぜこれは大きな問題ですか?通常、ほとんどのオープンソースライブラリは、定期的に新しいバージョンをリリースしています。プロジェクトでこれらを使用している場合は、新しいバージョンが必要になるたびに手動でダウンロードして管理する必要があります。さらに重要なのは、各依存関係には他の依存関係(推移的依存関係と呼ばれる)がある可能性があります。 Mavenを使用しない場合は、これらの推移的な依存関係を特定し、ダウンロードして管理する必要があります。

プロジェクトが使用する依存関係が複雑になるほど複雑になります。 2つの依存関係は、共通の依存関係の異なるバージョンを使用して終了する可能性があります。