我有一个启动java程序的脚本,允许用户通过环境变量指定要使用的java安装路径。
我希望该脚本提供java模块系统参数(特别是 --add-opens
)当目标jdk拥有模块系统(jpms,或“jigsaw”)时,如果没有,则忽略它们(如果没有忽略它们,启动将失败,因为jdk8抱怨无法识别的参数)。现在它忽略了它们,这会导致jdk9+上出现不需要的警告(是的,我也在研究修复根本原因)。
我可以实现这个。最健壮的方法可能是首先调用底层脚本中的java程序,该程序检测到模块系统并将其结果发送到标准输出(或者进程退出状态,可能);然后,调用脚本可以检查该输出,以了解底层jdk是否启用了jpms。
我还可以解析 java -version
但我不确定这个字符串的格式能保证什么。
我希望有一种方法(1)健壮,并且(2)性能好——可能检查安装中是否存在特定的文件,或者从调用脚本中扫描特定的jar文件,等等。
任何一个jpmsMaven都有一个强大的启发式算法?
2条答案
按热度按时间vvppvyoh1#
java类文件格式对于所有java版本都是相同的,并且包含版本号。只需读取一个相关
.class
文件夹。例如,下面powershell命令输出的最后一行是版本号。
输出为
52是版本号,表示文件
Key.class
是用jdk8编译的。llew8vvj2#
自9以来的每个java版本都包含模块系统。
Java9及更高版本的每个openjdk派生实现(包括oracle的商业jdk构建)都支持
--version
期权;早期版本只支持-version
(单破折号)选项。因此,一个快速而肮脏的方式来检查9日及以后将是if $JAVA_HOME/bin/java --version >&/dev/null; then ...
.