我正在使用需要JPA(javax.persistence.*
类)的项目测试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
依赖关系。
答案 0 :(得分:6)
使用maven,您可以使用像
这样的依赖项<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
maven-compiler-plugin
已更新,可与jdk9 detailed here.
compile group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
基于javaee/jpa-spec。这将有助于
requires java.persistence
作为建议用作模块here.
的名称的自动模块添加详细信息,这在 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)会为我做这个决议。然后添加要求&#39;。 ;)
答案 1 :(得分:1)
我不认为JPA已作为模块发布,但您应该能够将其用作自动模块。您可以使用jar --file=<jarfile> --describe-module
查看为JPA JAR文件派生的模块名称。
答案 2 :(得分:0)
尝试使用这个 maven 依赖:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.5.2.Final</version>
</dependency>