我应该在 Java 9 中要求哪个模块才能使用 JPA?
Which module should I require in Java 9 to use JPA?
我正在用一个需要 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.xml
具有 javax.persistence-api
依赖关系。
我认为 JPA 尚未作为模块发布,但您应该能够将其作为自动模块使用。您可以使用 jar --file=<jarfile> --describe-module
来查看为 JPA JAR 文件派生的模块名称吗?
使用 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
...
注意- Alan 所建议的模块名称的计算方法是精确的,但没有广告,我仍然更喜欢使用一些包的 class 然后当我说 'import class' 然后 'add requires' 时让 IntelliJ(2017.2.4) 为我做那个决议。 ;)
尝试使用这个maven依赖:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.5.2.Final</version>
</dependency>
我正在用一个需要 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.xml
具有 javax.persistence-api
依赖关系。
我认为 JPA 尚未作为模块发布,但您应该能够将其作为自动模块使用。您可以使用 jar --file=<jarfile> --describe-module
来查看为 JPA JAR 文件派生的模块名称吗?
使用 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
...
注意- Alan 所建议的模块名称的计算方法是精确的,但没有广告,我仍然更喜欢使用一些包的 class 然后当我说 'import class' 然后 'add requires' 时让 IntelliJ(2017.2.4) 为我做那个决议。 ;)
尝试使用这个maven依赖:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.5.2.Final</version>
</dependency>