如何检查jar文件的版本?

Rit*_*esh 76 jar version executable-jar

我目前正在研究J2ME打磨应用程序,只是增强它.我发现很难获得jar文件的确切版本.有没有办法找到在类中进行的导入的jar文件的版本?我的意思是如果你有一些东西,导入xyz; 我们可以知道jar xy包所属的版本吗?

Viv*_*vek 66

解压缩JAR文件并查找清单文件(META-INF\MANIFEST.MF).JAR文件的清单文件可能包含版本号(但并不总是指定版本).

  • MANIFEST.MF 中的记录版本似乎是可选的。我在 Cognos 中使用的各种“sqljdbc42.jar”文件中没有记录版本,但 Cognos 能够报告版本 (4.2.6420.100)。如果没有记录在清单中,它从哪里获取这个版本? (2认同)

ken*_*orb 44

您需要解压缩并检查其META-INF/MANIFEST.MF文件,例如

unzip -p file.jar | head
Run Code Online (Sandbox Code Playgroud)

或更具体:

unzip -p file.jar META-INF/MANIFEST.MF
Run Code Online (Sandbox Code Playgroud)


jot*_*oth 24

只是为了扩展上面的答案,在JAR中的META-INF/MANIFEST.MF文件中,您可能会看到一行:Manifest-Version: 1.0 ←这不是 jar版本号!

您需要查找Implementation-Version哪个(如果存在)是一个自由文本字符串,这完全取决于JAR的作者,您将在那里找到什么.另请参阅Oracle docsPackage Version规范


Vad*_*zim 17

只是为了完成上面的答案.

清单文件位于jar META-INF\MANIFEST.MF路径中.

您可以在任何支持zip的存档器中检查jar的内容.

  • 这个答案(和其他人)目前[在Meta讨论](http://meta.stackoverflow.com/questions/305645/do-we-want-single-complete-answers) (2认同)

vij*_*jay 11

每个jar版本都有一个唯一的校验和.您可以计算jar的校验和(没有版本信息)并将其与jar的不同版本进行比较.我们也可以使用校验和搜索jar.

请参阅此问题以计算校验和: 计算机器上文件的校验和的最佳方法是什么?

  • 我刚刚计算了jar md5并将其粘贴到google上.工作得很好,非常感谢! (5认同)

DC.*_*lls 10

我想我会给出一个更新的答案,因为这个问题在搜索中的出现率仍然很高。

检查 CLi JAR 版本:

在 CLI jar 文件上运行以下命令:

unzip -p jenkins-cli.jar META-INF/MANIFEST.MF
Run Code Online (Sandbox Code Playgroud)

示例输出:

Manifest-Version: 1.0
Built-By: kohsuke
Jenkins-CLI-Version: 2.210  <--- Jenkins CLI Version
Created-By: Apache Maven 3.6.1
Build-Jdk: 1.8.0_144
Main-Class: hudson.cli.CLI
Run Code Online (Sandbox Code Playgroud)

上面列出了 CLI 版本。

要获取服务器版本,请运行以下命令:

java -jar ./jenkins-cli.jar -s https://<Server_URL> -auth <email>@<domain>.com:<API Token> version
Run Code Online (Sandbox Code Playgroud)

(以上内容会根据您的认证实施情况而有所不同,请相应更改)

示例输出:

Dec 23, 2019 4:42:55 PM org.apache.sshd.common.util.security.AbstractSecurityProviderRegistrar getOrCreateProvider
INFO: getOrCreateProvider(EdDSA) created instance of net.i2p.crypto.eddsa.EdDSASecurityProvider
2.210  <-- Jenkins Server Version
Run Code Online (Sandbox Code Playgroud)


Don*_*llo 5

基本上,您应该使用使用java.lang.Package类加载器的类来为您提供有关类的信息。

例:

String.class.getPackage().getImplementationVersion();
Package.getPackage(this).getImplementationVersion();
Package.getPackage("java.lang.String").getImplementationVersion();
Run Code Online (Sandbox Code Playgroud)

我认为已知logback会使用此功能在其产生的堆栈跟踪中跟踪每个类的JAR名称/版本。

另请参见http://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779