背景:用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号进程的端口。所以,确实是存在端口占用,但是错误提示却没有给出被占用的是哪一个端口。
那接下来怎么办呢?
重启了一下网卡,还是不行。