Maven 如何实现动态时间戳版本号

2020-05-13 13:53:07 +08:00
 LosLord

有一个模块经常变更,总是改版本号也挺烦的,而且同事也不能保证每次 deploy 主动更改版本号,所以希望能够有个方便的方法直接 deploy 的时候使用时间戳作为版本号,以下是我的做法:

<properties>
    <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
</properties>
<version>${maven.build.timestamp}</version>

这样虽然可以打出来动态时间戳的包,但是这样做 Maven 是给 warning 的,而且看 jar 包里面的 pom 文件,version 也是"${maven.build.timestamp}"字符串,请问有什么办法吗?


PS:好想用 Gradle 啊,Gradle 我管他三七二十一,一把梭搞定,但是不让用

3134 次点击
所在节点    Java
12 条回复
AmmeLid
2020-05-13 14:02:17 +08:00
SNAPSHOT 解决不了吗?
BBCCBB
2020-05-13 14:04:45 +08:00
对,用 snapshot
BBCCBB
2020-05-13 14:06:08 +08:00
Gradle 你生成时间戳有啥用呢, 手动更改版本?? 用 snapshot 不香吗
LosLord
2020-05-13 14:30:23 +08:00
@AmmeLid SNAPSHOT 有的人使用习惯不好,版本号一直不变,怕内容不能及时更新


@BBCCBB Gradle 可以编程获取当前时间啊
jinzhongyuan
2020-05-13 14:47:20 +08:00
@LosLord idea 开启永远更新快照,就可以了。
LosLord
2020-05-13 16:25:32 +08:00
@BBCCBB
@jinzhongyuan

如果需要多版本同时存在怎么办呢
zoharSoul
2020-05-13 16:35:29 +08:00
@BBCCBB snapshot -u 才会更新.

不能保证大家都记得更新的时候加这个
BBCCBB
2020-05-13 17:47:53 +08:00
@zoharSoul 要么 idea 勾选更新 snapshot, 要么每次变动都改版本号, 你选择哪个?

@LosLord 多版本如果版本发布后允许覆盖, 那就用多个不同的 snapshot 名称试试? 比如 1.0-snapshot. 2.0-snapshot
guxingke
2020-05-13 17:55:30 +08:00
version.sh

```bash
#!/usr/bin/env bash
version=$(date +%y%m%d.%H%M)
echo $version
mvn -q versions:set -DnewVersion=$version
mvn -q versions:commit
```

deploy 前执行 version.sh 即可。
zoharSoul
2020-05-13 18:29:13 +08:00
@BBCCBB 提高了版本号可以避免这种问题.不是方便与否的事情.

再说说的是 maven 没这个功能,而不是是否需要这个功能....
br00k
2020-05-13 21:24:45 +08:00
最近刚弄了这个。可以看下: http://maven.apache.org/maven-ci-friendly.html
LosLord
2020-05-14 09:40:00 +08:00
@BBCCBB 1.0-snapshot. 2.0-snapshot 这种还是要手动改版本号啊,我想弄的就是不手动改


@guxingke 脚本这种形式也不是没想过,总不能让别人每次都执行一下这个脚本


@br00k 哦哦,看起来这个是我想要的,我去看看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671239

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX