我应该在Java 9中使用哪个模块来使用JPA?

时间:2017-09-28 14:41:01

标签: java jpa java-9 module-info

我正在使用需要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依赖关系。

测试回购:https://github.com/heruan/java9-jpa

3 个答案:

答案 0 :(得分:6)

使用,您可以使用像

这样的依赖项
<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>