2017-09-28 1 views
5

JPA(javax.persistence.*クラス)を必要とするプロジェクトでJava 9をテストしています。 module-info.javaを追加して私のモジュールを宣言すると、javax.persisteceパッケージのすべてのクラスが利用できなくなります。JPAを使用するためにJava 9で必要なモジュールはどれですか?

私は多くを検索しましたが、Java 9モジュールプロジェクトでJPAを使用する必要があるモジュールが見つかりませんでした。

UPDATE アランが示唆したように、私は私がmodule-info.java:[3,18]モジュールが見つかりません」を取得このmodule-info.java

module my.module { 

    requires java.persistence; 

} 

$ 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 

しかし、まだ走りました:java.persistence "

UPDATE 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

'requires'は' javax.persistence-api-2.2'自動モジュールのファイル名を使うべきですが、それは奇妙に見えます。私は瓶の名前を変更しますか? –

+2

@JoopEggen私が間違っていなければ、自動モジュール命名法は、英数字以外の文字をドット( '.')に変換します。したがって、現在のモジュール名は 'javax.persistence.api'になります(バージョン番号がなくモジュールレベルで維持されていません) – nullpointer

答えて

4

jdk9 detailed here.

の外に基づいています
compile group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2' 

との依存関係と同様の

で動作するように更新され、あなたはmaven-compiler-plugin

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

のような依存関係を使用することができますjavaee/jpa-spec。モジュールの詳細に追加here.


を意図名前であることが提案、これはMANIFEST META-INF /に定義されているように、これは自動的にモジュールとして

requires java.persistence 

を容易に.MFとして:

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

- Alanによって提案されたようにモジュール名を特定する方法は正確ですが、広告はなく、私はいくつかのパッケージのクラスを使用して、IntelliJ(2017.2.4) 'import class'と入力し、 'require requires'を追加します。 ;)

+0

ありがとうございますが、私はすでに 'pom.xml'にその依存関係があります。 –

+0

@ GiovanniLovato – nullpointer

+0

修正されましたが、まだ "モジュールが見つかりませんでした:java.persistence"でも、試したモジュールの名前が正しくありません。 –

1

私はJPAはまだモジュールとして公開されているとは思わないが、あなたは自動的にモジュールとしてそれを使用することができるはずです。 jar --file=<jarfile> --describe-moduleを使用して、JPA JARファイル用に派生​​したモジュール名を確認できますか。

+0

ありがとうございました!私は私の質問を更新しました。 –

+2

jarツールは、その名前を「javax.persistence」ではなく「java.persistence」としてレポートします。 –

+0

訂正されましたが、まだ "モジュールが見つかりませんでした:java.persistence"。 –

関連する問題