57

最近mavenでプロジェクトを書いたのですが、maven pom.xmlのバージョンについて質問があります。

そのような依存関係を書くと

<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
     <!--No version here-->
</dependency>

バージョンは何になりますか

  1. 単純なプロジェクトで、サブプロジェクトなし

  2. 別のプロジェクトの依存関係として、そのプロジェクトは foo-bar-1.0.0 を使用します

4

1 に答える 1

46

質問のパート 1: バージョンを指定しない場合、さまざまな結果が得られます。

a)エラーが発生します...

[ERROR]   The project org.example:myproject:0.5-SNAPSHOT (D:\src\myproject\pom.xml) has 1 error
[ERROR]     'dependencies.dependency.version' for foo:bar:jar is missing. @ line 39, column 14

b) プロジェクトの親の pom の依存関係管理でバージョンを定義した場合、そのバージョンが使用されます。プロジェクトの親は、外側のスーパープロジェクトである必要はありません。それは単に適切な定義の集まりである可能性があります。

c) プロジェクトの別の依存関係も foo:bar に依存し、バージョンを指定する場合、そのバージョンが使用されます。Maven 2 には、推移的な依存関係と呼ばれるメカニズムがあります。アーティファクトの依存関係のバージョンが明示的に指定されていない場合、依存関係ツリーが検索され、ツリー内の最も近い定義が使用されます。最も近い定義が 2 つある場合は、最初の宣言が優先されます (maven 2.0.9 以降)。

パート 2.: 確かではありませんが、推移的な依存関係のメカニズムもそのように機能する可能性があります。しかし、ドキュメントは(私が理解している限り)そのケースについて言及していません。

しかし、どういうわけか、あなたの質問の2番目の部分は意味がないと感じています.アーティファクトを依存関係として使用するには、最初にそれを構築する必要があると思います. したがって、依存関係自体として使用する前に、依存関係のバージョンを十分に知る必要があります。

于 2012-09-07T10:38:21.357 に答える