Защо номерът на версията в зависимостта на maven се пропуска понякога?

Аз съм доста нов за възможностите на maven. Виждал съм, че в pom.xml, където се поставят зависимости, понякога се споменават само groupID и artifact id и версията се пропуска. защо е това? Например зависимостта по-долу е от уебсайта на springsource http://spring.io/guides/gs/authenticating-ldap/

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-ldap</artifactId>
        <version>3.2.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.apache.directory.server</groupId>
        <artifactId>apacheds-server-jndi</artifactId>
        <version>1.5.5</version>
    </dependency>
</dependencies>

Но другаде в stackoverflow също беше споменато, че версията не е по избор. Ще се радвам, ако някой може да обясни това.


person Amar    schedule 18.10.2014    source източник


Отговори (2)


@4ntibala не, не съм пипал C# частта. Само частта за обаждане. Всъщност създадох начин да избирам раздела, който да се показва, но накрая го изтрих :) Видът помощ, от която се нуждаете, е да правите нещата сами.
person coderplus    schedule 18.10.2014

Няколко допълнения към отличния отговор от coderplus:

В многомодулен проект се счита за добра практика да конфигурирате артефактите, използвани от проекта в dependencyManagement на корена pom.xml, така че да не се налага да пишете версии в дъщерни модули pom.xmls (като в някои зависимости в вашият пример).

Също така се счита за добра практика да декларирате версии на външните библиотеки, които използвате като свойства и след това да използвате тези свойства в dependencyManagement/dependencies/dependency/version. Това повече или по-малко е направено тук:

<properties>
    <logback.version>1.1.2</logback.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

В многомодулен проект трябва също да декларирате свои собствени артефакти в dependencyManagement.

Но моля, не пишете изрично версията (както правят хората от Spring тук), използвайте ${project.version} вместо това.

Така че щеше да е по-добре да напишем:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <version>${project.version}</version>
        </dependency>

вместо

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <version>1.2.0.BUILD-SNAPSHOT</version>
        </dependency>

тук .

Цялата цел е СУХА, не се повтаряйте. Колкото повече излишни декларации имате във вашите POM, толкова по-силно могат да ударят. Търсенето на остарели зависимости е толкова забавно.

person lexicore    schedule 18.10.2014