Java中如何从依赖类路径正确获取对应依赖的groupId
依赖groupId获取方案
方案1:读取JAR内置元数据(优先推荐,准确率100%)
所有通过Maven/Gradle正规打包的依赖JAR,都会内置Maven标准元数据,完全不需要依赖本地存储路径:
- 打开JAR包,找到路径为
META-INF/maven/${groupId}/${artifactId}/pom.properties的文件 - 文件内直接包含
groupId、artifactId、version三个字段,直接读取即可,示例内容如下:
groupId=org.springframework artifactId=spring-context version=5.2.2.RELEASE
如果遇到极少数未生成pom.properties的特殊JAR,读取同目录下的pom.xml文件解析XML即可拿到groupId。
如果是运行中的Spring Boot应用,直接调用Actuator的dependencies端点,可直接返回全量依赖的完整坐标信息,无需读取本地文件。
方案2:仅通过路径推导(适用于无法读取JAR内容的场景)
Maven仓库的路径结构是全球统一标准,无论本地仓库根目录存放在什么位置,从artifactId开始的后段结构固定为:${groupId的斜杠格式}/${artifactId}/${version}/${artifactId}-${version}.jar,按照以下步骤推导即可:
- 将JAR全路径按斜杠拆分成分段列表,把最后一段(JAR文件名)单独取出
- 取剩余路径分段的倒数第一个值,即为
version - 取剩余路径分段的倒数第二个值,即为
artifactId - 校验JAR文件名是否符合
${artifactId}-${version}.jar格式,确认匹配无误 - 将剩余路径分段中倒数第三个及之前的所有分段用
.拼接,得到的就是groupId
示例:路径/自定义/服务器/存放路径/org/springframework/boot/spring-boot-actuator/2.2.2.RELEASE/spring-boot-actuator-2.2.2.RELEASE.jar
- 拆分后剩余路径分段去掉文件名后末尾三段为
spring-boot、spring-boot-actuator、2.2.2.RELEASE - 得到
version=2.2.2.RELEASE、artifactId=spring-boot-actuator - 前面的分段拼接得到
org.springframework.boot即为groupId
内容的提问来源于stack exchange,提问作者prekam
相关产品推荐
相关产品推荐

