【问题标题】:Java 7 has problems with SocketExceptionJava 7 存在 SocketException 问题
【发布时间】:2014-01-03 15:55:52
【问题描述】:

我正在使用 intellij IDEA 进行开发,我注意到当 IDEA 在 JAVA 7 上运行(我在 Windows 7 上工作)时,maven 插件在下载依赖项时出现问题。但是在 JAVA 6 上运行它没有问题。

这里是idea.log的摘录

2014-01-03 14:48:07,861 [ 366414]   WARN - ution.rmi.RemoteProcessSupport - at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148) 
2014-01-03 14:48:07,861 [ 366414]   WARN - ution.rmi.RemoteProcessSupport - at com.sun.proxy.$Proxy20.isCanceled(Unknown Source) 
2014-01-03 14:48:07,861 [ 366414]   WARN - ution.rmi.RemoteProcessSupport - at org.jetbrains.idea.maven.server.MavenServerProgressIndicatorWrapper.isCanceled(MavenServerProgressIndicatorWrapper.java:58) 
2014-01-03 14:48:07,861 [ 366414]   WARN - ution.rmi.RemoteProcessSupport - at org.jetbrains.idea.maven.server.TransferListenerAdapter.transferFailed(TransferListenerAdapter.java:127) 
2014-01-03 14:48:07,862 [ 366415]   WARN - ution.rmi.RemoteProcessSupport - ... 5 more 
2014-01-03 14:48:07,862 [ 366415]   WARN - ution.rmi.RemoteProcessSupport - Caused by: java.net.SocketException: Invalid argument: connect 
2014-01-03 14:48:07,862 [ 366415]   WARN - ution.rmi.RemoteProcessSupport - at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
2014-01-03 14:48:07,862 [ 366415]   WARN - ution.rmi.RemoteProcessSupport - at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 
2014-01-03 14:48:07,862 [ 366415]   WARN - ution.rmi.RemoteProcessSupport - at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
2014-01-03 14:48:07,862 [ 366415]   WARN - ution.rmi.RemoteProcessSupport - at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
2014-01-03 14:48:07,862 [ 366415]   WARN - ution.rmi.RemoteProcessSupport - at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
2014-01-03 14:48:07,862 [ 366415]   WARN - ution.rmi.RemoteProcessSupport - at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
2014-01-03 14:48:07,862 [ 366415]   WARN - ution.rmi.RemoteProcessSupport - at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
2014-01-03 14:48:07,862 [ 366415]   WARN - ution.rmi.RemoteProcessSupport - at java.net.Socket.connect(Socket.java:579) 
2014-01-03 14:48:07,863 [ 366416]   WARN - ution.rmi.RemoteProcessSupport - at java.net.Socket.connect(Socket.java:528) 
2014-01-03 14:48:07,863 [ 366416]   WARN - ution.rmi.RemoteProcessSupport - at java.net.Socket.<init>(Socket.java:425) 
2014-01-03 14:48:07,863 [ 366416]   WARN - ution.rmi.RemoteProcessSupport - at java.net.Socket.<init>(Socket.java:208) 
2014-01-03 14:48:07,863 [ 366416]   WARN - ution.rmi.RemoteProcessSupport - at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40) 
2014-01-03 14:48:07,863 [ 366416]   WARN - ution.rmi.RemoteProcessSupport - at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:147) 
2014-01-03 14:48:07,863 [ 366416]   WARN - ution.rmi.RemoteProcessSupport - at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613) 
2014-01-03 14:48:07,863 [ 366416]   WARN - ution.rmi.RemoteProcessSupport - ... 13 more 

注意这一行

Caused by: java.net.SocketException: Invalid argument: connect 

我在寻找问题的解决方案,发现了这个link

我按照建议做了以下操作

  1. 确保我的 /etc/hosts 文件中有 127.0.0.1 localhost

  2. -Djava.net.preferIPv4Stack=true 添加到我的idea64.exe.vmoptions 使文件看起来像这样

-Xms128m
-Xmx2048m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=96m
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+UseCodeCacheFlushing
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50

参数在idea.log中确认

2014-01-03 14:42:01,495 [     48]   INFO -        #com.intellij.idea.Main - IDE: IntelliJ IDEA (build #IC-133.193, 02 Dec 2013 00:00) 
2014-01-03 14:42:01,496 [     49]   INFO -        #com.intellij.idea.Main - OS: Windows 7 (6.1, amd64) 
2014-01-03 14:42:01,496 [     49]   INFO -        #com.intellij.idea.Main - JRE: 1.7.0_45-b18 (Oracle Corporation) 
2014-01-03 14:42:01,496 [     49]   INFO -        #com.intellij.idea.Main - JVM: 24.45-b08 (Java HotSpot(TM) 64-Bit Server VM) 
2014-01-03 14:42:01,497 [     50]   INFO -        #com.intellij.idea.Main - JVM Args: -Xms128m -Xmx2048m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=96m -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+UseCodeCacheFlushing -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -Xbootclasspath/a:D:\Programs\IntelliJ IDEA Community Edition 13.0\lib\boot.jar -Didea.paths.selector=IdeaIC13 

    2014-01-03 14:42:13,590 [  12143]   INFO - ution.rmi.RemoteProcessSupport - "C:\Program Files (x86)\Java\jdk1.7.0_45\jre\bin\java" -Djava.awt.headless=true -Xmx512m -Dfile.encoding=windows-1252 -classpath

但问题仍然存在。

这一定是 Java 7 的问题,它更喜欢 IPv6 而不是 IPv4。有谁知道如何解决这个问题?

感谢您的帮助。

【问题讨论】:

  • 请给我一个SSCCE好吗?

标签: java java-7


【解决方案1】:

我发现解决方案确实是-Djava.net.preferIPv4Stack=true,但是应该为IDEA中的maven导入器设置,因为它在另一个JVM中运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多