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

The*_*ear 20 java eclipse web-services

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

该网站应用程序使用RESTful WS应用程序.显然,会有代码 - 特别是域类 - 这两个项目都很常见.例如,可能有一个位于<app>/users的资源,它暴露了用户对象上的CRUD操作; 要更新用户,网站应用程序会将XML编组的用户对象POST到<app>/users.对<app>/users/1执行GET将返回XML编组的User对象.

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

编辑:删除RESTful引用.除了语义之外,在两个Eclipse项目之间共享公共代码的正确方法是什么?

Chr*_*fer 13

关注点分离

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

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

项目结构

确保您没有创建一个大的" 实用程序 "项目,而是创建特定于域的项目,如用户管理地址簿.

在你的情况下,它可能是

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

其他构建系统

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

最受欢迎的Java系统构建项目是Maven,AntGradle.每种方法都有自己的方式来定义模块依赖性.

Eclipse中的项目引用

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

项目参考菜单


Ste*_* K. 7

Imho,这取决于您的构建系统,而不是您的IDE.

所以,如果你

  • 使用纯Eclipse构建并希望保持简单,只需添加第三个项目并添加依赖项.
  • 使用osgi,你已经正确地创建了一个新的osgi项目.
  • 使用构建工具,如maven或gradle,然后设置多项目构建.


ata*_*man 5

通常,您创建包含共享代码的第三个项目(例如核心共享).只需从你的两个项目中依赖它.


Dar*_*ler 0

如果您在 RESTful 系统中的客户端和服务器之间共享域类,那么您就违背了 REST 的要点。REST 约束旨在通过确保两个系统之间的唯一耦合仅限于媒体类型和链接关系来允许客户端和服务器系统独立发展。

如果您需要共享域对象,请忘记 REST,它会给我带来更多的麻烦而不值得。

  • 这更多的是评论,而不是答案。另外——为什么忘记 REST?如果他想通过 REST Web 服务支持其他消费者,而他的 Web 应用程序只是另一个消费者,该怎么办?OP 没有声明他“需要”共享域对象。对我来说,与其在两个 WAR 项目中重复输入“完全相同”的域对象类 OP,不如将它们放在共享 JAR 中,这几乎是标准方法。 (7认同)