9

我正在使用需要 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] module not found:java.persistence”。

更新 2 这是我的项目结构:

.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   ├── my
    │   │   │   └── module
    │   │   │       └── MyBean.java
    │   │   └── module-info.java
    │   └── resources
    └── test
        ├── java
        └── resources

有依赖关系pom.xmljavax.persistence-api

测试仓库:https ://github.com/heruan/java9-jpa

4

3 回答 3

7

使用,您可以使用类似的依赖项

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

更新后可与maven-compiler-pluginjdk9 一起使用,此处详述。

compile group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'

它基于javaee/jpa-spec。这将有利于

requires java.persistence 

作为一个自动模块,建议在此处用作该模块的名称


添加到详细信息,这在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) 为我做那个解决方案' 然后'添加要求'。;)

于 2017-09-28T15:03:15.020 回答
2

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

于 2017-09-28T14:48:03.753 回答
0

尝试使用这个 Maven 依赖项:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.5.2.Final</version>
</dependency>
于 2021-06-15T20:06:30.773 回答