javax.persistence、javax.persistence-api和javaee-api的区别

Differentiation between javax.persistence, javax.persistence-api and javaee-api

我对javax.persistence、javax.persistence-api和javaee-api的区别和内容感到困惑。 javaee-api 可能包含更多内容,但我只对 JPA 内容感兴趣(如果存在于 javaee-api 中)。从抽象的角度来看,有 JPA 作为规范和 JPA 的一些实现,如 eclipselink。因此,如果配置中存在两种依赖关系,则很容易理解:一种依赖于规范内容,一种依赖于实现。但是好像这个有点复杂,所以我有以下问题:

我很乐意得到任何澄清。

API 依赖项用于 compile 您的项目。实现可以是 运行 时间 provided(例如 Java EE 应用程序服务器),也可以构建应用程序以包含该实现。如果您不熟悉 Maven 作用域,我建议您阅读 this.

  • 你说得对,javax.persistence-api 不包括实现。
  • that maven repo 是一个 eclipselink 实现。 artifactId 在 2.3 版本中从 "javax.persistence" 更改为 "eclipselink".
  • javaee-api includes also the JPA. Api version can be found for example here: "The Java EE 7 platform requires Java Persistence API 2.1." Wikipedia 还比较了 API 版本的网络配置文件,这可能会解决问题(网络配置文件是 Java EE 规范的子集)。
  • 我不知道JPA 2.1/2.2 版本之间的兼容性。我会一直使用相同的实现版本。

编辑:我想您可以在 JPA 2.2 运行 时间 运行 JPA 2.1 应用程序。但是,向后兼容性也应该意味着不存在 行为差异 。新版本有更多功能,这些功能可能默认启用。毕竟,Java EE 就是关于 "convention over configuration" 的。所以这也取决于你对 "backward compatibility".

的定义