伸手: Java 有没有哪个注解可以在编译时插入当前时间,我想在代码里直接得到编译时间🤔

2023-04-09 14:22:32 +08:00
 xiangyuecn

搜了半天没搜到,只有伸手了

比如给类加上这个注解,会直接在类源码里面添加一个可以使用的静态字符串变量

或者给一个字符串变量加上这个注解,编译时自动注入一个值


不考虑使用配置文件 翻了翻 lombok ,似乎没有现成的,难不成要自己写一个编译期注解😂

感觉这种需求挺多的吧,一个 class 文件里面自带了编译时间,能省不少事

4132 次点击
所在节点    Java
24 条回复
cyningxu
2023-04-10 13:50:19 +08:00
gradle 插件或加任务不行吗?
bv
2023-04-10 14:00:55 +08:00
如果你是 Spring Boot 项目,用的又是 Maven 管理。可以使用 @@ 表达式的。
在配置文件中加入以下配置,编译时 @maven.build.timestamp@ 就会被替换为编译时的时间:
```
buildtime=@maven.build.timestamp@
```
xiangyuecn
2023-04-10 16:28:08 +08:00
@sfc9982 @learningman @Azzsanjin @diagnostics @forgottencoast @Achieve7 @ychost @someonedeng @weofuh @zhady009 @williamx @ingxx @MakHoCheung @k9982874 @OldCarMan @ic3z @vvtf @vvtf @whatiam @cyningxu @bv

感谢大家提供的思路💖,应该是不容易找到现成的注解去使用,自己实现一个注解处理器也麻烦,最优的解决办法应该还是用插件或脚本直接替换源码(从始至终就没考虑使用配置文件,用配置文件就不发帖了)

我这用的是 Maven ,pom.xml 的 plugins 里面加了 org.codehaus.mojo:exec-maven-plugin:3.1.0 插件,打包时直接调用 java 命令执行项目里的一个类的 main 函数,我在这个函数里面自己写代码进行任意的修改

pom.xml 的配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.MyJavaCompile</mainClass>
<arguments>
<argument>sourceDirectory=${project.build.sourceDirectory}</argument>
<argument>outputDirectory=${project.build.outputDirectory}</argument>
</arguments>
</configuration>
</plugin>

会调用 MyJavaCompile.main ,由于这个是自己写的代码,自由度奇高😂
GuuJiang
2023-04-10 19:05:04 +08:00
在 maven 的 goals 里加上 build-info ,如果你是 SpringBoot 项目的话直接注入一个 BuildProperties 对象就好了,通过这个对象就能取到构建时间、版本号等,不是 SpringBoot 项目的话就自己读取 manifest 文件

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

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

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

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

© 2021 V2EX