我想从我的 Java 应用程序中的 Maven 中提取版本代码。我创建了一个 application.properties 文件,其中包含一个调用 ${project.version} 的属性,并将以下内容添加到 pom 文件中
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
,与这个问题非常相似 - Maven ${project.version} doesn't show up in java
但是这里的不同之处在于我使用的是 spring boot。当我运行该应用程序时,输出为“${project.version}”并且在 target/application.properties 文件中,我可以看到该属性尚未使用版本号进行更新。
有什么想法吗?
更新 - 我正在使用的文件和代码
应用程序.properties 文件
application.version=${project.version}
获取属性
public String getVersionTest() {
String resourceName = "application.properties"; // could also be a constant
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties props = new Properties();
try(InputStream resourceStream = loader.getResourceAsStream(resourceName)) {
props.load(resourceStream);
} catch (IOException e) {
e.printStackTrace();
}
return props.getProperty("application.version");
}
System.out.println("version number = " + kiosk.getVersionTest());
output = ${project.version}
最佳答案
since the default config files accept Spring style placeholders (${…}) the Maven filtering is changed to use @..@ placeholders (you can override that with a Maven property resource.delimiter).
您有两种选择来实现所需的行为: 要么使用 @..@ 语法来指定占位符。例如。
application.version=@project.version@
或使用属性 ${resource.delimiter}
还原资源过滤器定界符,如 ryanp 的 answer 中所述.
关于java - Maven ${project.version} 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42810793/