背景:用IDEA寫了一個java發送http請求的maven項目。
運行時,項目報java.net.SocketException: Permission denied:connect問題;
修改pom文件自動更新依賴時,IDEA報unable to import maven project see logs for details問題。
一開始以為是環境變量的原因:https://blog.csdn.net/jiangshubian/article/details/76549073 添加了環境變量之后還是不行
然后以為是windows防火牆的原因,先將idea添加到了防火牆允許列表中,不行;然后干脆關閉防火牆,還是不行。
網上說也可能是代理的原因,但是我並沒有使用代理。
然后我把我的代碼給別人考了一份,然后在別人的機器上跑,結果跑通了
因此猜測是因為我的電腦是通過手機USB共享網絡連的網,很可能是手機端有權限控制。之前看過一篇文章,說安卓中java如果要發送http請求 ,必須在manifest.xml中配置一個東西,否則安裝存在權限控制:https://blog.csdn.net/shenyuemei/article/details/8003654。因此猜測就是因為這個,電腦通過手機聯網,所以請求在經過android系統時,被android攔截。
於是用電腦直接連wifi試了一下還是不行,一樣的錯誤。
解決過程:
1、根據錯誤提示unable to import maven project see logs for details,查看IDEA錯誤日志:Help》show log in explorer》打開idea.log文件
拉到最下面,根據時間找到錯誤詳細信息:
WARN先不用看,直接看error和cause by,可以提取出以下幾點主要錯誤信息:
ERROR - #org.jetbrains.idea.maven - Cannot reconnect.
java.lang.RuntimeException: Cannot reconnect.
Caused by: java.rmi.RemoteException: Cannot start maven service; nested exception is:
com.intellij.execution.ExecutionException: java.rmi.server.ExportException: Port already in use: 0; nested exception is:
java.net.BindException: Address already in use: JVM_Bind
Caused by: java.net.BindException: Address already in use: JVM_Bind
Caused by: com.intellij.execution.ExecutionException: java.rmi.server.ExportException: Port already in use: 0; nested exception is:
Caused by: java.net.BindException: Address already in use: JVM_Bind
由此可以看出,cannot import maven project(其實就是無法更新依賴)是由於某個(這里錯誤提示0號端口,但后面實際發現不是0號端口)端口被占用,JVM被占用導致maven service無法啟動。
2、根據錯誤提示java.net.SocketException: Permission denied:connect,單步調試了一下項目,發現調試過程中出現了一條新的錯誤信息:
Disconnected from the target VM, address: '127.0.0.1:xxxx', transport: 'socket'
由此可以確定了,就是因為端口被占用導致包括maven service無法啟動,導致maven項目運行報錯,同時也導致idea更新pom.xml報錯。
3、解決錯誤
cmd查看占用端口的進程:https://jingyan.baidu.com/article/3c48dd34491d47e10be358b8.html
並沒有發現占用0號進程的端口。所以,確實是存在端口占用,但是錯誤提示卻沒有給出被占用的是哪一個端口。
那接下來怎么辦呢?
重啟了一下網卡,還是不行。
然后重啟了一下電腦,再打開IDEA,修改了一下pom文件試試,unable to import maven project see logs for details問題沒了,成功更新了maven依賴包!然后運行程序,java.net.SocketException: Permission denied:connect問題也沒了。