我想从 Jar 文件的 list 中读取内容,以从那里获取 SVNVersion 信息并将其显示在 UI 中。 我从事一个多模块项目,其中包括一个客户端、一个在 tomcat 上运行的服务器、客户端的一些模块及其依赖项。
我编写了代码来访问当前线程的 list 并获取其属性。
Manifest mf = new Manifest();
mf.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("META-INF/MANIFEST.MF"));
Attributes atts = mf.getMainAttributes();
System.out.println(atts.values());
System.out.println("Version: " + atts.getClass());
System.out.println("Revision: " + atts.get("SCM-Revision"));
String scm = (String) atts.get("SCM-Revision");
String revision = (String) atts.get("Revision-Number");
return revision + scm;
}
唯一的事情是它返回 Null 值,因为它从本地存储库获取依赖项的 list ,而该存储库中没有我需要的信息。
我的问题有解决办法吗?以某种方式指定项目中的模块,以便它知道是获取 IT 的 jar 的 list 而不是依赖项中的 list ? 谢谢!
最佳答案
(我删除了之前的答案,因为它有问题且不准确)
这是我过去必须从类路径中的任何类获取正确 list 的过程:它包括通过特定 URL 获取它:
private static URL getManifestUrlForClass(Class<?> cl)
throws MalformedURLException
{
URL url=cl.getResource(cl.getSimpleName() + ".class");
String s=url.toString();
return new URL(s.substring(0, s.length() - (cl.getName() + ".class").length()) + "META-INF/MANIFEST.MF");
要在代码中使用它,只需替换第一行:
mf.read(getManifestUrlForClass(MyClass.class).openStream());
关于java - 如何从具有多个模块的项目中获取正确的 list ? [JAVA],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44069790/