关于Hibernate网站上几个地方提到的以下声明,已经有很多疑问
从3.5.x版本开始,Hibernate注解和Hibernate EntityManager都是Hibernate Core的一部分...
因此,我想澄清这句话的含义。之前,Hibernate Core、Hibernate Annotations和Hibernate EntityManager都是独立的项目,这意味着
- 它们存在于不同的Subversion项目中
- 它们有自己的发布周期(因此有自己的版本号)
- 它们有自己的Jira项目
- 它们有不同的主题专家
最初,这种分割(从Hibernate 3.0时代开始)是必要的,因为当时Hibernate在一个大的源代码树中,需要保持JDK 1.4兼容性。然而,随着Hibernate(Core)构建的模块化,现在可以将Annotations和EntityManager重新拉回到同一个源项目中,因为每个模块都可以使用不同的源和目标JDK级别进行构建。我认为,从用户角度来看,最大的好处是使制作“兼容性矩阵”变得完全过时。
但这并不意味着注解和EntityManager是hibernate-core JAR文件的一部分,就发布到的Maven仓库的Maven工件而言。Hibernate仍然是模块化的。这样做的主要原因是为了隔离每个模块的依赖关系。这使得通过基于Maven仓库的依赖方案(Maven、Ivy、Gradle等)消费Hibernate的用户可以轻松管理传递依赖树。
然而,在分发捆绑包(上传到SourceForge文件发布系统的存档)中,所有类都合并到一个单独的JAR文件中。但这是因为所有模块(缓存等)都是这样做的。
希望这能澄清。