You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在classpath依赖的jar包中获取所属Maven项目pom.xml的版本号

从被依赖的Health Utility Jar中获取宿主项目Maven版本号的实现方案

下面是4种可落地的实现方案,可根据实际场景选择:

  • 方案1:读取宿主项目自动生成的pom.properties文件
    Maven在构建项目时默认会生成pom.properties文件,存放在项目Jar包的META-INF/maven/[宿主项目groupId]/[宿主项目artifactId]/路径下,文件内包含version、groupId、artifactId三个核心属性。
    实现逻辑:

    1. 在Utility Jar中通过当前线程的类加载器Thread.currentThread().getContextClassLoader()扫描类路径下的META-INF目录,匹配宿主项目对应的pom.properties文件
    2. 读取文件中的version属性值即可
      注意:如果宿主项目手动配置了关闭maven属性文件生成,需要提前要求宿主项目恢复开启该生成逻辑。
  • 方案2:基于SPI机制暴露版本获取接口,由宿主项目实现
    在Utility Jar中定义一个版本提供接口,比如ProjectVersionProvider,内部包含getVersion()抽象方法。宿主项目引入依赖后,实现该接口并返回自身项目的版本号,同时按SPI规范注册实现类。
    实现逻辑:

    1. Utility Jar中定义接口:
    public interface ProjectVersionProvider {
        String getVersion();
    }
    
    1. 宿主项目实现该接口,可直接硬编码版本,也可通过@Value("${project.version}")注入版本值(Spring项目适用),然后在META-INF/services/路径下创建对应接口全限定名的文件,内容填写实现类的全限定名
    2. Utility Jar中通过ServiceLoader加载所有ProjectVersionProvider的实现,调用getVersion()即可拿到宿主项目版本
      优势:兼容性强,不受宿主项目构建配置影响,支持多版本、多模块场景的定制化返回。
  • 方案3:Spring Boot场景下通过环境变量传递版本
    如果宿主项目是Spring Boot项目,Maven构建时默认支持把project.version注入到Spring环境变量中。
    实现逻辑:

    1. Utility Jar编写Spring Boot自动配置类,直接注入@Value("${project.version:unknown}")即可获取到宿主项目的版本号
    2. 要求宿主项目在pom.xml的build配置中开启资源过滤,确保project.version能被正确替换到application配置文件中:
    <build>
      <resources>
        <resource>
          <directory>src/main/resources</directory>
          <filtering>true</filtering>
        </resource>
      </resources>
    </build>
    
  • 方案4:读取宿主项目Jar包的MANIFEST.MF文件
    Maven构建时可以配置将项目版本号写入Jar包的META-INF/MANIFEST.MF文件的自定义属性中。
    实现逻辑:

    1. 要求宿主项目在pom.xml中配置maven-jar-plugin,添加自定义Manifest属性:
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <configuration>
        <archive>
          <manifestEntries>
            <Project-Version>${project.version}</Project-Version>
          </manifestEntries>
        </archive>
      </configuration>
    </plugin>
    
    1. Utility Jar中读取类路径下所有Jar包的MANIFEST.MF文件,匹配到宿主项目对应的Jar后读取Project-Version属性值即可。

内容的提问来源于stack exchange,提问作者aditya singhal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:06:01