【问题标题】:Why is maven ignoring finalName and "build-helper-maven-plugin" when using "deploy"?为什么在使用“部署”时,maven 会忽略 finalName 和“build-helper-maven-plugin”?
【发布时间】:2018-07-31 15:29:29
【问题描述】:

我的“finalName”和 build-helper-maven-plugin 在我的主模块中配置如下:

<build>

    <finalName>${project.artifactId}_${build.time}</finalName>

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>timestamp-property</id>
                    <goals>
                        <goal>timestamp-property</goal>
                    </goals>
                    <configuration>
                        <name>build.time</name>
                        <pattern>yyyy-MM-dd.HHmm</pattern>
                        <locale>fr_FR</locale>
                        <timeZone>Europe/Paris</timeZone>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>

</build>

当我在聚合器上使用“mvn package”时它工作正常,但如果我执行“mvn deploy”,它就会被忽略:工件使用类似于 version_artifactId_maven-timestamp 的模式(使用 UTC 的 maven-timestamp)。此外,当我在父级中拥有的唯一版本是“1.0.0-CD”时,上传的工件中使用的“版本”是“1.0.0-SNAPSHOT”。

我该如何解决这个问题?

附: : 所有这些测试都是本地的,还没有使用一些 CI 服务器。

P.P.S. : 我不得不说只有上传到 Artifactory 的工件有 错误的名称,我的目标目录中的工件很好。

【问题讨论】:

  • &lt;finalName&gt;..&lt;/finalName&gt; 仅定义在target 目录中使用的名称,但在安装或部署时不会影响名称。如果这是可能的,那么 maven 存储库的整个概念就会被打破......
  • 好的,但是如何影响已部署工件的名称?
  • 通过mvn installmvn deploy使用的名称不能被影响。问题是你为什么需要它?此外,为什么需要构建时间?为什么不将 git sha1 之类的东西用于具有适当管理端点的 Spring Boot 工件......?此外,在本地生成被其他人使用的工件是一个坏主意……最好使用 CI 解决方案,以确保通过版本控制可重现状态……?
  • 我想控制存储在我的 Artifactory 中的工件的名称,这是一个作为超级 jar 发布的应用程序(而不是在其他项目中用作依赖项的 jar)。本地部署只是第一次测试,但詹金斯会使用相同的命令吗?这个例子与你所说的相反(在 属性中):stackoverflow.com/a/4245890/668455
  • 除了 maven deploy 插件之外,您可以使用其他工具来部署您的工件吗?

标签: xml maven maven-3 artifactory


【解决方案1】:

到目前为止没有答案,所以这是我解决这个问题的方法。

我正在使用 Maven 提供的可能性(没有来自 Maven v3.2.1 的任何警告)在外部设置 pom 的版本:Allow continuous delivery friendly versions

所以我将聚合器、父级、模块(包括依赖项)中的每个 &lt;version&gt;1.0.0-SNAPSHOT&lt;/version&gt; 替换为 &lt;version&gt;${revision}&lt;/version&gt;

为了在我的发布版本中设置我的时区时间戳,我使用了 Jenkins 的“BUILD TIMESTAMP 插件”。

所以 jenkins 中的 maven deploy 命令行变成了“构建 > 目标和选项”:deploy scm:tag -Drevision=1.0.0_$BUILD_TIMESTAMP

无意冒犯@khmarbaise,大部分功劳归于:Maven Release Plugin: Dead and Buried

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2017-11-14
    • 2014-02-23
    • 2021-05-31
    • 1970-01-01
    相关资源
    最近更新 更多