Java在运行时获取maven依赖的版本

标签 java maven

是否可以在运行时检索特定 Maven 依赖项的版本?

例如对于 pom.xml:

<dependency>
    <groupId>foo.bar</groupId>
    <artifactId>foobar</artifactId>
    <version>1.0</version>
</dependency>

我想检索具有 Artifact ID foobar 的特定依赖项的版本 1.0

最佳答案

这里最有问题的部分是通过名称查找 JAR。不幸的是,在 Java 中没有 100% 可靠的方法。要按名称获取 JAR,您需要扫描可能并不总是存在的正在运行的应用程序的类路径(例如,因为使用了自定义类加载器或使用了模块路径而不是类路径)。

但让我们假设您没有使用任何奇特的功能,如自定义类加载器,并且您的类路径包含所有 Maven 依赖项。你现在需要做什么?我将尝试描述一个粗略的算法:

  • 从类路径中检索所有 JAR 文件的路径。
  • 扫描每个 JAR 文件并找到文件 pom.properties。它位于 META-INF/maven/{groupId}/{artifactId}。
  • pom.properties 中找到 version 属性的值。

同样,这个解决方案并不完全可靠。您必须决定:您是否真的需要版本信息以及出于什么目的?

关于Java在运行时获取maven依赖的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58956946/

相关文章:

java - OnMapReadyCallback 无法解析为类型

java - EOFExceptionon 读取 UDP

java - 在Docker中将Java War部署到Tomcat,错误No Spring WebApplicationInitializer types detected on classpath

java - Maven maven-assembly-plugin 使用配置文件构建

maven - IntelliJ + Maven 错误 : Could not find or load main class root

java - Maven 的 Doxygen 风格主页

java - maven package phase创建的war文件和maven war plugin war :war goal创建的war文件有区别吗

java - 日期对象问题

java - 在 GraphView 中向 Y 轴添加左填充

maven - Maven 系统中使用 Spring-MVC 的 Java App 使用 tomcat 监听端口 8080 仅在本地 fs 中执行 HDFS API