Разработчики и администраторы, использующие Bash, могут найти полезными следующие удобные функции:
jar_jdk_version() {
[[ -n "$1" && -x "`command -v javap`" ]] && javap -classpath "$1" -verbose $(jar -tf "$1" | grep '.class' | head -n1 | sed -e 's/\.class$//') | grep 'major version' | sed -e 's/[^0-9]\{1,\}//'
}
print_jar_jdk_version() {
local version
version=$(jar_jdk_version "$1")
case $version in 49) version=1.5;; 50) version=1.6;; 51) version=1.7;; 52) version=1.8;; esac
[[ -n "$version" ]] && echo "`basename "$1"` contains classes compiled with JDK version $version."
}
Вы можете вставить их для одноразового использования или добавить в ~/.bash_aliases
или ~/.bashrc
.Результаты выглядят примерно так:
$ jar_jdk_version poi-ooxml-3.5-FINAL.jar
49
и
$ print_jar_jdk_version poi-ooxml-3.5-FINAL.jar
poi-ooxml-3.5-FINAL.jar contains classes compiled with JDK version 1.5.
РЕДАКТИРОВАТЬ Как указывает jackrabbit , вы не можете полагаться на 100%в манифесте, чтобы сказать вам что-нибудь полезное.Если это так, то вы можете извлечь его в вашей любимой оболочке UNIX с помощью unzip
:
$ unzip -pa poi-ooxml-3.5-FINAL.jar META-INF/MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 11.3-b02 (Sun Microsystems Inc.)
Built-By: yegor
Specification-Title: Apache POI
Specification-Version: 3.5-FINAL-20090928
Specification-Vendor: Apache
Implementation-Title: Apache POI
Implementation-Version: 3.5-FINAL-20090928
Implementation-Vendor: Apache
Этот .jar не имеет ничего полезного в манифесте относительно содержащихся классов.