在两个或多个项目之间共享公共代码(如域类)的最佳方法是什么?

2022-09-02 03:51:02

我们正在开发一个由两个 Eclipse 项目组成的 Web 应用程序。一个项目是基于HTTP的RESTful Web服务;另一个项目是一个网站。两者都将部署为 WAR。最初,两者都将部署在同一应用程序服务器实例下,但最终它们将部署在单独的框中。

网站应用程序使用 RESTful WS 应用程序。显然,将有代码 (特别是域类) 是两个项目共有的。例如,可能有一个资源位于<app>/users,它公开了对User对象的CRUD操作;若要更新用户,网站应用程序会将 XML 封送的 User 对象 POST 到<应用程序>/用户。执行 GET to <app>/users/1 将返回 XML 封送的 User 对象。

显然,由于各种原因,在两个项目中都有一个User类将是非常愚蠢的。所以我想知道最好的方法是什么?将通用代码放在两个项目之间共享的JAR中是我过去所做的,但是有没有更好或更简单的方法?

编辑:删除了 RESTful 引用。撇开语义不谈,在两个 Eclipse 项目之间共享通用代码的正确方法是什么?


答案 1

关注点分离

实际上,创建第三个项目并添加项目依赖项是最好的方法,因为关注点分离不仅是类的原则,也是软件模块的原则。它创造了一些优势:

  • 阅读的代码更少,可以学习一个项目的绳索。
  • 更好的依赖关系控制,因为您可以省略一些项目间依赖关系,因此不可能使用错误模块的类。
  • 复制代码很糟糕。

项目结构

确保您创建的不是一个大型的“实用程序”项目,而是特定于域的项目,例如用户管理地址簿

在您的情况下,它可能是

  • 用户 api 包含用户传输对象
  • 用户服务提供 CRUD 操作
  • webapp(或用户客户端)调用用户服务。

其他构建系统

在转向持续集成时,您需要使用比 Eclipse 更好的构建系统,但原理是相同的。您将创建具有最小依赖项的小模块。

最流行的Java项目构建系统是MavenAntGradle。每种方法都有自己的方法来定义模块依赖关系。

Eclipse 中的项目引用

要告诉 Eclipse 有关项目依赖关系的信息,请右键单击该项目,打开属性并切换到项目引用。在这里,您可以标记依赖项,以便代码更改将立即生效,而无需手动复制JAR文件。

Project references menu


答案 2

恕我直言,这取决于您的构建系统,而不是您的IDE。

因此,如果您

  • 使用普通的Eclipse来构建并希望保持简单,只需添加第三个项目并添加依赖项即可。
  • 使用osgi,你已经创建了一个新的osgi项目。
  • 使用构建工具(如 maven 或 gradle),然后设置多项目构建。

推荐