在exec:java目标中无法访问ImplementedVersion

在exec:java目标中无法访问ImplementedVersion,java,maven,jar,manifest,Java,Maven,Jar,Manifest,我已使用how2将版本号添加到我们的产品中: 当我现在使用mvn assembly:single构建jar时,我看到了正确的版本。 但是当我用mvn exec:java运行所有东西时,我得到了null 当我刚从非jar启动程序时,App.class.getPackage().getImplementationVersion()不会返回null,我该怎么做?您用于添加版本号的技术只有在构建为jar时才起作用 实现这一点的另一种方法是使用一个属性文件,该文件在构建期间随项目版本更新,然后由java代

我已使用how2将版本号添加到我们的产品中:

当我现在使用
mvn assembly:single构建jar时,我看到了正确的版本。
但是当我用
mvn exec:java
运行所有东西时,我得到了null


当我刚从非jar启动程序时,
App.class.getPackage().getImplementationVersion()
不会返回null,我该怎么做?

您用于添加版本号的技术只有在构建为jar时才起作用

实现这一点的另一种方法是使用一个属性文件,该文件在构建期间随项目版本更新,然后由java代码读取

比如说,在
src/main/resources
中有一个文件
version.properties
,其中有一个条目

product.version=${project.version}
在调用App.class.getPackage().getImplementationVersion()
的地方,您可以读取此属性并显示内容

这将在jar和非jar情况下都有效

更新:您需要更新pom以启用对资源的筛选-本质上是添加一个如下所示的片段(请参阅以获取详细信息)


${basedir}/src/main/resources
真的

我是否必须向pom文件中添加一些内容才能将版本提取到此属性文件,还是无法自动工作?@reox。用所需的pom更改更新了答案。
<resources>
  <resource>
    <directory>${basedir}/src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>