我应该在Java 9中使用哪个模块来使用JPA?

我正在使用一个需要JPA( javax.persistence.* classes)的项目来测试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]模块: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

使用maven ,您可以使用依赖项

  javax.persistence javax.persistence-api 2.2  

使用maven-compiler-plugin进行更新,以便在此处详细介绍 jdk9 。

与依赖gradle相似

 compile group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2' 

它基于javaee / jpa-spec 。 这将有利于

 requires java.persistence 

作为建议的自动模块, 这里是模块的名称。


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

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

注意 – 根据Alan的建议找出模块名称的方法是准确的,但是没有广告,我仍然更喜欢使用某个包的类,然后让IntelliJ(2017.2.4)在我说“导入类”时为我做那个解决方案’然后’添加要求’。 ;)

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