[spring-projects/spring-boot]重新打包目标不再延迟解析“project.build.finalName”

2024-04-10 615 views
9

我用来在像这样的级别git-commit-id-plugin上建立我的最终名字<build>

<finalName>${project.name}-${version.number}</finalName>

version.number定义为

<version.number>${git.commit.time}-${git.commit.id.describe-short}</version.number>

到目前为止,这一直有效,但 2.1.4 不再评估这些变量,所以我得到

project-${git.commit.time}-${git.commit.id.describe-short}.jar
project-20190404-115039-0bfd654.jar

在我的目标目录中,其中包含未评估变量的目录是实际重新打包的 jar。我现在尝试了半个小时以其他方式实现同​​样的事情,但没有找到解决方案,我想这与#16202有关。我们能恢复原来的行为吗?

回答

5

很难理解您试图用部分配置片段描述的内容。您能分享一个重现您所描述内容的示例吗?

6

小注意事项,如果您使用finalName插件的属性,则它已被弃用,因为有利于元素的2.1.0标准。如果您使用的是前者,那么这是偶然的(另请参阅#16457 了解更多信息)。finalNamebuild

8

演示位于https://github.com/marcust/spring-boot-issue-16456

mvn clean package 所以当你现在做一个 ,你就进入了target/

demo-${git.commit.time}-${git.commit.id.describe-short}.jar
demo-20190404-181706-307869c.jar

如果你使用 Spring Boot 2.1.3 来做到这一点。你得到

demo-20190404-181706-307869c-dirty.jar
demo-20190404-181706-307869c-dirty.jar.original

所以基本上标准元素的行为fileName已经改变。

0

我指的是前者,不是后者。我已经编辑了我的评论。您不应该使用插件上的只读版本,但不幸的是 Maven 中存在一个错误,无法强制执行此操作。

不管怎样,存在一个finalName不再被延迟解决的回归,这就是这个问题将解决的问题。

3

我也会提出一个问题,但发现这个线程关于在 2.1.4.RELEASE 中忽略 FinalName。与此同时,我们已将工件重命名为 maven-assemble-plugin。我们不确定为什么在 2.1.0 中仅使用构建标记的 FinalName 就删除了显式定义的 FinalName(例如多次执行)。

8

我们不确定为什么在 2.1.0 中仅使用构建标记的 FinalName 就删除了显式定义的 FinalName(例如多次执行)。

为了与其他核心 Maven 插件保持一致,这些插件曾经具有此属性并使它们只读(具有上述副作用),#12608。

7

我与 @rfscholte 就这个问题进行了交谈,有趣的是,它不应该在任何maven-jar-plugin一个中以这种方式工作。其目的始终是build/finalName不可变的(Maven 模型应该如此):插件执行不应更改 FinalName 值,因为我们必须再次运行该插件才能打包工件。

它在 jar 插件中“工作”的原因与它在我们的插件中工作的原因相同:有一个finalName只读属性,其默认值是延迟解析的(而不是询问模型)。

如果 Maven 的目的是在将来使该机制失效,我们需要弄清楚短期内应该做什么。删除该字段意味着不会发生解析,我们将调用 Maven 模型(因为我们应该根据 Maven 最佳实践)。

2

https://github.com/git-commit-id/maven-git-commit-id-plugin/issues/418中似乎也报告了此问题。

根据我的理解,这个问题似乎很相似,是 spring-boot 和一些奇怪的 Maven 东西的问题,其中最终名称被假定为不可变,但事实上,某些只读注释被忽略,因此恰好在以前的版本中工作。

如果您有任何问题,请随时联系我 - 对我来说,这似乎只是另一个“有趣的”maven 兔子洞 bug :-)

7

谢谢。您所描述的内容已经在本期和我创建的 maven jar 插件问题中进行了描述和讨论。

2

考虑到目前的情况,我决定恢复 #16202 的修复,这将使我们与之前所做的保持一致maven-jar-plugin。这应该会恢复以前的情况,即使 Maven 团队不建议使用变量finalName并且将来会删除此类支持。