gpt4 book ai didi

java - 用于动态更新依赖版本的 Maven 插件/扩展

转载 作者:行者123 更新时间:2023-11-30 05:51:28 24 4
gpt4 key购买 nike

我想动态分配 Maven 项目的依赖项版本(请不要问为什么 - 我知道这不是一个更好的模式)。据我了解,我必须创建 Maven 扩展来实现此目的,因为常规插件调用得太晚了。

所以,我尝试在EventSpy中捕获Maven事件,我也尝试过AbstractMavenLifecycleParticipant。使用这些我可以收到通知,但如何实际进行更改本身 - 如何使 Maven 开始使用这个新的更新版本?我想我需要以某种方式更改 Maven react 堆中的依赖版本...但是如何更改?

我知道 maven-version-plugin 中有解决方案,但这需要将其作为两步工作:首先操作 pom.xml,然后运行实际构建。但我需要在一次 Maven 运行内完成它。

请问有什么想法吗?谢谢,提前。

编辑

用于说明情况的示例 pom.xml 文件

库模块:

  • my-lib pom.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-app 时,我需要根据我在 nexus 中找到的最新发布版本动态分配 my-lib 版本(我知道如何获得正确的版本 - 假设它是 1.0.5)。但是如何进行某种预处理来更改 Reactor 中的版本,以便 Maven 使用 1.0.5 版本?

最佳答案

好的。看来我明白了;-) 感谢 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>

在依赖项和项目版本中(这对我来说很好;-)

关于java - 用于动态更新依赖版本的 Maven 插件/扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53835043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com