Java WildFly应用程序开发人员:如何在开发时反映运行时类路径?
我正在一个项目上工作,该项目作为.war WebApp部署在一个WildFly 16实例上 使用IntelliJ Idea UE和Maven作为开发环境,我问自己如何在开发时将部署的应用程序在运行时在开发类路径中看到的类路径反映出来 我已经在开发者指南中读到了。 因此,我得出结论,我的部署的类路径将包含“始终添加的依赖项”列中的元素以及在触发器条件下添加的元素(在我的示例中,这些元素是Weld、Web、Hibernate、Resteasy和EJB3) 我怎样才能知道我必须导入哪些Maven工件,以便我的开发类路径等于我的WebApp的运行时类路径 我希望在开发时解决依赖冲突,而不是在运行时 您可以使用。我相信您已经非常了解Maven针对POM类型工件的导入特性。如果您没有,请将这些行添加到MavenJava WildFly应用程序开发人员:如何在开发时反映运行时类路径?,java,maven,wildfly,java-ee-7,Java,Maven,Wildfly,Java Ee 7,我正在一个项目上工作,该项目作为.war WebApp部署在一个WildFly 16实例上 使用IntelliJ Idea UE和Maven作为开发环境,我问自己如何在开发时将部署的应用程序在运行时在开发类路径中看到的类路径反映出来 我已经在开发者指南中读到了。 因此,我得出结论,我的部署的类路径将包含“始终添加的依赖项”列中的元素以及在触发器条件下添加的元素(在我的示例中,这些元素是Weld、Web、Hibernate、Resteasy和EJB3) 我怎样才能知道我必须导入哪些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>
org.wildfly.bom
wildfly-javaee8
16.0.0.1决赛
聚甲醛
进口
它使您能够引用大多数WildFly的工件(或者至少是相关的工件)以及JavaEE8规范工件。下面是一个例子:
<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... -->
org.hibernate
休眠实体管理器
假如
org.jboss.spec.javax.servlet
jboss-servlet-api_4.0_规范
假如
不过,您仍然需要列出所需的所有依赖项。如果您有其他依赖项(WildFly未提供),则应将它们打包到WAR或EAR中。这样你就不会有任何冲突
哦,还有一件事,因为您提到了几个依赖项,它们是特定于WildFly的(例如Weld和Hibernate):尽可能地坚持使用JavaEEAPI。它使您能够在需要时更快地将应用程序移植到其他应用程序服务器。您可以使用。我相信您已经非常了解Maven针对POM类型工件的导入特性。如果您没有,请将这些行添加到Mavenpom.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>
org.wildfly.bom
wildfly-javaee8
16.0.0.1决赛
聚甲醛
进口
它使您能够引用大多数WildFly的工件(或者至少是相关的工件)以及JavaEE8规范工件。下面是一个例子:
<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... -->
org.hibernate
休眠实体管理器
假如
org.jboss.spec.javax.servlet
jboss-servlet-api_4.0_规范
假如
不过,您仍然需要列出所需的所有依赖项。如果您有其他依赖项(WildFly未提供),则应将它们打包到WAR或EAR中。这样你就不会有任何冲突
哦,还有一件事,因为您提到了几个依赖项,它们是特定于WildFly的(例如Weld和Hibernate):尽可能地坚持使用JavaEEAPI。如果需要,您可以更快地将应用程序移植到其他应用程序服务器。谢谢您的回答。例如,如果我查看BOM,就不会提到jboss-servlet-api_4.0_规范。我怎么知道提供了这个精确的人工制品?哦,我明白了,我会发现它被列在这里@Thomas,是的,没错,我完全忘记提到它了。很抱歉。综上所述,BOM也可以导入BOM。你需要深入研究那些BOM
pom.xml
文件来找到你需要的所有Maven坐标。好的,但是如果我更新WildFly版本,我将不得不再做一遍,对吗?正如我所见,解决类路径冲突没有简单的解决方案。@Thomas,不,你不必再做所有的事情。有些坐标保持不变,例如休眠、焊接等等,当然,除非它们被删除。JavaEE规范工件坐标将更改,因为规范版本反映在工件ID中。谢谢您的回答。例如,如果我查看BOM,就不会提到jboss-servlet-api_4.0_规范。我怎么知道提供了这个精确的人工制品?哦,我明白了,我会发现它被列在这里@Thomas,是的,没错,我完全忘记提到它了。很抱歉。综上所述,BOM也可以导入BOM。你需要深入研究那些BOMpom.xml
文件来找到你需要的所有Maven坐标。好的,但是如果我更新WildFly版本,我将不得不再做一遍,对吗?正如我所见,解决类路径冲突没有简单的解决方案。@Thomas,不,你不必再做所有的事情。有些坐标保持不变,例如休眠、焊接等等,当然,除非它们被删除。JavaEE规范工件坐标将改变,因为规范版本反映在工件ID中。