【问题标题】:How to pin latest version of a maven artifact while creating a project from archetype如何在从原型创建项目时固定最新版本的 Maven 工件
【发布时间】:2016-04-11 07:09:04
【问题描述】:

我有一个用于创建新项目的原型。在项目创建时(即当有人执行mvn archetype:generate 时)我想将一些依赖项固定到当时可用的RELEASE 版本(我强烈反对将<version>RELEASE</version> 放在POM 文件中)。

有没有一种方法可以让原型解析RELEASE 版本并为某些库固定它。

我现在解决这个问题的唯一方法是每次发布一些核心库时发布新版本的原型,然后对archetype-resources/pom.xml中的那些进行硬编码版本

我确实看到了几个类似的问题,但没有一个适合我的解决方案。

正如我已经提到的,我想在从原型创建项目时固定可用的最新版本。使用 `RELEASE 意味着我不能从相同的源代码重新创建二进制文件,因为我最终会获取不同版本的依赖项。

让我用具体的例子来解释。

  • 我有一个带有 maven 坐标 com.my-company:my-awesome-framework:1.0 的原型。
  • 我有一个带有 maven 坐标的库 com.my-company:core-lib:1.0
  • Developer-1 运行命令mvn archeype:generate my-awesome-framework。他填写所需的详细信息并创建名为service-foo 的项目。 service -foo 具有依赖关系 core-lib 和此后。
  • 我们为core-lib 添加更多功能并发布版本2.0
  • Developer-1 构建service-foo 它仍然使用core-lib 版本1.0 构建。 (因为他没有更改项目的POM文件的版本。如果我使用<version>RELEASE<version>作为'core-lib, this timeservice-foowould have built with version2.0of thecore-lib`)
  • Developer-2 运行 mvn archetype:generate my-awesome-framework。他填写了必填字段并创建了一个名为service-bar 的服务。现在这一次是因为core-lib 版本2.0。请注意,我没有修改my-awesome-archetype 来更新core-lib 内部archetype-resources\pom.xml 的版本

我希望这能澄清我的用例

【问题讨论】:

标签: java maven maven-2 maven-3 maven-archetype


【解决方案1】:

我使用 archetype-post-generate.groovy 脚本解决了这个问题。 Maven 原型插件在项目创建后执行(如果可用)。可以使用 Maven 版本插件更新到最新版本。

这是一个示例,您可以如何更新属性和父项目中的两个版本(在本例中为 Spring Boot):

dir = new File(new File(request.outputDirectory), request.artifactId)

def run(String cmd) {
    def process = cmd.execute(null, dir)
    process.waitForProcessOutput((Appendable)System.out, System.err)
    if (process.exitValue() != 0) {
        throw new Exception("Command '$cmd' exited with code: ${process.exitValue()}")
    }
}

run("echo 'Updating to latest Vaadin version...'")
run("mvn versions:update-properties")

run("echo 'Updating to latest Spring Boot version...'")
run("mvn versions:update-parent")

缺点是 Eclipse 似乎不执行该脚本,但在其他主要的 IDE 和命令行中,这工作得很好。

groovy 脚本形成了我的Vaadin + Spring Boot archetype in GitHub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多