4

私はMavenを初めて使用します。依存関係機能について少し混乱しています。私はこのようにpomファイルに依存関係を追加できることを知っています

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

これは実際にはどういう意味ですか?slf4j jarファイルをプロジェクトにインポートする必要がないということですか?もしそうなら、私のプロジェクトはどのようにしてそれらのライブラリにアクセスできますか?

Mavenサイトから依存関係について読んだことがありますが、あまり役に立ちませんでした。

誰かがそれをもっと簡単な方法で説明できますか?

ありがとう

4

4 に答える 4

5

簡単に言うと、プロジェクトがslf4jバージョン1.6.1に依存していることを意味します。

さらに:

  • Mavenを使用してプロジェクトをビルドする場合(またはIDEが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つである「推移的な依存関係管理」です。
于 2011-12-03T18:00:14.093 に答える
2

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

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

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

プロジェクトで使用する依存関係が増えるほど、複雑になります。2つの依存関係が、それらに共通の依存関係の異なるバージョンを使用することになる可能性があります。

于 2011-12-03T18:01:09.303 に答える
1

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

${user_home}/.m2/repository

Mavenが接続するサーバーは、Mavenプロジェクトのpomファイルの次のようなセクションで構成する必要があります。

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

プロトタイプサーバーはrepo1.maven.orgで見ることができます

Mavenの良いところは、リストしたjarが必要な場合、そのjarだけでなく、そのjarが必要とするすべてのjarをプルすることです。明らかに、jarをマシンにプルしているので、jarがマシン上で見つからない場合にのみダウンロードされ、ビルドが毎回(初めて)遅くなることはありません。

于 2011-12-03T17:50:56.840 に答える
1

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

IDEがMavenについて知っている場合、IDEはを解析しpom、依存関係自体をダウンロードするか、Mavenにダウンロードを依頼します。次に、依存関係のjarを開きます。これにより、オートコンプリートが取得されます。IDEは、舞台裏でjarを「インポート」します。

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

次に、ソフトウェアを実行しようとするときに、これらの依存関係を見つける場所をJVMに指示する必要があります(つまり、クラスパスに配置する必要があります)。

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

<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>
于 2011-12-03T17:51:57.933 に答える