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

Java 多层应用程序中的Hibernate依赖项位置,java,hibernate,maven,jpa,multi-tier,Java,Hibernate,Maven,Jpa,Multi Tier,关于hibernate注释jar在我的maven项目中的位置,我有一个特定的问题 我的项目由三个模块组成。客户端和服务器模块都取决于共享的模块。Maven为部署构建了两个包:客户端+共享和服务器+共享 带注释的Hibernate实体位于共享模块中,因为我需要在客户端和服务器之间传递它们(通过RMI) 现在我的问题来了。jar用作共享模块的依赖项,以允许编译hibernate实体。库本身依赖于hibernate核心。因此,我在部署的客户机应用程序中有hibernate库,即使在那里我并不真正需要它

关于hibernate注释jar在我的maven项目中的位置,我有一个特定的问题

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

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

现在我的问题来了。jar用作共享模块的依赖项,以允许编译hibernate实体。库本身依赖于hibernate核心。因此,我在部署的客户机应用程序中有hibernate库,即使在那里我并不真正需要它们。罐子相当大,我想让客户尽可能苗条

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


谢谢。

我认为应该在pom中为依赖项使用scope标记

看看这个,然后选择合适的一个:

我认为,如果您只需要在编译时使用依赖项,那么应该使用范围“compile”等等


希望这对你有帮助

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


org.shared
共享
0.0.1-快照
org.hibernate
冬眠核心
...

是的,为客户机-服务器-通信创建DTO。您能更具体地说明这一点吗?据我所知,我的项目结构完全相同。带注释的DTO在客户端和服务器之间共享,因此在这两个模块中都需要hibernate库。谢谢您的回答。嗯,我认为,“compile”范围也将包括运行时的库,但我可能会使用“provided”。但是,如果没有库就无法识别注释,则不知道在运行时会发生什么。今天晚上我将测试它,并公布我的结果。谢谢你的回答。我认为这将部分起作用,但我仍然需要hibernate注释依赖项进行编译。只排除那些依赖项,它们是hibernate注释的依赖项,但在编译时不需要。在您的例子中,实体类只需要注释,而hibernate核心不需要注释。在大多数情况下,编译和运行时也需要依赖项的可传递依赖项。但您的示例是一个特例,因为客户端只使用hibernate库的一个独特部分。检查Maven的依赖关系图以查找更多不必要的依赖关系。