多层应用程序中的 Hibernate 依赖项位置

Hibernate dependencies location in a multi tier application

我有一个关于 hibernate-annotations jar 在我的 maven 项目中的位置的具体问题。

我的项目由三个模块组成。客户端和服务器模块都依赖于共享模块。 Maven 构建了两个部署包:Client + Shared 和 Server + Shared。

带注释的 Hibernate 实体位于共享模块中,因为我需要在客户端和服务器之间(通过 RMI)传递它们。

现在我的问题来了。 hibernate-annotations.jar 用作 Shared 模块的依赖项以允许编译 Hibernate 实体。该库本身依赖于 hibernate-core。结果,我在已部署的客户端应用程序中拥有休眠库,即使我在那里并不真正需要它们。罐子很大,我想让客户尽可能苗条。

是否有一些既定的技术可以避免这个问题?我想到的一个是使用基于 XML 的 Hibernate 配置,这样我就可以将 Hibernate 依赖项移动到服务器模块,但我想坚持使用注释。

谢谢。

我认为您应该在 pom 中为依赖项使用范围标记。

看看这个,选择合适的:http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

根据我的说法,如果你只需要在编译时依赖,你应该使用作用域"compile"等等

希望对您有所帮助!

您可以在您的客户端的 pom.xml 中排除共享依赖项的一个或多个传递依赖项。这里的示例假设共享项目具有组 ID "org.shared"、工件 ID "shared" 和版本“0.0.1-SNAPSHOT”:

<dependency>
  <groupId>org.shared</groupId>
  <artifactId>shared</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <exclusions>
    <exclusion>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
    </exclusion>
    ...
  </exclusions>
</dependency>