javax.persistence的maven依赖。*:hibernate-jpa-2.1-api或javaee-api?

时间:2017-07-13 14:36:13

标签: java hibernate maven java-ee

故事是关于maven项目的依赖关系。我有:

  • 我的项目取决于 hibernate-core:5.2.10.Final 工件,这取决于 的 冬眠-JPA-2.1-API:1.0.0.Final
  • 我的项目取决于 javaee-api:7.0
  • hibernate-jpa-2.1-api:1.0.0.Final 包含javax.persistence。* classes
  • 相同的javax.persistence。*类包含在 javaee-api:7.0

我应该在我的项目中使用哪种依赖项?如果我在最终构建中留下两个依赖项,那么我将得到类冲突。 应用程序可以部署到任何JavaEE容器,如Glassfish,Wildfly,JBOSS等。

请注意, hibernate-jpa-2.1-api 不是任何JavaEE服务器的特定API,也不是实现。它只是 hibernate-core 工件的API编译范围依赖项。并且我不会手动包含此依赖项,如果我选择Hibernate作为JPA实现,那么 hibernate-jpa-2.1-api 将默认包含在构建中。 / p>

1 个答案:

答案 0 :(得分:0)

似乎我想通了。

我学到了大多数来源(例如http://www.adam-bien.com/roller/abien/entry/the_only_one_dependency_you),说明javaee-api依赖项只能在提供的范围内使用。这是因为服务器实现了这些API,并且实现可能会有所不同。你永远不应该把 javaee-api.jar 置于战争或耳中。

此外,wildfly服务器包含标准模块集: hibernate-jpa-2.1-api-1.0.0.Final.jar 。这意味着在这个部分javaee容器中 javax.persistence。* 类由此库提供而不是 javaee-api.jar