2017-09-28 74 views
5

我正在测试Java 9的项目需要JPA(javax.persistence.*类)。当我添加module-info.java并声明我的模块时,javax.persistece包下的所有类都变为不可用。在Java 9中,我应该使用哪个模块来使用JPA?

我搜索了很多,但是我找不到需要在Java 9模块项目中使用JPA的模块。

UPDATE 作为艾伦的建议,我跑了

$ jar --describe-module --file=javax.persistence-api-2.2.jar 

No module descriptor found. Derived automatic module. 

[email protected] 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.xmljavax.persistence-api依赖。

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

+0

'require'应该使用自动模块的文件名:'javax.persistence-api-2.2',但看起来很奇怪。我会重命名该罐子? –

+2

@JoopEggen如果我没有错,自动模块命名将任何非字母数字字符转换为点('.')。所以在这种情况下,当前的模块名称最终将成为'javax.persistence.api'(当然,没有版本号,这些不在模块级别维护) – nullpointer

回答

4

随着,你可以使用一个依赖像

<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 /清单中定义.MF为:

Manifest-Version: 1.0 
Bundle-Description: Java(TM) Persistence 2.2 API jar 
Automatic-Module-Name: java.persistence 
... 

Note - 根据Alan的建议找出模块名称的方法是精确的,但没有广告,我仍然更喜欢使用某个包的类,然后让IntelliJ(2017.2.4)为我做这个决议,当我说'导入班',然后'添加要求'。 ;)

+0

谢谢,但我已在'pom.xml'中拥有该依赖关系。 –

+0

@GiovanniLovato您尝试使用的模块的名称不正确,但 – nullpointer

+0

已更正,但仍未找到“模块:java.persistence”。 –

1

我不认为JPA已作为一个模块还,但你应该能够使用它作为一个自动模块。您可以使用jar --file=<jarfile> --describe-module来查看为JPA JAR文件派生的模块名称。

+0

谢谢!我更新了我的问题。 –

+2

该jar工具报告其名称为“java.persistence”,而不是“javax.persistence”。 –

+0

已更正,但仍“未找到模块:java.persistence”。 –

相关问题