Java 分别部署WAR和EJBJAR文件

Java 分别部署WAR和EJBJAR文件,java,maven,jakarta-ee,glassfish,Java,Maven,Jakarta Ee,Glassfish,我有一个应用程序,正在GlassFish上部署。它有一个带有(JPA)实体和EJB的EJB层,用于访问和写入数据库,并有3个(独立的)web应用程序。一切都是用Maven构建的 ServerApplication | +-ServerApplication-ear +-ServerApplication-ejb | +-GrumpyCat (war) +-HummingBird (war) +-Koala (war) 所有三个war项目都依赖于ejb项目。编译/构

我有一个应用程序,正在
GlassFish
上部署。它有一个带有(JPA)实体和EJB的EJB层,用于访问和写入数据库,并有3个(独立的)web应用程序。一切都是用
Maven
构建的

ServerApplication 
  |
  +-ServerApplication-ear
  +-ServerApplication-ejb
  |
  +-GrumpyCat (war)
  +-HummingBird (war)
  +-Koala (war)
所有三个
war
项目都依赖于
ejb
项目。编译/构建ear时,它将
war
文件复制到
ear
项目,然后我可以在
GlassFish
上部署
ear
文件

这很好,所有4个模块(ejb和3 war)部署都没有问题,我可以访问3
war
项目,如:

myServer.com/GrumpyCat
myServer.com/HummingBird
myServer.com/Koala
我的问题是,我不能单独部署一个
war
项目。例如,当我在
koala
项目中更改某些内容时,我希望能够只构建koala.war并将其部署到服务器上,而不必上传和部署完整的
ear
文件

但在部署时,GlassFish会告诉我:

  • 已经在
    考拉
    上部署了一个项目(没错,它是与ear一起部署的)
  • 或者(当我更改构建版本时),它不“知道”EJB,我得到了大量
    ClassNotFound
    异常

有没有一种方法可以逐个部署应用程序的模块

如果您真的想单独部署它们,那么第二种方法是可行的。但是,您会看到一个
ClassNotFound
异常,因为WAR是单个项目,因此无法访问EAR的类路径

为了实现这一点,您必须将应用程序的公共API添加到WAR的类路径中。公共API至少包括您希望从WAR访问的EJB的EJB远程接口和API中使用的任何DTO

最简单的方法是创建一个单独的包(如
com.example.api
),让ant或Maven等构建工具将该api包与EJB和WAR捆绑在一起,或者创建一个
myapp api.jar
并将其包含在相应的类路径中


然后,您可以从EAR中删除WAR并将其作为单独的项目部署。

谢谢!听起来很有希望。不过,我必须仔细阅读远程接口,我希望我没有创建自己的瓶颈:)如果将它们部署到同一台服务器上,它仍然是本地的(在同一个JVM中),应该没有瓶颈,即使它被称为“远程”。