【发布时间】:2016-09-15 13:05:55
【问题描述】:
这是对near-universally accepted answer 对old question 的回应。由于答案相当陈旧(2009 年)并且对我不起作用,我想我会问是否有人知道原因。
我的用例是开发一个内部使用的 gradle 插件。每当应用插件时,我都非常希望能够打印出正在使用的插件版本。因此,我在构建插件时将版本写入插件的清单,并尝试在应用插件时使用链接答案中的技术从清单中读取它。
我根据答案编写了一些代码,但它不起作用。我加了一堆调试代码,可以看到代码首先找到了JDK自己提供的Manifest:
Manifest-Version: 1.0
Created-By: 1.7.0_07 (Oracle Corporation)
然后它找到我的清单,我正在寻找的那个,但抛出一个 FileNotFoundException:
java.io.FileNotFoundException: JAR entry META-INF/MANIFEST.MF not found in {path to my plugin jar in my local maven repository}。怎么可能
Enumeration<URL> resources = getClass().getClassLoader()
.getResources("META-INF/MANIFEST.MF");
找到清单,然后在尝试读取时抛出 FileNotFoundException:
Manifest manifest = new Manifest(resources.nextElement().openStream());
这是引发异常的行。
有人可以解释这种奇怪的行为,或者想出另一种可能更新的方式来阅读清单吗?
顺便说一句,这是在 Eclipse 下,在 Windows 中运行的。还没有在 Linux 上尝试过,它可能确实可以工作,但我希望它在这两种情况下都可以工作。
【问题讨论】:
-
您打算读取清单的哪些属性?许多与版本相关的清单属性可用作java.lang.Package 类的方法。
-
是的,我刚刚找到了同样的东西,谢谢。请参阅我刚刚发布的答案。
标签: java eclipse gradle manifest.mf