从 jar 中获取版本号

如果使用 maven-jar-pluginmaven-assembly-plugin 将应用程序打包到 jar 中,获取当前 pom 版本的简单方法是在清单中添加一个条目,然后可以从 Java 获得。

秘诀是将 addDefaultImplementationEntries 标志设置为 true(而 addDefaultSpecificationEntries 也需要工件 ID)。

jar 插件配置

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <mainClass>...</mainClass>
            <addDefaultImplementationEntries>
              true
            </addDefaultImplementationEntries>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

程序集插件配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>  
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution .../>
    </executions>
</plugin>

addDefaultImplementationEntries 指示 Maven 将以下标题添加到 jar 的 MANIFEST.MF

Implementation-Title: display-version
Implementation-Version: 1.0-SNAPSHOT
Implementation-Vendor-Id: test

现在,你可以在 jar 中的任何位置使用此行代码来访问版本号:

getClass().getPackage().getImplementationVersion()

更多信息在这里这里