通过Eclipse启动Tomcat失败(超时)

33

我正在尝试通过Eclipse运行Tomcat。这是我过去几年来一直在做的事情。昨天它还可以用,现在却不能用了。我得到的错误信息是

Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
输出为:
Jul 06, 2012 8:32:26 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Program Files\Java\jdk1.7.0_05\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\QuickTime\QTSystem\;D:\Launch;D:\Program Files\Java\jdk1.7.0_05\bin;%PROGRAMFILES%\Internet Explorer;C:\Program Files (x86)\SMLNJ\bin\;D:\Program Files\TortoiseSVN\bin;C:\ghc\ghc-6.6\bin;D:\Program Files\MySQL\MySQL Server 5.5\bin;%ANT_HOME%/bin;D:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;D:\Program Files\Microsoft SQL Server\100\Tools\Binn\;D:\Program Files\Microsoft SQL Server\100\DTS\Binn\;D:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;D:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;D:\Program Files (86x)\;.
Jul 06, 2012 8:32:26 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Jul 06, 2012 8:32:26 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Jul 06, 2012 8:32:26 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 468 ms
Jul 06, 2012 8:32:26 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Jul 06, 2012 8:32:26 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.28
Jul 06, 2012 8:32:26 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\Program Files\Java\apache-tomcat-7.0.28\webapps\docs
Jul 06, 2012 8:32:26 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\Program Files\Java\apache-tomcat-7.0.28\webapps\examples
Jul 06, 2012 8:32:26 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Jul 06, 2012 8:32:26 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Jul 06, 2012 8:32:26 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@5710ddf9')
Jul 06, 2012 8:32:26 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\Program Files\Java\apache-tomcat-7.0.28\webapps\host-manager
Jul 06, 2012 8:32:26 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\Program Files\Java\apache-tomcat-7.0.28\webapps\manager
Jul 06, 2012 8:32:26 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\Program Files\Java\apache-tomcat-7.0.28\webapps\ROOT
Jul 06, 2012 8:32:26 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Jul 06, 2012 8:32:26 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Jul 06, 2012 8:32:26 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 504 ms

我已经寻找解决方案数小时了,但是没有成功,可能是一些简单的东西。我尝试过以下方法:

  1. 删除Serve并在eclipse中重新创建
  2. 重启计算机、eclipse
  3. 重新安装eclipse、tomcat
  4. 使用-clean启动Eclipse
  5. 启动不带Web应用程序的服务器
  6. 增加超时时间

我可以通过命令行启动tomcat,但是我需要通过eclipse来调试。我知道这个SO帖子,并且查看了许多其他帖子,但都没有成功。

有什么想法吗?

更新:我刚意识到服务器确实启动了。然而,eclipse做的最后一个功能失败了。我设置超时时间为10分钟,这样在那段时间内我能够访问服务器,但无法使用eclipse的调试功能。因此,Eclipse启动它,尝试做某些事情,但那件事情从未完成,Eclipse在超时期满后关闭Tomcat。

更新:回顾发生这个问题时发生的事情,计算机显然安装了Java更新。


奇怪,日志似乎表明Tomcat已经正确启动了。你是否尝试在Eclipse中出现错误的情况下通过8080端口访问你的Web应用程序?看起来像是Tomcat和Eclipse插件之间的通信问题。你是否运行了防火墙? - David Levesque
是的,我确实尝试过访问它。如更新中所解释的那样,在超时之前我可以访问它。 - Orlan
是的。我一直在使用最新版本。我今天从网站上下载了它。这是Juno版本。 - Orlan
还尝试了使用Helio版本。同时还使用了Tomcat 6和Tomcat 7。 - Orlan
1
看起来是一个重复的问题,与我回答的 https://dev59.com/slvUa4cB1Zd3GeqPrDA9 相同。尝试从配置视图更改HTTP端口号为其他数字,例如8090。 - Juha Palomäki
28个回答

39

