1. ホーム
  2. java

[解決済み] バージョンなしのMaven依存性

2023-08-07 12:27:18

質問

最近、少し前に開発したプロジェクトの改良に取り組んでいて、以下のようなことを発見しました。pomファイル内の多くの依存関係は、バージョンが指定されずに行くが、それらは解決される。このプロジェクトは、1つのルートモジュールと2つのサブモジュールで構成されています。Aggregatorパターンが使われており、dependencyManagementセクションが全くない。上位プロジェクトは単に2つのモジュールを集約しているだけです。サブプロジェクトはそれを親として参照することはない。彼らは別の親を持っています。私が理解できないのは、サブプロジェクト自体も、その親(実はdependencyManagementもない)も、いくつかの依存関係にバージョンを指定しないことです。たとえば、次のようになります。

<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は、いくつかのデフォルトの戦略でバージョニングを処理していますか? そのデフォルトの戦略は何ですか?

どのように解決するのですか?

OK、私は自分自身でそれに答えるつもりだと思います。もちろん、私はdependency:treeを見ましたが、私が言及したすべての依存関係は、ツリーの第一レベルのメンバーでした。私がすぐに気づかなかったことは、次のとおりです。 dependencyManagement は親に存在しませんが、サブモジュールに存在し、さらに興味深いことに、それは含んでいます。

        <dependency>
            <groupId>io.spring.platform</groupId>
            <artifactId>platform-bom</artifactId>
            <version>1.0.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

Spring IO Platformを使ったことがなかったので、これは私にとって全く新しい概念です。結局のところ、このプラットフォームにはかなり多くの事前設定された依存関係が含まれています。 http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions