jar 文件的版本,通过使用 powershell 读取其清单

Posted

技术标签:

【中文标题】jar 文件的版本,通过使用 powershell 读取其清单【英文标题】:Version of jar file by reading its manifest using powershell 【发布时间】:2019-01-09 17:50:47 【问题描述】:

我正在运行一个 powershell 脚本来识别版本。对于 DLL 和 EXE,使用以下函数获取版本。我还有其他一些扩展名为 .Jar 的文件。有没有办法可以使用 powershell 打开 jar 并从它们的清单中获取它的版本。

请告诉我。

@n='版本';e=$_.versioninfo.Fileversion

【问题讨论】:

嗨。我下面的回答有帮助吗? 我会试一试告诉你 【参考方案1】:

看起来你必须先从 jar 文件中提取。我下载了java并使用我也下载的jar文件测试了自己

& "C:\Program Files\Java\jdk1.8.0_191\bin\jar.exe" xvf junit-4.10.jar META-INF/MANIFEST.MF
get-content .\META-INF\MANIFEST.MF

结果

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_26-b03-384-10M3425 (Apple Inc.)

话虽如此,请在此处阅读Do we want single, complete answers?,其中提到了实施版本,因此请确保您知道版本的位置以及是否可以依赖它。

【讨论】:

谢谢。我会试一试告诉你 我的回答对你有帮助吗?【参考方案2】:

这在 Server 2016/PS 5.1 和 Win 10/PS 7.1 上用作 PowerShell 脚本,无需安装任何额外内容。它读取 zip 存档中的 MANIFEST.MF 文件并写入标准输出。这是在这里找到的选项 4:https://***.com/a/37561878/101151

确保将绝对路径传递给 [io.compression.zipfile]::OpenRead。它似乎绑定到它运行的第一个目录,并将其重新用于相对路径。

# Read the MANIFEST.MF from a Java .JAR (really a .zip) file and output to standard output

param(
    [Parameter(Mandatory=$true)][string]$jarname
)

# The following code is based on an answer at https://***.com/a/37561878/101151
Add-Type -assembly "system.io.compression.filesystem"
$zip = [io.compression.zipfile]::OpenRead((Get-ChildItem $jarname).FullName)
$file = $zip.Entries | where-object  $_.Name -eq "MANIFEST.MF"
$stream = $file.Open()

$reader = New-Object IO.StreamReader($stream)
$text = $reader.ReadToEnd()
$text

$reader.Close()
$stream.Close()
$zip.Dispose()

【讨论】:

以上是关于jar 文件的版本,通过使用 powershell 读取其清单的主要内容,如果未能解决你的问题,请参考以下文章

用Windows PowerShell 运行jar 程序

powershell 使用PowerShell在Maven Central上查找Jars

powershell 使用PowerShell在Maven Central上查找Jars

我想通过反射使用 MySQL,但不得不对 MySQL jar 文件进行硬编码——我可以从 Maven 下载最新版本吗?

在 windows 10 powershell 中使用 sqlplus 执行 sql 文件

powershell 通过Powershell下载最新的GitHub版本