問題描述
java 在 打包,利用 java -Xmx1g -Djava.ext.dirs=lib2 Runner xx運行。
報錯:RSA premaster secret error
測試沒有問題,本地可以運行且結果正確; 服務器可以運行,但結果不正確,報上述錯誤。
問題分析
java -cp xx.jar yy 可以運行。
java -Djava.ext.dirs則不可以運行。
應該是環境問題,涉及問題:java -Djava.ext.dirs 加載Lib後,%JAVA_HOME%\jre\lib\ext 下面的jar包就不會加載啦。
經過查詢,涉及sunjce_provider.jar。
解決方法1
找到sunjce,拷貝到lib裏,然後運行解決。
echo $JAVA_HOME
> find $JAVA_HOME -iname "*sunjce*jar" # find sunjce
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/ext/sunjce_provider.jar
把這個拷貝到lib裏即可。
解決方法2
其實就是要加載 ext下面的jar包才行,否則容易出問題。
例如:java -Djava.ext.dirs=lib:$JAVA_HOME/jre/lib/ext -jar build/MyAppJar.jar
總結
- cp利用當前jar包和jre裏的lib/ext目錄的jar包,-D不會。
- 如果需要則拷貝過去jar
引用參考
https://stackoverflow.com/questions/21390157/rsa-premaster-secret-error