我收到java.net.SocketException:权限被拒绝:在Jenkins中发送电子邮件时连接

我收到java.net.SocketException:权限被拒绝:在Jenkins中发送电子邮件时连接,java,windows-7,jenkins,Java,Windows 7,Jenkins,我的配置: Windows 7计算机 爪哇7 Jenkins 1.511在本地帐户上作为服务运行 myjenkins.xml文件 <service> <id>jenkins</id> <name>Jenkins</name> <env name="JENKINS_HOME" value="%BASE%"/> <executable>C:\Program Files\IBM\SDP8.5\jdk

我的配置:

  • Windows 7计算机
  • 爪哇7
  • Jenkins 1.511在本地帐户上作为服务运行
myjenkins.xml文件

<service>
  <id>jenkins</id>
  <name>Jenkins</name>
  <env name="JENKINS_HOME" value="%BASE%"/>
  <executable>C:\Program Files\IBM\SDP8.5\jdk\bin\java.exe</executable>
  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 -Djava.net.preferIPv4Stack=true</arguments>
</service>
我对这个错误的理解是,Windows中存在一个漏洞,Java 7在防火墙和Java 7如何使用ipv4映射的ipv6地址方面暴露了该漏洞

据报告,这可以通过在java运行时中添加-Djava.net.preferIPv4Stack=true来解决。我已经成功地使用ANT电子邮件任务在此计算机上添加了-Djava.net.preferIPv4Stack=true。然而,在詹金斯,我没有任何运气

请注意,jenkins.xml文件似乎被完全忽略。未设置-Djava.net.preferIPv4Stack=true参数。PATH和JAVA_HOME都指向IBM运行时,但Jenkins仍然从Oracle v7运行时开始。詹金斯一定是在酝酿一个新的过程来启动和使用系统Java7

使用上面的配置,如果我转到Jenkins脚本控制台并使用“System.getProperty”(“java.net.preferIPv4Stack”)查询它,我什么也得不到(未设置)。如果我设置了该参数,我仍然会得到错误。如果我在命令行中添加-Djava.net.preferIPv4Stack=true(未使用服务),通过脚本控制台进行查询时仍未设置

我的问题

  • 为什么会出现此错误以及如何解决它?请记住,我可以编写一个ANT脚本,使用相同的smtp服务器和java运行时成功发送电子邮件

  • 如何让Jenkins使用-Djava.net.preferIPv4Stack=true参数和指定的运行时启动

  • 一些注意事项:

    • 由于公司问题,我无法卸载Java 7
    • 由于同样的问题,我无法安装Java6
    • 我被允许安装IBMJDK/JRE

    -jar
    参数之后的参数将被传递给应用程序,而不是java vm。因此,请尝试将
    -Djava.net.preferIPv4Stack=true
    移动到
    -jar
    参数之前

    2.如何让Jenkins使用-Djava.net.preferIPv4Stack=true参数和指定的运行时启动

    我不确定Java运行时的情况,但这就是参数“-Djava.net.preferIPv4Stack=true”对我起作用的原因

    1) 记事本“C:\ProgramFiles(x86)\Jenkins\Jenkins.xml”

    2) 找到类似以下内容的行:

    <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 -Djava.net.preferIPv4Stack=true</arguments>
    
    -Xrs-Xmx256m-Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle-jar“%BASE%\jenkins.war”--httpPort=8080-Djava.net.preferIPv4Stack=true
    
    3) 将“-Djava.net.preferIPv4Stack=true”部分移动到-jar参数之前。它现在看起来应该类似于:

    <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Djava.net.preferIPv4Stack=true -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>
    
    -Xrs-Xmx256m-Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle-Djava.net.preferIPv4Stack=true-jar“%BASE%\jenkins.war”--httpPort=8080
    
    4) 保存文件,退出记事本

    5) 重新启动jenkins服务


    6) 从“管理Jenkins->配置系统”发送测试电子邮件“网页。电子邮件现在应该可以工作了。

    您尝试过在
    -jar
    参数之前移动
    -Djava.net.preferIPv4Stack=true
    吗?这很有效!谢谢你能把它作为一个答案,这样我就可以检查它作为最佳答案吗?你能告诉我如何添加上面的-Djava.net.preferIPv4Stack=true。。我正在使用JDK 7。我不知道在哪里加上这个
    <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 -Djava.net.preferIPv4Stack=true</arguments>
    
    <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Djava.net.preferIPv4Stack=true -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>