一次Java更新引起了我同样的问题(以及其他问题)。这个更新导致Eclipse在ping Tomcat时使用ipv6,但由于某种原因,这与我的设置不兼容。

我通过添加以下内容进行了修复:

-Djava.net.preferIPv4Stack=true

到达eclipse.ini文件。


4
这真是救命稻草。你是怎么发现的? - Varun Achar
我尝试过这个,但没有成功。我还禁用了所有网络适配器中的IPv6,但没有任何改变。 - rbeede
最后我被Eclipse安装和我的工作空间目录搞崩了。重新安装解决了这个问题。我保留了IPv6启用状态。 已安装64位JDK java版本“1.7.0_09” Java(TM) SE Runtime Environment (build 1.7.0_09-b05) ; Eclipse Juno 64位(build 20120920-0800) ; 核心tar.gz apache-tomcat-7.0.35(未更改) - rbeede
修复成功。如果您增加服务器的超时值并调用HappyAxis.jsp,则会出现问题。它显示版本服务不起作用。但是,相同的URL在浏览器中可以正常工作。修复后一切都很顺利。现在,有没有一种方法让我的Eclipse使用IPv6与Tomcat服务器通信? - Jalkin

27
我发现在“调试”时,由于代码中的无效/损坏/???断点,会导致这种情况发生。通常伴随着缓慢的启动时间。
"删除所有断点"解决了我的问题。

4
就是这样了!Eclipse 应该以某种方式显示通知或抛出异常。我花了几天的时间才找到这个问题所在。 - Steffen Nieuwenhoven
也帮了我大忙 - RyanCW
这个救了我的一整天。之前不明白为什么项目突然间不能工作,但现在清楚了。我在另一个项目中设置了断点。非常感谢你。 - qumm
有人应该给这个人颁个奖。顺便说一下,这是如何删除断点的方式:运行->移除所有断点。 - user2798227
发布于2021年,这个解决方案让我省去了很多烦恼!由于设置了多个断点,Tomcat无法启动调试,删除所有现有的断点解决了问题。谢谢!如果有人想知道,这是我的Eclipse IDE版本: 版本:2019-03(4.11.0) 构建ID:20190314-1200 - dian jin

26

我在我的系统(Windows 7 pro 64 bit)上遇到了类似的问题,Tomcat无法从任何Eclipse版本中启动。原来默认情况下Eclipse使用系统网络配置,如果您配置了一个代理并且它无法解析localhost,则Tomcat启动将在Eclipse中挂起

要查看是否存在此问题,请转到Window -> Preferences -> General -> Network Connections,查看是否已选中其中一个框。我能够通过设置Active ProviderDirect(它会取消所有框的选中)来覆盖我的代理配置。


感谢您提供详细的小型答案。 - Bhavesh Modi
非常感谢!哎呀!这让我疯了。 - KFox112
很好!! 非常感谢你! - user2930137

10
在我的情况下,我禁用了端口8080上的HTTP/1.1连接器,而选择在端口8443上使用SSLEnabled(https)HTTP/1.1连接器。我不确定Eclipse/Tomcat通信失败是因为错误的端口还是错误的协议,但当我将HTTP/1.1连接器重新加入到我的server.xml中(除了端口8443上的安全连接器),Eclipse能够正确检测到Tomcat成功启动。似乎为了让Eclipse识别Tomcat已成功启动,Tomcat必须配置一个非SSL连接器在端口8080上。

1
这是唯一对我有效的解决方案,感谢您分享。缺点是应用程序也可以通过HTTP访问。但当然,这似乎是Eclipse中的一个错误/缺陷,而不是您的解决方案!顺便说一下,我正在运行Eclipse Neon.2和Tomcat 8.5.11,所以在当前版本中仍未修复... - chuky
1
我也确认这是我的问题。我已经注释了连接器端口8080的行。我只是希望Tomcat不要监听8080端口,而是使用同一端口上运行的其他HTTP服务器。我已将连接器中的端口值从8080更改为8181,并且它可以正常工作。 - Pawan

