循环依赖阻止Tomcat上的war部署

问题描述 投票:0回答:1

我使用在本地以及多个测试Tomcat服务器上部署的Jersey进行休息服务战(将调用A),但无法加载3~prod服务器中的1个。我相信它在处理注释时是一个循环依赖。服务器上的另一场战争B无处不在。在服务器A失败时,如果删除B,则A将起作用。这是通过随机试验和错误发现的。除了war文件以不同的顺序出现之外,服务器设置是相同的。我一直在研究如何强制jar文件中的注释按特定顺序处理,以消除任何伪随机性。我即将发布一个问题。甚至没有意识到,如果这是订购罐子的正确方法,我可以深入多个切线。所以我想我首先可能会对我的发展方向有所了解。

18-Apr-2019 07:43:42.886 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/opt/tomcat/webapps/[A].war]
18-Apr-2019 07:43:43.337 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/[A].war]]
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:985)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/[A]] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [oracle.net.aso.d->oracle.net.aso.e->java.lang.Object->java.lang.Object->java.lang.Object->java.lang.Object->
.
.
.
java.lang.Object->java.lang.Object->java.lang.Object->java.lang.Object]
                at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2100)
                at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2044)
                at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1990)
                at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1960)
                at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1913)
                at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1153)
                at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:765)
                at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
                at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5154)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
                ... 10 more
java tomcat annotations jersey circular-dependency
1个回答
1
投票
oracle.net.aso.d->oracle.net.aso.e->java.lang.Object->java.lang.Object->java.lang.Object
  1. 查看消息,它会扫描一个jar中的类,然后进入java.lang.Object循环。这很奇怪。 (如果可以使用最新版本的Tomcat重现,例如只有该jar文件的空Web应用程序,请提出问题)。
  2. 从注释扫描中跳过文件相当容易。这在Apache Tomcat的FAQ页面中记录在“如何使Tomcat启动更快”下。

请注意,您还没有提到您正在使用的Apache Tomcat(x.y.z)版本。

© www.soinside.com 2019 - 2024. All rights reserved.