相关:Get Maven artifact version at runtime
对比链接问题,它依赖于包中类的getPackage()
- 方法,对于不包含java类的包,如何实现相同的结果,但只是一个支持库网络资源?
答案 0 :(得分:0)
使用第二个答案中的方法:
reading MANIFEST.MF file from jar file using JAVA
并在Attributes
中添加条件 - 检查MANIFEST.MF中显示的标题返回正确的版本。
public static String getManifestInfo() {
Enumeration resEnum;
try {
resEnum = Thread.currentThread().getContextClassLoader().getResources(JarFile.MANIFEST_NAME);
while (resEnum.hasMoreElements()) {
try {
URL url = (URL)resEnum.nextElement();
InputStream is = url.openStream();
if (is != null ) {
Manifest manifest = new Manifest(is);
Attributes mainAttribs = manifest.getMainAttributes();
String version = mainAttribs.getValue("Implementation-Version");
String name = mainAttribs.getValue("Implementation-Title");
if (version != null && name != null) {
if ("packagetitle".equals(name))
return version;
}
}
}
catch (Exception e) {
// Silently ignore wrong manifests on classpath?
}
}
} catch (IOException e1) {
// Silently ignore wrong manifests on classpath?
}
return null;
}
如果知道有关包本身的详细信息,可以通过使用stream()跳过迭代来确保更有效,但至少这可以按预期工作。