运行应用程序时,banner.txt中定义的应用程序版本不会显示在控制台上。它是根据Sping Boot 的文档定义的
${application.version}
字符串
项目使用spring-boot-starter-parent作为父pom(基本项目设置来自start.spring.io)
运行应用程序时,banner.txt中定义的应用程序版本不会显示在控制台上。它是根据Sping Boot 的文档定义的
${application.version}
字符串
项目使用spring-boot-starter-parent作为父pom(基本项目设置来自start.spring.io)
8条答案
按热度按时间myzjeezk1#
好的,如果我构建项目并通过java -jar运行它,版本会被打印出来。但是如果我在IDE(IntelliJ IDEA)中启动应用程序,版本将不会被打印出来。
根据Sping Boot 关于定制Banner的文档,
${application.version}
的值是从jar清单中获取的。MANIFEST. MF中声明的应用程序版本号。例如,Implementation-Version:1.0打印为1.0。
当从IDE运行时,通常会对IDE编译的类文件执行。IDE通常不会通过一个完整的周期来构建带有清单的整个jar。因此,在运行时没有MANIFEST.MF可用于替换
${application.version}
的值,您只能使用空令牌。这不是代码中的错误,您已经看到在执行完整的jar构建时它可以正常工作。如果在运行IDE时修复此问题确实很重要,然后,您可以考虑设置一个自定义构建步骤,首先完成完整的jar构建和清单生成。不过,这可能有点过头了。以后可以在IDE之外通过对真实的版本进行测试来验证横幅jar的构造。
6yoyoihd2#
另一个解决方案是:
使用maven资源插件来“过滤”(替换)资源文件中的属性。
在pom中,使用以下定义激活资源过滤:
字符串
在application.properties文件中:
型
在banner.txt文件中:
型
x8diyxa73#
仅供参考,以下是我在Sping Boot 2中使用基于Gradle的项目(使用Sping Boot Gradle插件)的命令行 * 中找到的工作。Intellij的控制台仍然不适合我,但problem has been around for several years now。
在标准的2.0.5.RELEASE
build.gradle
上使用jar
任务不起作用,因为bootJar
任务优先:默认情况下,当配置了bootJar或bootWar任务时,jar或war任务将被禁用。
所以我尝试了
bootJar
任务,它可以工作:字符串
注意事项:如果只有一个主类,则不需要
mainClassName
及其等效类。发现或配置的主类将自动添加到MANIFEST.MF中作为“Start-Class”。一旦这起作用,您就可以像往常一样在Sping Boot banner.txt文件中使用
${application.title}
和${application.version}
。mnowg1ta4#
在我的例子中,我查看了spring-boot-maven-plugin创建的清单,里面没有Implementation-version。
为了添加它,我在pom.xml的build.plugins部分添加了插件maven-jar-plugin。
字符串
在那之后,正如之前已经提到的,只有当我使用java -jar而不是ide时,我才能看到应用程序版本的横幅
2ekbmq325#
您还可以在banner.txt中使用资源筛选。只需在banner.txt中使用${project.version}
maven示例:
字符串
svdrlsy46#
对我来说,作品完美地取代文本上的mvn建立:
com.google.code.maven-replacer-plugin
字符串
是的,我确实从banner.txt中删除了${}
u7up0aaq7#
基本上,${application.title} ${application.formatted-version}值是从打包的jar文件的manifest文件中选取的。所以我不确定我们是否真的可以在项目的构建生命周期中打印它们。enter link description here
你可以参考下面的例子
jqjz2hbq8#
我用了另一种方法可能会有帮助,你可以在pom.xml中添加一个插件
字符串
并在资源下创建一个banner.txt,
型
并在您的application.yml文件中Assert,您具有以下属性
型