我应该在 Java 9 中要求哪个模块才能使用 JPA?

Which module should I require in Java 9 to use JPA?

我正在用一个需要 JPA (javax.persistence.* 类) 的项目测试 Java 9。当我添加 module-info.java 并声明我的模块时,javax.persistece 包下的所有 类 都变得不可用。

我搜索了很多,但在 Java 9 模块项目中找不到需要使用 JPA 的模块。

更新 正如艾伦建议的那样,我 运行

$ jar --describe-module --file=javax.persistence-api-2.2.jar

No module descriptor found. Derived automatic module.

java.persistence@2.2 automatic
requires java.base mandated
contains javax.persistence
contains javax.persistence.criteria
contains javax.persistence.metamodel
contains javax.persistence.spi

但还是用这个module-info.java

module my.module {

    requires java.persistence;

}

我得到 "module-info.java:[3,18] module not found: java.persistence"。

更新 2 这是我的项目结构:

.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   ├── my
    │   │   │   └── module
    │   │   │       └── MyBean.java
    │   │   └── module-info.java
    │   └── resources
    └── test
        ├── java
        └── resources

pom.xml 具有 javax.persistence-api 依赖关系。

测试回购:https://github.com/heruan/java9-jpa

我认为 JPA 尚未作为模块发布,但您应该能够将其作为自动模块使用。您可以使用 jar --file=<jarfile> --describe-module 来查看为 JPA JAR 文件派生的模块名称吗?

使用 ,您可以使用像

这样的依赖项
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>javax.persistence-api</artifactId>
    <version>2.2</version>
</dependency>

更新为 maven-compiler-plugin 以与 jdk9 一起使用 detailed here.

的依赖类似
compile group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'

这是基于 javaee/jpa-spec。这将有助于

requires java.persistence 

作为一个自动模块,建议作为模块的名称 here.


添加到细节中,这在 META-INF/MANIFEST.MF 中定义为:

Manifest-Version: 1.0
Bundle-Description: Java(TM) Persistence 2.2 API jar
Automatic-Module-Name: java.persistence
...

注意- Alan 所建议的模块名称的计算方法是精确的,但没有广告,我仍然更喜欢使用一些包的 class 然后当我说 'import class' 然后 'add requires' 时让 IntelliJ(2017.2.4) 为我做那个决议。 ;)

尝试使用这个maven依赖:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.5.2.Final</version>
</dependency>