我正在使用需要JPA( javax.persistence.*
类)的项目测试Java 9 . 当我添加 module-info.java
并声明我的模块时, javax.persistece
包下的所有类都变得不可用 .
我搜索了很多,但我找不到要求在Java 9模块项目中使用JPA的模块 .
UPDATE 正如艾伦建议的那样,我跑了
$ 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” .
UPDATE 2 这是我的项目结构:
.
├── pom.xml
└── src
├── main
│ ├── java
│ │ ├── my
│ │ │ └── module
│ │ │ └── MyBean.java
│ │ └── module-info.java
│ └── resources
└── test
├── java
└── resources
pom.xml
具有 javax.persistence-api
依赖项 .
2 回答
使用maven,您可以使用依赖项
使用
maven-compiler-plugin
更新以使用jdk9 detailed here.与依赖gradle相似
它基于javaee/jpa-spec . 这将有利于
作为一个自动模块,建议用作模块的名称here.
添加到详细信息,这在 META-INF/MANIFEST.MF 中定义为:
Note - 根据Alan的建议找出模块名称的方法是准确的,但没有广告,我仍然更喜欢使用某个包的类,然后当我说'import class'然后让IntelliJ(2017.2.4)为我做那个解决方案'add requires' . ;)
我不认为JPA已作为模块发布,但您应该能够将其用作自动模块 . 您可以使用
jar --file=<jarfile> --describe-module
查看为JPA JAR文件派生的模块名称 .