我对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(实现必须支持),并且如果我在2.1版中将javax.persistence-api设置为依赖关系,我定义必须使用/支持JPA 2.1。是吗?
“ javax.persistence”依赖项的目的/内容是什么(例如,可在版本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版本是否有向后兼容性?
我很高兴得到澄清。
答案 0 :(得分:0)
API依赖性用于compile
您的项目。可以通过运行时(例如Java EE应用程序服务器)provided
来实现,也可以构建包含该实现的应用程序。如果您不熟悉Maven范围,建议您阅读this。
javax.persistence-api
不包含实现。编辑:我想您可以在JPA 2.2运行时中运行JPA 2.1应用程序。但是,向后兼容还应该意味着没有 行为上的差异 。新版本具有更多功能,这些功能可能默认情况下处于启用状态。毕竟,Java EE都是关于“约定之上的配置”的。因此,这还取决于您对“向后兼容性”的定义。