Java-JDK9-Djava.ext.dirs is not supported

1.JDK9出現(xiàn)的問題

去年JDK9發(fā)布了, 最近我把JDK8更新為JDK9后, 當(dāng)我使用 Android apksigner dx 命令工具出現(xiàn)如下問題   
    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文件目錄路徑,  
按錯誤提示猜測應(yīng)該是JDK9不再支持-Djava.ext.dirs參數(shù),之前的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%

結(jié)果我還是太天真了,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裝做不認(rèn)識-classpath, 那我只好嘗試看看java命令有什么新option 
    D:\>java
    用法: java [options] <主類> [args...]
               (執(zhí)行類)
       或  java [options] -jar <jar 文件> [args...]
               (執(zhí)行 jar 文件)
       或  java [options] -m <模塊>[/<主類>] [args...]
           java [options] --module <模塊>[/<主類>] [args...]
               (執(zhí)行模塊中的主類)

     其中, 選項包括:
        -d32          已過時, 在以后的發(fā)行版中將被刪除
        -d64          已過時, 在以后的發(fā)行版中將被刪除
        -cp <目錄和 zip/jar 文件的類搜索路徑>
        -classpath <目錄和 zip/jar 文件的類搜索路徑>
        --class-path <目錄和 zip/jar 文件的類搜索路徑>
                      使用 ; 分隔的, 用于搜索類文件的目錄, 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 <command> [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.

剛開始出現(xiàn)問題時,因為畏懼這種系統(tǒng)問題而粗暴滾回JDK8,還好后來強迫癥犯了,誤打誤撞終于找到原因...
"提出問題比解決問題更重要",我對這句話越來越有感觸了...
出現(xiàn)了問題,應(yīng)該感到慶幸而不是畏懼,因為這個新問題會帶來新知識,因畏懼而逃避的人將永遠無知!

簡書: http://www.itdecent.cn/p/77db2ea8098f
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/79307325
GitHub博客: http://lioil.win/2018/02/10/Java-JDK9-class-path.html
Coding博客: http://c.lioil.win/2018/02/10/Java-JDK9-class-path.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • 從來處來,回來處去。當(dāng)初白啟一路流浪到臥龍府之時是無論如何也想不到自己在這么短的時間內(nèi)又會回到邊境去。不同的是,離...
    思伯閱讀 223評論 0 0
  • 學(xué)長很出名啊。是嗎?對我來說,是的?!獛r井俊二《四月物語》 人是有季節(jié)記憶的。每年一到某個時節(jié),就想做去年此時做...
    露十七閱讀 994評論 3 11
  • 今天在健身房更衣室準(zhǔn)備出門了的時候,被一個年齡稍長的大姐叫住了。她赤裸著身體,扶著更衣室柜子,用微弱的聲音求助我給...
    木偶99閱讀 352評論 0 0

友情鏈接更多精彩內(nèi)容