【发布时间】:2016-06-06 21:52:35
【问题描述】:
我必须通过阅读清单来扫描 EAR 以确定其中一个 JAR 的版本...
我碰巧有这样的东西要读:MyApplication.ear/MyLibrary.jar/META-INF/Manifest.MF
我不知道如何以最简单的方式做到这一点...我一直在为 JarFile、JarInputStream、JarURLConnection 苦苦挣扎,到目前为止还没有运气。
这是我当时拥有的:
JarFile myEAR = new JarFile(urlOfMyEAR);
JarEntry myJAR = myEAR.getJarEntry(libname);
Attributes m = myJAR.getAttributes();
System.out.println(m.getValue("Implementation-Version"));
但是getAttributes() 返回null...
我认为肯定有一种复杂/彻底的方法(通过提取文件或其他方式),但我希望有一个更简单的...
感谢您的帮助。
编辑:下面是我自己的答案...
【问题讨论】:
-
罐子在你的控制之下吗?你使用 Maven 吗?您可以使用 maven“过滤”将您的版本号注入您需要的任何文件...
-
这不在我的控制范围内,我想在我设法集成到仪表板的多个环境中读取应用程序的版本......指定的 JAR 是我们的框架,我需要展示我的用户以及应用程序版本号它所基于的框架版本号......
-
如果您使用 Maven(或任何复杂的构建工具),例如,您可以在构建时将您正在使用的各种版本号直接注入到 html 模板中......因此不需要读取 jar ,因此不将您的范围限制在嵌入式依赖项 - 例如,您可以注入(预期的)JDBC驱动程序版本号,它不应该在您的耳中提供。如果没有Maven,您应该尝试定位jar,将其作为ZipFile打开, 循环查找正确的条目,然后在内存中解压缩,最后解析清单......但这很棘手
-
thx spi,不幸的是,我改变现有流程的可能性很小(大公司中的大型应用程序),所以如果我想要一个快速的结果,我必须自己解决它(到目前为止不是很开发^^)。最后使用 maven 是一个可行的选择,已被考虑...