首页 文章

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

提问于
浏览
6

我正在使用需要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 依赖项 .

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

2 回答

  • 7

    使用maven,您可以使用依赖项

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

    使用 maven-compiler-plugin 更新以使用jdk9 detailed here.

    与依赖gradle相似

    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
    ...
    

    Note - 根据Alan的建议找出模块名称的方法是准确的,但没有广告,我仍然更喜欢使用某个包的类,然后当我说'import class'然后让IntelliJ(2017.2.4)为我做那个解决方案'add requires' . ;)

  • 1

    我不认为JPA已作为模块发布,但您应该能够将其用作自动模块 . 您可以使用 jar --file=<jarfile> --describe-module 查看为JPA JAR文件派生的模块名称 .

相关问题