80

最近、私は少し前に開発されたプロジェクトの改善に取り組んでおり、これが私が見つけたものです。pom ファイルの多くの依存関係は、バージョンが指定されていませんが、解決されています。プロジェクトは、1 つのルート モジュールと 2 つのサブモジュールで構成されます。Aggregator パターンが使用されます。つまり、dependencyManagement セクションがまったくありません。upper-project は単純に 2 つのモジュールを集約するだけです。サブプロジェクトはそれを親として参照しません。彼らは別の親を持っています。私が把握できないのは、サブプロジェクト自体もその親も (実際のところ、依存関係管理もありません) 依存関係の一部のバージョンを指定していないことです。例えば:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>imap</artifactId>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>

誰かがこれを理解するのを手伝ってくれますか? Maven は、いくつかのデフォルト戦略でバージョン管理を処理していますか? そのデフォルトの戦略は何ですか?

4

5 に答える 5

27

アーティファクトのバージョンを定義せずに Maven を機能させることは不可能です。それらは、サブモジュールまたは親の依存関係管理タグのどこかに定義する必要があります。pom 階層を確認してください。mvn help:effective-pomプロジェクトのサブモジュール ディレクトリで使用します。またmvn dependency:tree、依存関係管理の結果として、バージョン番号を含む完全なアーティファクト情報とともに、どのアーティファクトが解決されたかを確認するために使用できます。

于 2015-04-06T17:55:24.523 に答える