打包Java EE应用程序

时间:2015-07-23 19:46:14

标签: java java-ee glassfish ejb

我有一个带有一个EJB和几个Web模块的企业项目(EAR),这些Web模块有许多共同的类,它们对于每个项目都完全相同,所以如果我修改其中一个,我将不得不手动将代码复制到其他项目。我不想将它们放在我的EJB模块中,因为它们使用了大量前端相关资源。

有没有办法在Web项目之间共享这些类?

Obs:他们还使用EJB模块中的类和资源。

2 个答案:

答案 0 :(得分:1)

制作另一个包含所有公共类的模块,并将其打包为Jar。然后将jar作为依赖项添加到另一个项目中。

Maven应该是这个项目的好工具。

答案 1 :(得分:0)

没有办法让.war之外的共享类能够注入特定于Web的资源。

我会将公共类重构为一个单独的.jar。您可以将它们设为EJB,也可以只设置常规类。无论哪种方式,您都无法注入特定于Web的资源; .wars中的类必须传递方法参数之类的东西。对于EJB,您不能直接传递非可序列化的对象,如HttpServletRequests;我不知道这是否会造成重大障碍。

EJB .jar可以放在.ear中的任何位置,但如果您选择创建非EJB .jar,它可以放在.ear文件的lib目录中。如果您不编写无接口EJB,那么它也是EJB接口的好地方。从Java EE规范的“应用程序组装和部署”一章:

  

.ear文件可能包含一个目录,其中包含JAR文件中打包的库。 library-directory文件的部署描述符的.ear元素包含此目录的名称。如果未指定library-directory元素,或者.ear文件不包含部署描述符,则使用名为lib的目录。空library-directory元素可用于指定没有库目录。

     

此目录(但不是子目录)中具有.jar扩展名的所有文件必须对包含在EAR文件中的所有组件(包括应用程序客户端)可用。这些库可以引用与应用程序捆绑在一起的其他库,也可以使用此处描述的任何技术单独安装。