我正在开发一个在单个 WildFly 16 实例上部署为 .war WebApp 的项目。
使用 IntelliJ Idea UE 和 Maven 作为开发环境,我问自己如何在开发时将已部署的应用程序在运行时看到的类路径反射(reflect)在开发类路径中。
我读过implicit dependencies在开发者指南中。 因此,我得出的结论是,我的部署的类路径将包含“始终添加的依赖项”列中的元素以及根据触发条件添加的元素(在我的例子中,这些元素是 Weld、Web、Hibernate、Resteasy、EJB3)。
如何确定必须导入哪些 Maven Artifact ,以便我的开发类路径等于 Web 应用程序的运行时类路径?
我想在开发时解决依赖冲突,而不是在运行时。
最佳答案
您可以使用WildFly 16 Bill of Materials (BOM)为了那个原因。我相信您非常了解Maven针对POM类型 Artifact 的导入功能。以防万一,请将这些行添加到您的 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 的大部分 Artifact (或至少是相关的 Artifact )以及 Java EE 8 规范 Artifact 。这是一个例子:
<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 未提供),您应该将它们打包到您的 WAR 或 EAR 中。这样您就不会遇到任何冲突。
哦,还有一件事,因为您提到了几个特定于 WildFly 的依赖项(例如 Weld 和 Hibernate):尽可能尝试坚持使用 Java EE API。如果需要,它使您能够更快地将应用程序移植到其他应用程序服务器。
关于java - WildFly 应用程序开发 : how to reflect the runtime classpath at development time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56432266/