7
我通过以下步骤解决了这个问题:
  • 右键单击Tomcat服务器(在Eclipse Servers视图下)
  • 选择打开-应该会打开xml编辑器
  • 查找超时部分并将值增加到> 45秒
此方法适用于Eclipse Helios / Tomcat 7。

1
虽然这并不能真正回答原来的问题,但它确实帮助了我在类似情况下(即当我设置一个断点,在服务器启动期间触发时)。我需要暂时增加超时时间,但这并不明显。 - djb

5

我尝试了所有这些选项,但是我无法让我的STS最新版本(Spring Tool Suite 3.7.1.201510041213-RELEASE)发现Tomcat已经启动。

我尝试过Tomcat 7.0.64、8.0.26和8.0.28,但结果都相同。我确实成功地安装了原始版的Tomcat,因此我认为这必须是我的server.xml(或其他文件)的问题。

因此,我逐行查看,直到服务器视图停止获取已启动状态。长话短说,将任何值(如false)设置为secure属性会导致STS认为它是另一个SSL处理程序。

例如:

<Connector secure="false" executor="conPool" port="8080" redirectPort="8443" protocol="HTTP/1.1" />

这将导致STS出现异常,而:

<Connector executor="conPool" port="8080" redirectPort="8443" protocol="HTTP/1.1" />

功能正常。

看起来STS认为仅具有secure属性,无论其值如何,它都是SSL处理程序。 旧版本的STS似乎没有这个问题。 已经有人提交了非常相似的错误

还要注意,服务器配置窗格显示:

enter image description here

当server.xml在非SSL连接器上具有secure属性(而且行为有些奇怪)时:

enter image description here

将其删除后列出常规端口。


5

在这里遇到了同样的问题。尝试了其他人提出的所有解决方案,但都没有对我起作用。

  1. 将http 1.1端口更改为8090。
  2. 在eclipse.ini(在我的情况下为STS.ini)中添加-Djava.net.preferIPv4Stack=true。
  3. 在“窗口”-“首选项”-“常规”-“网络连接”中,将活动提供程序设置为直接或手动。
  4. 将127.0.0.1 localhost添加到hosts本地DNS文件(C:\Windows\System32\drivers\etc\hosts)

最后,我意识到这一切都是由于我放置了tomcat本地库而发生的。我删除了它并恢复了上述所有更改,现在它可以正常工作。无论如何,感谢你们所有人的帮助,这帮助我将问题与本地库联系起来。


2

我曾经折腾过我的/etc/hosts文件,并删除了在Eclipse中设置的别名。所以

  1. 转到窗口 > 显示视图 > 服务器
  2. 双击Tomcat v7.0(这是我拥有的版本)
  3. 在“主机名:”字段中检查您是否具有有效的别名-如果不确定,请使用localhost或检查/etc/hosts或%systemroot%\system32\drivers\etc\hosts

延长超时只会推迟必然发生的事情,它解决的是症状而非原因。


这也是我的错误:无效的服务器地址。 - xtian

2

尝试了以上所有解决方案后仍然面临同样的问题。我通过在server.xml中添加http连接器来解决了这个问题。实际上,在解决这个问题之前,我只有https连接器。看起来Eclipse会通过请求http url来查找Tomcat启动情况,一旦删除就无法确定Tomcat是否成功启动。


2

确保当主机名设置为localhost时,Tomcat实际上正在侦听127.0.0.1。

在Eclipse中启动Tomcat服务器时,日志显示类似以下内容:

10:07:23 INFO  main o.a.c.h.Http11NioProtocol Initializing ProtocolHandler ["http-nio-192.168.2.63-8080"]

您的Tomcat服务器配置中,“主机名”和HTTP/1.1端口必须解析为显示的IP地址和HTTP端口(在给定示例中为IP 192.168.2.63端口8080)。
这个问题可以通过使用Eclipse 4.5(Mars)和Tomcat 8来解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接