Java 在两个或多个项目之间共享公共代码(如域类)的最佳方式是什么?
我们正在开发一个由两个Eclipse项目组成的Web应用程序。一个项目是基于HTTP的RESTfulWeb服务;另一个项目是一个网站。两者都将作为战争部署。最初,两者都将部署在同一个应用服务器实例下,但最终它们将位于不同的框中 网站应用程序使用RESTful WS应用程序。显然,这两个项目都有共同的代码——特别是域类。例如,可能存在位于/users的资源,该资源公开用户对象上的CRUD操作;要更新用户,网站应用程序将向/users发布一个XML封送的用户对象。访问/users/1将返回一个XML封送的用户对象 显然,由于各种原因,在两个项目中都有一个用户类是相当愚蠢的。所以我想知道最好的方法是什么?将公共代码放在两个项目之间共享的JAR中是我过去所做的事情,但是有更好或更简单的方法吗Java 在两个或多个项目之间共享公共代码(如域类)的最佳方式是什么?,java,eclipse,web-services,Java,Eclipse,Web Services,我们正在开发一个由两个Eclipse项目组成的Web应用程序。一个项目是基于HTTP的RESTfulWeb服务;另一个项目是一个网站。两者都将作为战争部署。最初,两者都将部署在同一个应用服务器实例下,但最终它们将位于不同的框中 网站应用程序使用RESTful WS应用程序。显然,这两个项目都有共同的代码——特别是域类。例如,可能存在位于/users的资源,该资源公开用户对象上的CRUD操作;要更新用户,网站应用程序将向/users发布一个XML封送的用户对象。访问/users/1将返回一个XML
编辑:删除RESTful引用。撇开语义不谈,在两个Eclipse项目之间共享公共代码的正确方法是什么?如果您在RESTful系统中的客户机和服务器之间共享域类,那么您就无法达到REST的目的。REST约束旨在通过确保两个系统之间的唯一耦合仅限于媒体类型和链接关系,允许客户机和服务器系统独立发展
如果您需要共享域对象,请忘记REST,这将给我带来更多的麻烦 Imho,这取决于您的构建系统,而不是您的IDE 所以,如果你
- 使用纯Eclipse进行构建,并希望保持简单,只需添加第三个项目并添加依赖项
- 使用osgi,您应该已经创建了一个新的osgi项目
- 使用构建工具,如maven或gradle,然后设置多项目构建
- 了解一个项目的诀窍所需阅读的代码更少
- 更好的依赖关系控制,因为您可以省略一些项目间依赖关系,所以不可能使用错误模块的类
- 复制代码很糟糕
- 用户api包含用户传输对象
- 用户服务提供CRUD操作
- webapp(或用户客户端)调用用户服务
您需要创建另一个项目(即共享)。我所有的服务器客户端应用程序我都喜欢
基本上,共享模块具有由客户端使用并由EJB模块实现的EJB接口。有几种可能的方法可以做到这一点,根据您的具体情况和需求,有些方法可能比其他方法更好 在所有情况下,我强烈推荐一个能够理解版本号的系统 实现这一点的经典方法是使用maven。此外,它在eclipse中集成得非常好,您可以将模块作为一个父项目的一部分进行构造,例如:
project-parent
project-website1
project-website2
project-controllers
project-model
[...]
在内部,这些模块可以相互依赖。您可以将接口与实现分离:
project-parent
project-website1
project-website2
project-api
project-api-impl
[...]
然后大部分时间取决于api模块。maven还有一些处理WAR文件的机制
这种(单个项目)方法可能是非常小的开发团队的理想选择。主要的缺点是单独发布是不现实的——实现中只影响website2的错误修复也需要发布website1
此外,在这种情况下,分离往往不那么清晰,这使得将不应该存在的东西移动到共享模块中可能太容易了
另一种模式是:
project1-parent
project1-webapp
project1-specifics
[...]
project2-parent
project2-webapp
project2-specifics
[...]
common-parent
common-api
common-impl
common-model
[...]
这使得分离更加清晰,您可以单独发布内容。此外(尽管在正常情况下可能不建议这样做),project1 webapp可能依赖于比project2 webapp更旧或更新版本的通用模块。maven可以在这里找到:
https://maven.apache.org/
另一个可能帮助您处理版本控制的工具集是:
https://gradle.org/
为了充分利用这些功能,您可能还需要研究将git与gitflow结合使用:
http://git-scm.com/
https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow/
并了解如何使用它来处理版本控制和发布
就我个人而言,刚开始的时候我觉得很困惑,但现在一切都很有意义。如何使用第三方罐子?将您的通用代码想象成第三方jar,并将相同的规则应用于您的项目。您可以使用像maven这样的依赖关系管理工具来保持版本控制的有序性 如果您想升级到应用程序