今天在Mac系統上啟動Java Web項目的時候,提示了Java.net.UnknownHostException: yangxiaomindeMacBook-Pro.local nodename nor servname provided類似的錯誤,然而同樣的項目在windows的環境下是可以正常啟動運行的。然后在網上找到了解決辦法,雖然是英文的,但是根據說的做法,確實可以解決這個問題。現在將這個問題的解決辦法分享給大家。
首先看下異常的提示信息:
[java] view plain copy
在CODE上查看代碼片派生到我的代碼片
java.net.UnknownHostException: yangxiaomindeMacBook-Pro.local: yangxiaomindeMacBook-Pro.local: nodename nor servname provided, or not known
at java.net.InetAddress.getLocalHost(InetAddress.java:1473)
at org.eclipse.rse.core.RSECorePlugin.getLocalMachineName(RSECorePlugin.java:265)
at org.eclipse.rse.core.RSEPreferencesManager.getDefaultPrivateSystemProfileName(RSEPreferencesManager.java:358)
at org.eclipse.rse.core.RSEPreferencesManager.initDefaults(RSEPreferencesManager.java:337)
at org.eclipse.rse.internal.core.RSEPreferenceInitializer.initializeDefaultPreferences(RSEPreferenceInitializer.java:23)
at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper$1.run(PreferenceServiceRegistryHelper.java:300)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
....
....
....
Caused by: java.net.UnknownHostException: yangxiaomindeMacBook-Pro.local: nodename nor servname provided, or not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293)
at java.net.InetAddress.getLocalHost(InetAddress.java:1469)
... 28 more
關於異常信息中的yangxiaomindeMacBook-Pro.local這個東西,其實是我們的Mac系統的主機名稱,有些代碼里面可能需要根據主機名稱來去本地的DNS里找對應的IP地址,由於本地的DNS配置中沒有指定主機名這個IP地址是什么,也就會提示這個錯誤了。
解決辦法非常的簡單:
1、打開Mac系統上的終端,查看查看當前主機DNS的配置,輸入命令cat /private/etc/hosts,如圖所示:
2、,然后編輯主機配置,增加主機名的映射,輸入命令sudo vi /private/etc/hosts,進入VI編輯器,增加如下的映射
127.0.0.1 yangxiaomindeMacBook-Pro.local
退出保存即可。
3、最后,在終端中輸入刷新的命令dscacheutil -flushcache
經過了三個步驟之后,啟動Java Web項目的時候,就不會出現如下的錯誤信息。
之所以會出現這個錯誤,網上說是項目中有地方調用如下的代碼:
[java] view plain copy
在CODE上查看代碼片派生到我的代碼片
InetAddress.getLocalHost().getCanonicalHostName();
說是這個方法會返回FQDN (Fully Qualified Domain Name),如果沒有配置主機名,那么調用了這段代碼會拋出異常信息,而這個方法依賴於底層的操作系統,Mac系統的配置和Windows有些不同!