【问题标题】:gradle maven-publish plugin adds timestamp, how to avoid putting it into suffixgradle maven-publish 插件添加时间戳,如何避免放入后缀
【发布时间】:2019-06-08 12:26:45
【问题描述】:

我正在使用 gGradle 的“maven-publish”插件,它在实际版本之后添加了一个后缀,我想避免这种情况。因为在我的 CI 的下一步中,它试图下载 .jar 并且 curl 命令没有下载任何内容。

我可以通过./gradlew publish Optional<VERSION=0.0.1> 连接到我的nexus 并上传,但插件(我认为)添加了一个时间戳,看起来像这样:

a/b/c/ARTIFACT-NAME/0.0.1-SNAPSHOT/ARTIFACT-NAME-0.0.1-20190114.134142-8.jar

如何禁用插件中的时间戳功能?

这是我的发布任务:

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            if (project.version.endsWith('-SNAPSHOT')) {
                url deployNexusSnapshotUrl
            } else {
                url deployNexusReleaseUrl
            }
            credentials {
                username = deployNexusUsername
                password = deployNexusPassword
            }
        }
    }
}

【问题讨论】:

    标签: java maven gradle nexus


    【解决方案1】:

    那是因为您发布的是SNAPSHOT 版本。此时间戳是一项允许区分不同快照构建的功能,例如在有限的时间内使用它们并在以后清除它们。当您发布不使用-SNAPSHOT 后缀的正确工件版本时,它不会发生。

    为了 CI 构建的可重复性,在 CI 上构建软件时,切勿使用 SNAPSHOT 依赖项。 SNAPSHOT 版本可以被覆盖,特别是如果您禁用版本中的时间戳。

    如果您的项目中没有代码更改,CI 构建是绿色的,但是第二天有人覆盖了存储库中的 SNAPSHOT 依赖项并且构建现在是红色的怎么办?如果第二天您必须发布修补程序以解决紧急生产问题,但您必须专注于由新的 SNAPSHOT 依赖项引入的问题。

    您正在尝试解决错误的问题。 SNAPSHOT 仅用于本地开发。

    【讨论】:

    • 感谢您的全面想法!但是如果你想在定义阶段测试代码并在分支上构建......那又如何呢?
    • 一般不会从功能分支发布。大多数 CI 解决方案允许根据分支名称更改管道步骤,IMO 只需删除分支上的发布步骤。
    • 你没有回答这个问题。这句话是有争议的:“当你在 CI 上构建软件时,你永远不应该使用 SNAPSHOT 依赖项。”在我的组织中,我们总是希望人们无论如何都使用最新版本。将每个构建都保存在 Maven 中是不值得的。我们不会向 Maven 发送红色构建。我们需要一种仅存储最新快照并忘记带有时间戳的先前版本的方法。使用 maven 可以做到这一点,但我们找不到使用 gradle 的方法。
    猜你喜欢
    • 2015-07-30
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多