java - 如何从具有多个模块的项目中获取正确的 list ? [JAVA]

标签 java tomcat jar manifest manifest.mf

我想从 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/

相关文章:

java - Eclipse:是否可以编辑通过源代码 "attachment"已知的 Java 源代码

Firebase 实时数据库中的 Java HTTP 调用用于软件中的数据更改

java - Java中是否有静态初始化器的对立工具

java - 列出java中的文件夹和子文件夹

java - tomcat服务器关闭时如何删除cookies?

java - 如何为 com.sun.tools.javac.Main.compile() 函数设置类路径?

java - 我想在没有模式的情况下漂亮地打印 org.w3c.dom.Document

tomcat - 我如何在 EL Stream API 中使用 Collectors#joining?

java - Tomcat 中的 Spring 处理程序映射

java - 错误 java.lang.ClassNotFoundException : com. mysql.jdbc.Driver 运行 jar 文件