我正在测试Java 9的项目需要JPA(javax.persistence.*
类)。当我添加module-info.java
并声明我的模块时,javax.persistece
包下的所有类都变为不可用。在Java 9中,我应该使用哪个模块来使用JPA?
我搜索了很多,但是我找不到需要在Java 9模块项目中使用JPA的模块。
UPDATE 作为艾伦的建议,我跑了
$ jar --describe-module --file=javax.persistence-api-2.2.jar
No module descriptor found. Derived automatic module.
[email protected] 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
'require'应该使用自动模块的文件名:'javax.persistence-api-2.2',但看起来很奇怪。我会重命名该罐子? –
@JoopEggen如果我没有错,自动模块命名将任何非字母数字字符转换为点('.')。所以在这种情况下,当前的模块名称最终将成为'javax.persistence.api'(当然,没有版本号,这些不在模块级别维护) – nullpointer