我应该在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=
来查看为JPA JAR文件派生的模块名称。