我遵循阅读我自己的Jar's清单指南,以编程方式获取清单条目。
我正在用maven-assembly-plugin构建jar文件。Manifest文件位于jar文件的META-INF/MANIFEST.MF
目录下。
问题是,我得到空条目在任何情况下。我试图使用JarFile加载,使用ClassLoaderResources不生效。
但是,如果添加额外的条目到pom文件,使用然后我可以读取这些条目,如果它们在单独的部分(用额外的换行符分隔)。
如果我将条目添加到主属性部分,那么它们是不可见的。
是否可能由于某些安全原因,以编程方式显示读取。Mf文件被禁用?
我不知道为什么你不能找到你的清单条目没有额外的依赖关系,但你不应该有任何问题从一个清单读取。我是这样做的:
private static final String MANIFEST_FILE_KEY = "META-INF/MANIFEST.MF";
......
try (JarFile jar = new JarFile(URLDecoder.decode(jarFileURL.getPath(), "UTF-8"))) {
Enumeration<JarEntry> entries = jar.entries();
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
if (entry.getName().equals(MANIFEST_FILE_KEY)){
//found our manifest
Manifest manifest = new Manifest(jar.getInputStream(entry));
Attributes attributes = manifest.getMainAttributes();
for (Entry<Object, Object> key : attributes.entrySet()) {
//do something with the key values
}
break;
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}