WildFly App Dev:如何在开发时反映运行时类路径?

WildFly App Dev: how to reflect the runtime classpath at development time?

我正在开发一个项目,该项目在单个 WildFly 16 实例上部署为 .war WebApp。

使用IntelliJ Idea UE和Maven作为开发环境,我问自己如何在开发时在开发类路径中反映部署的应用程序在运行时将看到的类路径。

我已阅读开发者指南中的 implicit dependencies。 所以我得出结论,我的部署的类路径将包含 "Dependencies that are always added" 列中的元素以及在触发条件下添加的元素(在我的例子中,这些元素是 Weld、Web、Hibernate、Resteasy、EJB3)。

如何确定我必须导入哪些 Maven 工件,以便我的开发类路径等于我的 WebApp 的运行时类路径?

我想在开发时解决依赖冲突,而不是在运行时。

您可以使用 WildFly 16 Bill of Materials (BOM)。我相信您很清楚 Maven 的 类型 POM 工件的导入功能。以防万一,将这些行添加到 Maven pom.xml:

<dependencyManagement>
  <dependencies>
      <dependency>
        <groupId>org.wildfly.bom</groupId>
        <artifactId>wildfly-javaee8</artifactId>
        <version>16.0.0.Final</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

它使您能够引用 WildFly 的大部分工件(或至少相关工件)以及 Java EE 8 规范工件。这是一个例子:

<dependencies>
  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>org.jboss.spec.javax.servlet</groupId>
    <artifactId>jboss-servlet-api_4.0_spec</artifactId>
    <scope>provided</scope>
  </dependency>
</dependencies>
<!-- And so on... -->

你仍然需要列出你需要的所有依赖项。如果您有额外的依赖项(WildFly 未提供),您应该将它们打包到您的 WAREAR 中。这样你就不应该有任何冲突。

哦,还有一件事,因为您提到了几个特定于 WildFly 的依赖项(例如 Weld 和 Hibernate):尽可能坚持使用 Java EE API。如果需要,它使您能够更快地将应用程序移植到其他应用程序服务器。