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。因此,如果配置中存在两种依赖关系,则很容易理解:一种依赖于规范内容,一种依赖于实现。但是好像这个有点复杂,所以我有以下问题:
我假设 "javax.persistence-api" 包含接口之类的东西,因此 javax.persistence-api 包含 JPA 的程序化内容声明,但没有实现规范。因此,如果我在 2.2 版中将 javax.persistence-api 设置为依赖项(maven 或 gradle),我定义必须使用 JPA 2.2(必须由实现支持)并且如果我设置 javax.persistence-api 在版本 2.1 作为依赖我定义 JPA 2.1 必须是 used/supported。对吗?
"javax.persistence"依赖的purpose/content是什么(例如2.2.1版本的this mvn repo可以下载)?
javaee-api in version 7.0 是否已经包含 javax.persistence-api,如果包含,是哪个版本? 2.1?我如何或在哪里可以找到此信息?
如果我使用最新的可能实现,例如 EclipseLink 2.7.4(2019 年第一季度),它声明它支持 JPA 2.2,是否向后兼容 2.1 等旧 JPA 版本?
我很乐意得到任何澄清。
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".
的定义
我对javax.persistence、javax.persistence-api和javaee-api的区别和内容感到困惑。 javaee-api 可能包含更多内容,但我只对 JPA 内容感兴趣(如果存在于 javaee-api 中)。从抽象的角度来看,有 JPA 作为规范和 JPA 的一些实现,如 eclipselink。因此,如果配置中存在两种依赖关系,则很容易理解:一种依赖于规范内容,一种依赖于实现。但是好像这个有点复杂,所以我有以下问题:
我假设 "javax.persistence-api" 包含接口之类的东西,因此 javax.persistence-api 包含 JPA 的程序化内容声明,但没有实现规范。因此,如果我在 2.2 版中将 javax.persistence-api 设置为依赖项(maven 或 gradle),我定义必须使用 JPA 2.2(必须由实现支持)并且如果我设置 javax.persistence-api 在版本 2.1 作为依赖我定义 JPA 2.1 必须是 used/supported。对吗?
"javax.persistence"依赖的purpose/content是什么(例如2.2.1版本的this mvn repo可以下载)?
javaee-api in version 7.0 是否已经包含 javax.persistence-api,如果包含,是哪个版本? 2.1?我如何或在哪里可以找到此信息?
如果我使用最新的可能实现,例如 EclipseLink 2.7.4(2019 年第一季度),它声明它支持 JPA 2.2,是否向后兼容 2.1 等旧 JPA 版本?
我很乐意得到任何澄清。
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".
的定义