Плагин / расширение Maven для динамического обновления версии зависимостей - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел бы динамически назначать версии зависимостей моего проекта Maven (пожалуйста, не спрашивайте почему - я знаю, что это не предпочтительный шаблон).Насколько я понимаю, я должен создать Maven Extension, чтобы добиться этого, так как обычный плагин вызывается слишком поздно.

Итак, я попытался перехватить события Maven в EventSpy, я также попробовал AbstractMavenLifecycleParticipant.Используя их, я могу получать уведомления, но как на самом деле сделать само изменение - как заставить Maven начать работать с этой новой обновленной версией?Я думаю, мне нужно как-то изменить версию зависимости в реакторе Maven .... но как?

Я знаю, что есть решение в maven-version-plugin, но для этого потребуется его как двухэтапное задание: сначала манипулироватьpom.xml, а затем запустите фактическую сборку.Но мне нужно сделать это в течение одного пробного мавена.

Любая идея, пожалуйста?Заранее спасибо.

EDIT

Примеры файлов pom.xml для иллюстрации ситуации

Модуль библиотеки:

  • my-libpom.xml

    <groupId>foo.bar</groupId>
    <artifactId>my-lib</artifactId>
    <version>1.0.5</version>
    
  • my-app pom.xml

    <groupId>foo.bar</groupId>
    <artifactId>my-app</artifactId>
    <version>2.5.0</version>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        ...
        <dependency>
            <groupId>foo.bar</groupId>
            <artifactId>my-lib</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    <dependencies>
    

Теперь, когда я собираю свое приложение, мне нужно динамическиназначьте версию my-lib в соответствии с последней выпущенной версией, которую я нашел в nexus (я знаю, как получить правильную версию - скажем, это 1.0.5).Но как выполнить некоторую предварительную обработку, которая изменит версию в реакторе, чтобы Maven затем использовал версию 1.0.5?

1 Ответ

0 голосов
/ 19 декабря 2018

OK.Похоже, я понял ;-) Спасибо khmarbaise за комментарий.Я уже видел эту страницу, но не обратил на это внимания.

Поэтому я создал MavenLifecycleParticipant, где я вычисляю нужную версию и устанавливаю ее в качестве пользовательского свойства:

@Component(role = AbstractMavenLifecycleParticipant.class, hint = "my-dep")
public class DependencyLifecycleParticipant extends AbstractMavenLifecycleParticipant 
{

@Override
public void afterSessionStart(MavenSession session) throws MavenExecutionException {
    session.getUserProperties().setProperty("MyVersion", "1.2.3");
}

}

Теперь в моем pom.xml я могу использовать что-то вроде:

<version>${MyVersion}</version>

как в зависимости, так и в версии проекта (это было хорошо для меня; -)

...