Eclipse 發布 Web 專案到 Tomcat 時啟動失敗,但單獨啟動 Tomcat 卻正常。錯誤日誌顯示:
嚴重: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8088"]
java.lang.NullPointerException
at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:302)
...
已嘗試修改 AJP 端口(8009→8088、8007),問題依舊,排除端口佔用可能。
Eclipse(特別是 Eclipse for Java EE / STS)預設內嵌一個 Tomcat 執行個體。當你在 Server 視圖配置外部 Tomcat 時,若未禁用內嵌實例,兩者會嘗試綁定相同端口(HTTP 8080、AJV 8009、關閉端口 8005),導致資源競爭與 NIO 端點銷毀異常。
若禁用內嵌實例後仍失敗,檢查外部 Tomcat conf/server.xml 三大端口無衝突:
<Server port="8005" shutdown="SHUTDOWN"> <!-- 關閉端口 -->
<Connector port="8080" protocol="HTTP/1.1" /> <!-- HTTP 端口 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <!-- AJP 端口 -->
使用 netstat -ano | findstr "8005 8080 8009" 確認無其他進程佔用。
wtpwebapps「我改了 AJP 端口就能解決」——錯誤。HTTP、Shutdown 端口同樣衝突,且 NIO 端點異常往往是雙實例並發關閉導致的競態條件,非單純端口問題。