Maven 发布插件抛出 Hostname Not found 异常?

Maven 发布插件抛出 Hostname Not found 异常?

我正在尝试在詹金斯中发布一个项目并收到未找到主机的异常。

Caused by: java.lang.RuntimeException: java.net.UnknownHostException: XXXXXXXXXXXXXXX: nodename nor servname provided, or not known
    at org.apache.maven.scm.provider.perforce.PerforceScmProvider.generateDefaultClientspecName(PerforceScmProvider.java:420)
    at org.apache.maven.scm.provider.perforce.PerforceScmProvider.getClientspecName(PerforceScmProvider.java:395)
    at org.apache.maven.scm.provider.perforce.command.checkout.PerforceCheckOutCommand.executeCheckOutCommand(PerforceCheckOutCommand.java:75)
    at org.apache.maven.scm.command.checkout.AbstractCheckOutCommand.executeCommand(AbstractCheckOutCommand.java:82)
    at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:59)

通过阅读源代码看起来异常是在这一行引发的:

InetAddress.getLocalHost().getHostName();

由于我无法控制发布插件的源代码,除了更改代码之外,还有其他方法可以解决这个问题吗?我是否可以以某种方式设置我的 etc 主机以强制从“InetAddress.getLocalHost().getHostName()”获得特定响应?

答案1

我假设您的 XXXXXXXXXXXXXXX 正在掩盖实际的非本地主机(或本地主机变体/别名)主机名。

如果您的机器的主机名/IP 地址无法根据本地名称解析器设置进行正向和反向查找,则可能会发生这种情况。 InetAddress.getLocalHost()已知执行反向查找来解析本地主机。

运行该hostname命令,并确保在 中有一个与您的真实 IP 地址匹配的条目/etc/hosts。 它可能hostname返回 FQDN 主机名或别名/短主机名,并且无法正向/反向查找这些。

另一个问题可能是 IPv6 与 IPv4 之间的矛盾。

请注意,Jenkins JVM 将缓存主机名查找,因此最好有一个小型测试程序来执行测试调用InetAddress.getLocalHost(),否则您应该在测试每次配置更改后重新启动 Jenkins。

请提供反馈/其他详细信息,以便我可以改进这个答案。

相关内容