我有一个带有一个EJB和几个Web模块的企业项目(EAR),这些Web模块有许多共同的类,它们对于每个项目都完全相同,所以如果我修改其中一个,我将不得不手动将代码复制到其他项目。我不想将它们放在我的EJB模块中,因为它们使用了大量前端相关资源。
有没有办法在Web项目之间共享这些类?
Obs:他们还使用EJB模块中的类和资源。
答案 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文件中的所有组件(包括应用程序客户端)可用。这些库可以引用与应用程序捆绑在一起的其他库,也可以使用此处描述的任何技术单独安装。