使用JAVA从jar文件中读取MANIFEST.MF文件
有什么方法可以读取 jar 文件的内容吗?我想读取清单文件以便找到 jar 文件的创建者和版本。有什么办法可以实现吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有什么方法可以读取 jar 文件的内容吗?我想读取清单文件以便找到 jar 文件的创建者和版本。有什么办法可以实现吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(10)
下一个代码应该有所帮助:
异常处理留给你了:)
Next code should help:
Exception handling is left for you :)
我建议进行以下操作:
其中 MyClassName 可以是您编写的应用程序中的任何类。
I would suggest to make following:
Where MyClassName can be any class from your application written by you.
您可以使用这样的方法:
要获取清单属性,您可以迭代变量“mainAttribs”,或者如果您知道密钥,则可以直接检索所需的属性。
此代码循环遍历类路径上的每个 jar 并读取每个 jar 的 MANIFEST。如果您知道 jar 的名称,您可能只想查看 URL(如果它包含()您感兴趣的 jar 的名称)。
You could use something like this:
To get the manifest attributes, you could iterate over the variable "mainAttribs" or directly retrieve your required attribute if you know the key.
This code loops through every jar on the classpath and reads the MANIFEST of each. If you know the name of the jar you may want to only look at the URL if it contains() the name of the jar you are interested in.
我根据 stackoverflow 的一些想法实现了一个 AppVersion 类,这里我只是分享整个类:
基本上,这个类可以从它自己的 JAR 文件的清单或它的类文件夹中的清单中读取版本信息。希望它可以在不同的平台上运行,但到目前为止我只在 Mac OS X 上进行了测试。
我希望这对其他人有用。
I implemented an AppVersion class according to some ideas from stackoverflow, here I just share the entire class:
Basically, this class can read version information from the manifest of its own JAR file, or the manifest in it's classes folder. And hopefully it works on different platforms, but I only tested it on Mac OS X so far.
I hope this would be useful for someone else.
通过这种简单的方式实现属性
Achieve the attributes in this simple way
您可以使用实用程序类
Manifests
来自 jcabi-manifests:该类将查找所有
MANIFEST.MF
文件在类路径中可用,并从其中之一读取您要查找的属性。另请阅读:http://www.yegor256.com/2014/07/03/how-to-read-manifest-mf.html yegor256.com/2014/07/03/how-to-read-manifest-mf.htmlYou can use a utility class
Manifests
from jcabi-manifests:The class will find all
MANIFEST.MF
files available in classpath and read the attribute you're looking for from one of them. Also, read this: http://www.yegor256.com/2014/07/03/how-to-read-manifest-mf.html保持简单。
JAR
也是一个ZIP
,因此任何ZIP
代码都可用于读取MAINFEST.MF
:尽管灵活性,对于仅读取数据这个答案是最好的。
Keep it simple. A
JAR
is also aZIP
so anyZIP
code can be used to read theMAINFEST.MF
:Despite the flexibility, for just reading data this answer is the best.
我很惊讶没有其他人提出这个解决方案:
I'm surprised that no one else proposed this solution:
如果您需要的只是版本,请使用此:
还有
implementationVendor
和implementationTitle
。对于规范*
也是如此。要读取清单本身,请通过
ClassLoader
将其作为InputStream
获取,然后初始化Manifest
对象,eg:读取清单也允许读取自定义属性,例如发布分支提交 ID(如果已添加)。
要读取 jar 本身,请使用
CodeSource
,然后初始化一个JarFile
对象,例如:注意:在 IDE 环境中,代码可能从 IDE 的构建目录运行而不是来自打包的 jar/构建的工件,在这种情况下,上述某些方法(或此处的其他答案)可能会产生错误的结果。使用 IDE 的工件/出版物来找到该 jar。
If all you need is version, use this:
There are also
implementationVendor
andimplementationTitle
. Similarly forspecification*
.To read the manifest itself, obtain it as an
InputStream
viaClassLoader
, then initialize aManifest
object,e.g.:Reading the manifest also allows reading custom attributes e.g. release branch commit ids (if they were added).
To read the jar itself, obtain its location using
CodeSource
, then initializa aJarFile
object, e.g.:Note: In an IDE environment, the code may run from the IDE's build directory instead of from a packaged jar/built artifact, in which case some of the above methods (or other answers here) may yield wrong results. Use your IDE's artifacts/publication's to locate the jar.