Tomcat IDE 无法识别开始

Tomcat start not recognised by IDE

我正在使用 Netbeans 11 部署 WAR 文件。使用运行时,IDE启动Tomcat,显示启动信息:

INFO - Starting ProtocolHandler [http-nio-8080]
INFO - Starting ProtocolHandler [ajp-nio-8009]
INFO - Server startup in 815 ms

但是IDE"Run"选项卡显示启动失败,超时后:

Deploying on TomEE
    profile mode: false
    debug mode: false
    force redeploy: true
Starting Tomcat process...
Waiting for Tomcat...
Starting of Tomcat failed.

不知何故 IDE 没有正确检测到 Tomcat,因为 Tomcat 确实 运行正在监听 8080 端口。我试过 ,尤其是带有 IDE 代理和连接器的那个,但 none 有效。


根据评论:

1) 我是 运行ning TomEE,尽管我认为从 Netbeans 的角度(甚至从 TomEE 本身)来看我的问题没有区别。老实说,我认为这是一个 Netbeans - Tomcat 通信问题,TomEE 只是添加了一些库和其他会影响以后的东西。

2) 我使用的是自定义的 server.xml,但现在我使用的是原始的:

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- Note:  A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/server.html
 -->
<Server port="8005" shutdown="SHUTDOWN">
  <!-- TomEE plugin for Tomcat -->
  <Listener className="org.apache.tomee.catalina.ServerListener" />
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <!-- A "Service" is a collection of one or more "Connectors" that share
       a single "Container" Note:  A "Service" is not itself a "Container",
       so you may not define subcomponents such as "Valves" at this level.
       Documentation at /docs/config/service.html
   -->
  <Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->


    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" xpoweredBy="false" server="Apache TomEE" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation with the JSSE engine. When
         using the JSSE engine, the JSSE configuration attributes must be used.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" xpoweredBy="false" server="Apache TomEE" />
        </SSLHostConfig>
    </Connector>
    -->
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
         This connector uses the APR/native implementation. When using the
         APR/native implementation or the OpenSSL engine with NIO or NIO2 then
         the OpenSSL configuration attributes must be used.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" xpoweredBy="false" server="Apache TomEE" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host).
         Documentation at /docs/config/engine.html -->

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <Engine name="Catalina" defaultHost="localhost">

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

3) Tomcat stars 正确,我看到我的电脑打开了 8080 端口。实际上,我必须手动终止进程才能再次尝试从 Netbeans 获取新的 运行,否则它会抱怨端口已经打开。与此同时,Netbeans 只是等啊等……在 "waiting for Tomcat" 之后的某个时候它只是说它失败了,就像它无法识别 Tomcat 是 ON 一样。 Tomcat 保持 运行ning 就像没有人与它交流过一样。所以在任何地方都没有其他奇怪的日志。

4) 从 Netbans 我只能 "start",永远不会停止,因为它没有检测到 Tomcat 是 运行ning。因此,正如您所说, "stop" 命令被禁用。 Tomcat 是 运行ning 但 IDE 从未检测到它 运行ning.

5) 这种情况经常发生,我无法 运行 来自 IDE 的任何项目。


Netbeans 日志说:

INFO [org.netbeans.modules.tomcat5.deploy.TomcatManager]: TomEE version TOMEE_15, type TOMEE_PLUS
INFO [null]: Last record repeated again.
INFO [org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment]
org.netbeans.modules.j2ee.deployment.impl.ServerException: Starting of Tomcat failed.
    at org.netbeans.modules.j2ee.deployment.impl.ServerInstance._start(ServerInstance.java:1457)
    at org.netbeans.modules.j2ee.deployment.impl.ServerInstance.startTarget(ServerInstance.java:1400)
    at org.netbeans.modules.j2ee.deployment.impl.ServerInstance.startTarget(ServerInstance.java:1204)
    at org.netbeans.modules.j2ee.deployment.impl.ServerInstance.start(ServerInstance.java:1082)
    at org.netbeans.modules.j2ee.deployment.impl.TargetServer.startTargets(TargetServer.java:547)
[catch] at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:190)
    at org.netbeans.modules.maven.j2ee.execution.DeploymentHelper.perform(DeploymentHelper.java:185)
    at org.netbeans.modules.maven.j2ee.execution.ExecutionChecker.executionResult(ExecutionChecker.java:70)
    at org.netbeans.modules.maven.execute.MavenCommandLineExecutor.run(MavenCommandLineExecutor.java:303)
    at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:128)

我认为问题出在一台有两个网络接口的计算机上。不知何故,Netbeans(很有可能,除非 Tomcat 有事可做)错误地处理了这种情况,它无法检测到 Tomcat 已启动。

我真的不知道怎么解决,但是我断开了第二个接口,它似乎可以工作。这非常烦人且不方便,但它是一个有效的解决方法。

我发现这个是因为 sudo 真的很慢,而且我发现有一个问题,即 sudo 在具有两个或更多网络接口的机器上变得非常慢......无关,但解决它的方法: here (echo "Set probe_interfaces false" | sudo tee -a /etc/sudo.conf)

我遇到了同样的问题,使用旧版本 tomcat 解决了这个问题。

我在使用 Netbeans 11.1 和 11.3 时遇到了问题。

我在 tomcat 8.5.54 和 9.0.34 中收到此错误。 Tomcat 使用版本 8.5.49 工作正常

我用 google 和 Whosebug,直到看到这里的文章才解决: https://www.mail-archive.com/commits@netbeans.apache.org/msg24509.html

我下载了 NetBeans11.1 的源代码并使用命令构建它,

ant -Dcluster.config=full

大约需要 17 分钟。在那之后,我 运行 和

ant tryme

然后我在工具-> 服务器中设置 tomcat 设置并打开我的项目。然后我试着运行它。太棒了,它现在工作正常。

显然,这是 NetBeans 的一个错误。而且在NetBeans这边也不难解决。