在Java9中使用JPA需要哪个模块?
我正在用一个需要JPA(javax.persistence.*
类)的项目测试Java9。当我添加module-info.java
并声明我的模块时,javax.persistece
包下的所有类都不可用
我搜索了很多,但没有找到在Java9模块项目中使用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
依赖关系
# 1 楼答案
尝试使用此maven依赖项:
# 2 楼答案
我认为JPA还没有作为一个模块发布,但您应该能够将其作为一个自动模块使用。您可以使用
jar file=<jarfile> describe-module
查看JPA JAR文件的模块名# 3 楼答案
使用maven,可以使用
更新为使用jdk9detailed here.的
maven-compiler-plugin
与gradle的依赖项类似
这是基于javaee/jpa-spec的。这将有助于
作为一个自动模块,建议使用模块here.的名称
除了细节之外,这在META-INF/MANIFEST中定义。MF作为:
注意-Alan建议的计算模块名称的方法是精确的,但没有广告,我仍然喜欢使用某个包的类,然后让IntelliJ(2017.2.4)在我说“导入类”和“添加要求”时帮我解决这个问题;)