【问题标题】:ClassNotFoundException for commons-lang3 when deploying WAR to Wildfly 14将 WAR 部署到 Wildfly 14 时 commons-lang3 的 ClassNotFoundException
【发布时间】:2018-12-20 10:10:39
【问题描述】:

我们正在开发一个应用程序,它使用:

  • 野蝇14
  • Java EE 7

代码编译成功,WAR 被打包。然而,在将 WAR 部署到 Wildfly 时,我得到以下异常:

Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils from [Module \"deployment.projectTitle.war:main\" from Service Module Loader]"}}

其他也使用org.apache.commons.lang3.StringUtils的WAR部署成功。

pom.xml 中设置了这个库的两个位置。

pom.xml

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>

    <dependencyManagement>
      <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-version}</version>
            <scope>provided</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>

【问题讨论】:

    标签: java maven wildfly


    【解决方案1】:

    请尝试更改编译范围。从&lt;scope&gt;provided&lt;/scope&gt;&lt;scope&gt;compile&lt;/scope&gt;

    这样您将在您的战争中包含图书馆。我认为 Wildfly 内部没有提供,这可能是问题所在。

    【讨论】:

      【解决方案2】:

      这是由于提供的。 Commons 不在应用程序的类路径中,因为您告诉 Maven 您会提供它。很像编译,但是你希望JDK或者容器在运行时提供依赖,可能WildFly没有。

      【讨论】:

      • 正如@Pulszar 还建议的那样:将范围更改为compile 确实有效。即使完全删除它也可以。但是我很困惑,因为 Wildfly 14 确实包含以下 JAR:modules/system/layers/base/org/apache/commons/lang3/maincommons-lang3-3.6.jar
      • @RobertStrauch AFAIK,只有当您在应用程序描述符中明确依赖该模块时,该应用程序才可用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      相关资源
      最近更新 更多