有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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依赖关系

测试报告:https://github.com/heruan/java9-jpa


共 (3) 个答案

  1. # 1 楼答案

    尝试使用此maven依赖项:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.5.2.Final</version>
    </dependency>
    
  2. # 2 楼答案

    我认为JPA还没有作为一个模块发布,但您应该能够将其作为一个自动模块使用。您可以使用jar file=<jarfile> describe-module查看JPA JAR文件的模块名

  3. # 3 楼答案

    使用,可以使用

    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>javax.persistence-api</artifactId>
        <version>2.2</version>
    </dependency>
    

    更新为使用jdk9detailed here.maven-compiler-plugin

    的依赖项类似

    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)在我说“导入类”和“添加要求”时帮我解决这个问题;)