d+java.ext.dirs_Java-JDK9-Djava.ext.dirs is not supported
1.JDK9出現的問題
去年JDK9發布了, 最近我把JDK8更新為JDK9后, 當我使用 Android apksigner dx 命令工具出現如下問題
D:\Dev\AndroidSDK\build-tools\27.0.3>apksigner
-Djava.ext.dirs=D:\Dev\AndroidSDK\build-tools\27.0.3\lib is not supported. Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
D:\Dev\AndroidSDK\build-tools\27.0.3>dx
-Djava.ext.dirs=D:\Dev\AndroidSDK\build-tools\27.0.3\lib is not supported. Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
-Djava.ext.dirs 和 -classpath 都是指定需要加載的jar/class文件目錄路徑,
按錯誤提示猜測應該是JDK9不再支持-Djava.ext.dirs參數,之前的JDK8可以正常支持。
于是按錯誤提示嘗試把 -Djava.ext.dirs 替換為 -classpath
在 D:\Dev\AndroidSDK\build-tools\27.0.3\apksigner.bat 批處理文件中修改如下:
REM call "%java_exe%" %javaOpts% -Djava.ext.dirs="%frameworkdir%" -jar "%jarpath%" %params%
call "%java_exe%" %javaOpts% -classpath="%frameworkdir%" -jar "%jarpath%" %params%
結果我還是太天真了,JDK9花式給了一個同樣的錯誤
D:\Dev\AndroidSDK\build-tools\27.0.3>apksigner
Unrecognized option: -classpath=D:\Dev\AndroidSDK\build-tools\27.0.3\lib
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
2.解決方法
Unrecognized option: -classpath
既然JDK9裝做不認識-classpath, 那我只好嘗試看看java命令有什么新option
D:\>java
用法: java [options] [args...]
(執行類)
或 java [options] -jar [args...]
(執行 jar 文件)
或 java [options] -m [/] [args...]
java [options] --module [/] [args...]
(執行模塊中的主類)
其中, 選項包括:
-d32 已過時, 在以后的發行版中將被刪除
-d64 已過時, 在以后的發行版中將被刪除
-cp
-classpath
--class-path
使用 ; 分隔的, 用于搜索類文件的目錄, JAR 檔案
和 ZIP 檔案列表。
果然JDK9新增命令選項 --class-path, 也是用來指定class/jar文件目錄路徑
在 D:\Dev\AndroidSDK\build-tools\27.0.3\apksigner.bat 批處理文件中修改如下:
REM call "%java_exe%" %javaOpts% -Djava.ext.dirs="%frameworkdir%" -jar "%jarpath%" %params%
call "%java_exe%" %javaOpts% --class-path="%frameworkdir%" -jar "%jarpath%" %params%
終于成功了
D:\Dev\AndroidSDK\build-tools\27.0.3>apksigner
USAGE: apksigner [options]
apksigner --version
apksigner --help
EXAMPLE:
apksigner sign --ks release.jks app.apk
apksigner verify --verbose app.apk
apksigner is a tool for signing Android APK files and for checking whether
signatures of APK files will verify on Android devices.
剛開始出現問題時,因為畏懼這種系統問題而粗暴滾回JDK8,還好后來強迫癥犯了,誤打誤撞終于找到原因…
“提出問題比解決問題更重要”,我對這句話越來越有感觸了…
出現了問題,應該感到慶幸而不是畏懼,因為這個新問題會帶來新知識,因畏懼而逃避的人將永遠無知!
總結
以上是生活随笔為你收集整理的d+java.ext.dirs_Java-JDK9-Djava.ext.dirs is not supported的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery文件上传插件 uploadi
- 下一篇: 求正多边形的面积JAVA_第六章第三十六