Есть ли у Maven способ получить версию зависимости как свойство?

Я использую спецификацию для импорта зависимостей из другого проекта в мой, и мне нужен способ ссылки на версию зависимости, которая уже объявлена ​​в указанной спецификации. До сих пор я пытался перечислить версию зависимости как свойство в спецификации, но этот подход не удался, потому что свойства не импортируются с спецификациями.

Я видел, где зависимость от плагина зависимости: цель цели делает почти то, что мне нужно, но вместо того, чтобы дать мне полный путь к артефакту, мне нужна версия как свойство. Есть ли что-то, что может дать мне версию разрешенного артефакта как свойства?

ОБНОВЛЕНИЕ - "Почему бы не использовать родительский пом?"

Я обычно работаю в средах серверов приложений, где предоставленные зависимости задаются с помощью артефактов спецификации (поскольку кажется, что это стало довольно распространенным / стандартным способом распределения групп взаимосвязанных артефактов, например, widlfly). Поэтому я хочу относиться к спецификации как к единственному источнику правды. Идея сделать что-то вроде перераспределения свойства версии зависимости, которое уже было определено в спецификации, кажется неверной.

Если бы мне нужно было определить свойства в родительском pom, которые отражали среду сервера приложений, мне теперь пришлось бы беспокоиться о том, чтобы синхронизировать свойства родительского pom и свойства спецификации - почему даже в этот момент вообще есть спецификация?

Информация уже доступна в дереве зависимостей, это всего лишь вопрос ее раскрытия...

3 ответа

Решение

Не удалось найти ни одной существующей функциональности maven или плагина для этого, поэтому я разорвал старый зависимый путь-maven-plugin и изменил его для использования версий. Теперь я могу добавить плагин так:

<build>
   .
   .
    <plugins>
        .
        .
        <plugin>
            <groupId>io.reformanda.semper</groupId>
            <artifactId>dependencyversion-maven-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <execution>
                    <id>set-all</id>
                    <goals>
                        <goal>set-version</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

И получить доступ к таким свойствам:

идентификатор_группы: артефакт: тип [: классификатор].version

IE

io.undertow: прибойный-ядро:jar.version=1.3.15.Final

Проверьте README для получения дополнительной информации о том, как использовать плагин. Это доступно @ Maven Central:

<dependency>
    <groupId>io.reformanda.semper</groupId>
    <artifactId>dependencyversion-maven-plugin</artifactId>
    <version>1.0.0</version>
</dependency>

... плагины до конца...

Краткий ответ - да, вы можете.

Подробно, ваш корневой pom.xml:

<properties>
    <slf4j.version>1.7.21</slf4j.version>
</properties>
...
<dependencyManagement>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    ...
</dependencyManagement>

В модулях pom.xml:

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    ...
</dependencies>

Также вы можете использовать значение ${slf4j.version} для фильтрации ресурсов или в конфигурациях плагинов.

Обновить

Если вы не можете использовать свойства в родительском POM, вы можете

  • получить все зависимости и их версии с зависимостями: список плагинов; или же
  • использовать вместе зависимость: список + antrun: запустить плагин; или же
  • настроить скрипты CI-сервера, чтобы сделать это для вас (например, в этом примере); или же
  • написать собственный плагин для обработки вашей версии логики.

Этот плагин maven находится на Github ( https://github.com/semper-reformanda/dependencyversion-maven-plugin) и является обязательным для всех, кто имеет дело с версиями зависимостей, например, при использовании зависимостей Webjars - вы можете ввести номера версий Webjar прямо в ваши веб-ресурсы.

Я давно искал такую ​​функциональность, я надеюсь, что больше людей столкнется с ней и что она включится в Maven Central (я действительно думаю, что она должна прийти с Maven из коробки)

Другие вопросы по тегам