解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错
解決IntelliJ IDEA報錯:調用方法[manageApp]時發生異常java.lang.IllegalStateException: 啟動子級時出錯
問題描述:
??筆者將一個在 Tomcat 安裝目錄下的文件夾 webapps 部署成功且運行正常的 Web 應用,改成使用 IntelliJ IDEA 工程中的文件夾 webapp 來部署。這之中,筆者沒有改動原 Web 應用文件夾內的任何文件,但卻在 IntelliJ IDEA 中運行時直接 報錯1^11 。這之后,筆者改使用該工程來部署其它原來在此 IntelliJ IDEA 工程中部署成功的任何 Web 應用,此時均報與之前相同的 錯誤2^22 。
筆者報錯時的運行環境:
-
JDK 13.0.2
-
Maven 3.6.3
-
Tomcat 9.0.41(Servlet 4.0,JSP 2.3)
-
IntelliJ IDEA 2020.1.2 (Ultimate Edition)
??這個報錯的信息如下:
XX-XXX-202X XX:XX:XX.XXX 嚴重 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke 調用方法[manageApp]時發生異常java.lang.IllegalStateException: 啟動子級時出錯at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1727)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:567)at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:459)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:408)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:567)at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)at java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1406)at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:827)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:567)at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)at java.base/java.lang.Thread.run(Thread.java:830)Caused by: org.apache.catalina.LifecycleException: 無法啟動組件[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/XXX_war_exploded]]at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)... 42 moreCaused by: java.lang.IllegalArgumentException: 找到多個名為XXX的片段。這是不合法的相對排序。有關詳細信息,請參閱Servlet規范的第8.2.2 2c節??紤]使用絕對排序。at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2260)at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2218)at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1293)at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:985)at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:303)at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5082)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)... 43 more XX-XXX-202X XX:XX:XX.XXX 嚴重 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke 調用方法[createStandardContext]時發生異常javax.management.RuntimeOperationsException: 調用方法[manageApp]時發生異常at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:459)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:408)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:567)at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)at java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1406)at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:827)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:567)at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [202X-XX-XX XX:XX:XX.XX,XXX] Artifact XXX:war exploded: Error during artifact deployment. See server log for details.at java.base/java.lang.Thread.run(Thread.java:830)Caused by: java.lang.IllegalStateException: 啟動子級時出錯at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1727)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:567)at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)... 34 moreCaused by: org.apache.catalina.LifecycleException: 無法啟動組件[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/XXX_war_exploded]]at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)... 42 moreCaused by: java.lang.IllegalArgumentException: 找到多個名為XXX的片段。這是不合法的相對排序。有關詳細信息,請參閱Servlet規范的第8.2.2 2c節??紤]使用絕對排序。at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2260)at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2218)at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1293)at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:985)at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:303)at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5082)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)... 43 more??筆者在經過反復試驗排錯后,終于找到了根因。原來筆者在此 IntelliJ IDEA 工程中使用的是 Maven 來構建項目的,而 Maven 中已經有了設置依賴的方法——通過文件 pom.xml 來設置,但在 Web 應用中是通過在 Web 應用下的目錄 WEB-INF\lib 來設置的。如果同時設置了這兩者,這就導致沖突,從而引發上面的 報錯1^11 。同理,如果在 IntelliJ IDEA 中設置了 Sources Root(源代碼根目錄),然后又在文件夾 WEB-INF 下投入了目錄 classes,這同樣會導致沖突。因此,解決 報錯1^11 的方法就是:
-
方法 1:只使用本方法構成項目的 Java 源文件、依賴(如果同時摻雜了其它方法,刪除之):
-
源文件:選擇 Web 應用下的目錄 WEB-INF\classes 作為 Web 應用所需要的已編譯 Java 源文件目錄。
-
依賴:選擇 Web 應用下的目錄 WEB-INF\lib 作為依賴的配置。
-
-
方法 2:只使用本方法構成項目的 Java 源文件、依賴(如果同時摻雜了其它方法,刪除之):
-
源文件:在 IntelliJ IDEA 中標記某一個文件夾作為 Java 源文件目錄。
-
依賴:在下面的內容只選其一。
-
選擇且只選擇一種項目構建工具管理依賴:(推薦)
-
Maven:在文件 pom.xml 中設置依賴
-
Gradle:在文件 build.gradle 中設置依賴
-
-
使用 IntelliJ IDEA 原生的方法導入依賴(這種方法引入依賴弊端很多,不建議使用)。用這種方式導入依賴的方法,可見筆者的另一篇博客:
Java 庫文件的添加教程:
https://blog.csdn.net/wangpaiblog/article/details/111772193 -
選擇 Web 應用下的目錄 WEB-INF\lib 作為依賴的配置。
-
-
??另外,在產生了 報錯1^11 之后,可能會破壞此 IntelliJ IDEA 工程的環境,導致以后即使運行配置正確的 Web 應用,也將一直發生相同的報錯,即上面的 錯誤2^22 。此時,可以在解決 報錯1^11 的問題之后,刪除此 IntelliJ IDEA 工程下,上一次編譯生成的文件夾(如 Maven 編譯產生的文件夾 target),然后重新編譯即可。
總結
以上是生活随笔為你收集整理的解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路径中斜杠/、点斜杠./、点点斜杠../
- 下一篇: 如何在 IntelliJ IDEA 中整