【问题标题】:Webapp fails with "JBAS011232: Only one JAX-RS Application Class allowed" after adding a maven dependency to hadoop-azure在将 maven 依赖项添加到 hadoop-azure 后,Webapp 失败并显示“JBAS011232:只允许一个 JAX-RS 应用程序类”
【发布时间】:2021-08-20 17:35:03
【问题描述】:

我有一个在 JBoss EAP 6.4 中运行良好的 webapp。我想向我的 web 应用程序添加一些功能,以便它可以处理驻留在 AzureBlob 存储中的 Parquet 文件。我向我的 pom.xml 添加了一个依赖项:

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-azure</artifactId>
        <version>3.1.0</version>
    </dependency>

如果我现在尝试启动我的 web 应用程序,它会在启动时失败:

09:29:43,703 错误 [org.jboss.msc.service.fail](MSC 服务线程 1-10) MSC000001:启动服务失败 jboss.deployment.unit."myApp-0.0.1-SNAPSHOT.war".POST_MODULE: 服务中的 org.jboss.msc.service.StartException jboss.deployment.unit."myApp-0.0.1-SNAPSHOT.war".POST_MODULE: JBAS018733:无法处理部署的 POST_MODULE 阶段 “myApp-0.0.1-SNAPSHOT.war”在 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:166) [jboss-as-server-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1980) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] ...引起:org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011232:只允许一个 JAX-RS 应用程序类。 com.sun.jersey.api.core.ResourceConfig com.sun.jersey.api.core.DefaultResourceConfig com.sun.jersey.api.core.PackagesResourceConfig com.mycompany.myapp.rest.RestApplication com.sun.jersey.api.core.ClassNamesResourceConfig com.sun.jersey.api.core.ScanningResourceConfig com.sun.jersey.api.core.servlet.WebAppResourceConfig com.sun.jersey.api.core.ApplicationAdapter com.sun.jersey.server.impl.application.DeferredResourceConfig com.sun.jersey.api.core.ClasspathResourceConfig 位于 org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:206) 在 org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.deploy(JaxrsScanningProcessor.java:104) 在 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:159) [jboss-as-server-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] ... 还有 5 个

09:29:43,709 错误 [org.jboss.as.controller.management-operation] (控制器引导线程)​​JBAS014612:操作(“部署”)失败 - 地址:([("deployment" => "myApp-0.0.1-SNAPSHOT.war")]) - 失败 描述:{“JBAS014671:失败的服务”=> {"jboss.deployment.unit."myApp-0.0.1-SNAPSHOT.war".POST_MODULE" => “服务中的 org.jboss.msc.service.StartException jboss.deployment.unit."myApp-0.0.1-SNAPSHOT.war".POST_MODULE: JBAS018733:无法处理部署的 POST_MODULE 阶段 “myApp-0.0.1-SNAPSHOT.war” 引起:org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011232:只允许一个 JAX-RS 应用程序类。 com.sun.jersey.api.core.ResourceConfig com.sun.jersey.api.core.DefaultResourceConfig com.sun.jersey.api.core.PackagesResourceConfig com.mycompany.myapp.rest.RestApplication com.sun.jersey.api.core.ClassNamesResourceConfig com.sun.jersey.api.core.ScanningResourceConfig com.sun.jersey.api.core.servlet.WebAppResourceConfig com.sun.jersey.api.core.ApplicationAdapter com.sun.jersey.server.impl.application.DeferredResourceConfig com.sun.jersey.api.core.ClasspathResourceConfig"}}

消息“JBAS011232:只允许一个 JAX-RS 应用程序类”似乎是由我的 web 应用程序尝试同时使用 RestEasy 和 Jersey 引起的。 JBoss 默认使用 RestEasy。显然,hadoop-azure 必须有一个 Jersey 应用程序类。如何通过指示我不想使用基于 Jersey 的应用程序类来消除此问题?

【问题讨论】:

  • 您可以尝试使用最新的hadoop-azure 看看会发生什么。在您使用的版本中,hadoop-commoncompile,更新版本是 providedhadoop-common 是泽西岛的魅力所在。
  • 我将 hadoop-azure 更新到 3.3.0(也尝试了 3.2.2),但仍然得到“JBAS011232:只允许一个 JAX-RS 应用程序类”。我已更新问题以显示 3.3.0。
  • 问题解决了!我的 pom.xml 也有一个 hadoop-common 条目,其范围为“编译”。当我将其更改为“提供”时,我的应用程序在 JBoss 中运行。 @Paul - 如果您写下您的评论作为答案,我很乐意接受。如果你不喜欢它,我会写下来。

标签: maven jboss jersey azure-web-app-service resteasy


【解决方案1】:

hadoop-azure 拉入hadoop-common,后者拉入泽西岛。在您使用的hadoop-azure 版本中,hadoop-commoncompile &lt;scope&gt; 中。在新版本中,它在provided 范围内。所以你可以将hadoop-azure 依赖升级到最新的。如果需要hadoop-common编译,可以重新声明hadoop-common,放到provided范围内。

【讨论】:

    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2011-02-01
    相关资源
    最近更新 更多