是否可以在运行时检索特定 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/