如何摆脱 Unable to create annotation scanner for web module: null error while deploying war file on Tomee?

How to get rid of Unable to create annotation scanner for web module: null error while deploying war file on Tomee?

每当我将 Swagger 依赖项添加到我的 REST API 项目并尝试像之前一样将它部署在 Apache Tomee 上时(没有这些依赖项它的工作完全正常),它由于以下错误而无法启动:

19-Sep-2019 06:54:26.267 SEVERE [localhost-startStop-1] sun.reflect.NativeMethodAccessorImpl.invoke ContainerBase.addChild: start:
 org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/my-rest-api]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:952)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1823)
        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: org.apache.tomee.catalina.TomEERuntimeException: org.apache.openejb.OpenEJBException: Unable to create annotation scanner for web module my-rest-api: null
        at org.apache.tomee.catalina.TomcatWebAppBuilder.loadApplication(TomcatWebAppBuilder.java:2299)
        at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:1187)
        at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:1124)
        at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:133)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5087)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 10 more
Caused by: org.apache.openejb.OpenEJBException: Unable to create annotation scanner for web module my-rest-api: null
        at org.apache.openejb.config.DeploymentLoader.addWebModule(DeploymentLoader.java:886)
        at org.apache.openejb.config.DeploymentLoader.load(DeploymentLoader.java:233)
        at org.apache.tomee.catalina.TomcatWebAppBuilder.loadApplication(TomcatWebAppBuilder.java:2297)
        ... 16 more
Caused by: java.lang.IllegalArgumentException
        at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
        at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
        at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
        at org.apache.xbean.finder.AnnotationFinder.readClassDef(AnnotationFinder.java:1169)
        at org.apache.xbean.finder.AnnotationFinder.<init>(AnnotationFinder.java:147)
        at org.apache.xbean.finder.AnnotationFinder.<init>(AnnotationFinder.java:160)
        at org.apache.openejb.config.FinderFactory$OpenEJBAnnotationFinder.<init>(FinderFactory.java:546)
        at org.apache.openejb.config.FinderFactory.newFinder(FinderFactory.java:267)
        at org.apache.openejb.config.FinderFactory.create(FinderFactory.java:80)
        at org.apache.openejb.config.FinderFactory.createFinder(FinderFactory.java:69)
        at org.apache.openejb.config.DeploymentLoader.addWebModule(DeploymentLoader.java:878)
        ... 18 more

我在谷歌上搜索了很多,我发现一个可能的问题可能是与扫描器有冲突,因为 Swagger jaxrs2 依赖有它自己的 jaxrs2 注释和资源扫描器,而且 Tomee 有它自己的扫描器java 8 个来源。不幸的是,我没有设法找到解决此冲突的解决方案,而且我在 Java.

中没有使用注释和资源扫描器的经验

这些是导致 my-rest-api.war 在 Tomee 尝试部署它时失败的依赖项:

        <!-- Swagger -->
        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-jaxrs2</artifactId>
            <scope>compile</scope>
            <version>${swagger.jaxrs2.version}</version>
        </dependency>
        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-jaxrs2-servlet-initializer</artifactId>
            <version>${swagger.jaxrs2.version}</version>
        </dependency>

我正在寻找一种解决方案来将这些依赖项添加到项目中,而不是因此导致 Tomee 上的部署失败。我需要 swagger v3 注释的那些依赖项来记录 Rest API 代码。

好的,我刚刚发现这个问题在 Apache Tomee Plume 7.1.1 和 8.0.0 上已经消失。所以更新Tomee服务器是一个解决方案。