我有一个我在GlassFish
上部署的应用程序。它有一个带有(JPA)Entites和EJB的 EJB层来访问和写入数据库,它有3个(独立的)Web应用程序。所有内容都使用Maven
构建。
ServerApplication
|
+-ServerApplication-ear
+-ServerApplication-ejb
|
+-GrumpyCat (war)
+-HummingBird (war)
+-Koala (war)
所有三个war
项目都依赖于ejb
项目。在编译/构建耳朵时,它会将war
文件复制到ear
项目,然后我可以在ear
上部署GlassFish
文件。
这很好用,所有4个模块(ejb和3 war)都可以顺利部署,我可以访问3个war
项目,如:
myServer.com/GrumpyCat
myServer.com/HummingBird
myServer.com/Koala
我的问题是,我无法单独部署单个war
项目。例如,当我在koala
项目中更改某些内容时,我希望能够仅构建koala.war并将其部署在服务器上,而无需上载和部署完整的ear
文件。
但是在部署时,GlassFish告诉我:
Koala
部署了一个项目(原来,它与耳朵一起部署)ClassNotFound
例外。< / LI>
有没有办法逐个部署应用程序的模块?
答案 0 :(得分:1)
如果您真的想要单独部署它们,那么您的第二种方法就是前进的方法。但是,您看到ClassNotFound
例外,因为WAR是单个项目,因此无法访问EAR的类路径。
要实现这一目标,您必须将应用程序的公共API添加到WAR的类路径中。公共API至少包含您希望从WAR访问的EJB的EJB远程接口以及API中使用的任何DTO。
最简单的方法是创建一个单独的包(例如com.example.api
)并让一个构建工具(如ant或Maven)将api包与EJB和WAR捆绑在一起,或者创建一个{{1并将其包含在相应的类路径中。
然后,您可以从EAR中删除WAR并将它们部署为单独的项目。