我正在尝试使用Sping Boot 和Gradle访问Java主应用程序中的构建信息值,例如version
。
我找不到任何关于如何配置
build.gradle
application.yml
(如果需要)Java main class
有人可以请帮助与上述文件的一个小的代码示例。
在我的build.gradle
文件中,我将有version
条目,所以如何使用Sping Boot 和Gradle将其导入Java主类。
build.gradle
version=0.0.1-SNAPSHOT
我试着把
build.gradle
apply plugin: 'org.springframework.boot'
springBoot {
buildInfo()
}
但是buildInfo()
在Intellij中不被识别为关键字
在我的Java主类中,我有以下内容:
public class MyExampleApplication implements CommandLineRunner {
@Autowired
private ApplicationContext context;
public static void main(String[] args) {
SpringApplication.run(MyExampleApplication.class, args);
}
@Override
public void run(String[] args) throws Exception{
Environment env = (Environment) context.getBean("environment");
displayInfo(env);
}
private static void displayInfo(Environment env) {
log.info("build version is <" + env.getProperty("version")
}
但是当我运行这个命令时,env.getProperty("version")
的输出显示为null
。
4条答案
按热度按时间xvw2m8pv1#
Sping Boot 使用
buildInfo()
生成的信息自动配置BuildProperties
bean。因此,要获取信息,请使用
context.getBean(BuildProperties.class).getVersion();
。y53ybaqx2#
我设法让它现在工作-使用帮助指针,吸血鬼给下面和其他一些来源。关键是将执行器类添加到项目依赖项中。注意:Intellj似乎无法识别springBoot标记中的buildInfo()-但它确实运行正常-所以不要推迟。
build.gradle
MyExampleApplication
在Intellj中运行应用程序时控制台输出的屏幕截图x1c 0d1x
更新
在与我的同事一起审查之后,我们决定移动一些构建属性,例如。
version
(上图)从build.gradle
文件输出到gradle.properties
文件。这给了我们一个更清晰的构建细节和属性的分离。当你运行Gradle build时,它会自动拉入这些值,它们在Java主类的BuildProperties bean中可用,如上面的示例所示。gradle.properties
os8fio9y3#
在Gradle脚本中添加以下内容。它会将版本正确插入jar清单,如下所示:
您的代码将能够从该jar清单文件中获取版本:
请参阅下面的链接了解更多详情:https://github.com/akhikhl/wuff/wiki/Manifest-attributes-in-build.gradle
23c0lvtd4#
在Sping Boot 中获取版本号的简单方法
不要忘记生成application-build.properties