2017-09-28 1 views
5

Je suis en train de tester Java 9 avec un projet nécessitant JPA (classes javax.persistence.*). Lorsque j'ajoute le module-info.java et déclare mon module, toutes les classes sous le package javax.persistece deviennent indisponibles.De quel module devrais-je avoir besoin dans Java 9 pour utiliser JPA?

J'ai beaucoup cherché, mais je n'ai pas trouvé le module qui nécessite l'utilisation de JPA dans un projet de module Java 9.

MISE À JOUR Comme Alan a suggéré, je courais

$ 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 

Mais toujours avec cette module-info.java

module my.module { 

    requires java.persistence; 

} 

je reçois « module-info.java:[3,18] Module introuvable : java.persistence ".

MISE À JOUR 2 Ceci est ma structure du projet:

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

Le pom.xml a la dépendance javax.persistence-api.

repo Test: https://github.com/heruan/java9-jpa

+0

'requires' devrait utiliser le nom de fichier pour les modules automatiques:' javax.persistence-api-2.2' mais cela semble bizarre. Je renommerais le pot? –

+2

@JoopEggen Le nommage automatique du module si je ne me trompe pas convertit tout caractère non-alphanumérique en un point ('.'). Donc le nom du module courant finirait par être 'javax.persistence.api' dans ce cas (bien sûr sans numéro de version qui ne soit pas maintenu au niveau du module) – nullpointer

Répondre

4

Avec , vous pouvez utiliser une dépendance comme

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

avec maven-compiler-plugin mis à jour pour fonctionner avec jdk9 detailed here.

similaires avec dépendance avec

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

qui est basé sur le javaee/jpa-spec. Cela faciliterait la

requires java.persistence 

en tant que module automatique proposé d'être le nom prévu pour le module here.


Ajout aux détails, cela est défini dans le META-INF/MANIFESTE .mf comme:

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

Note - La façon de comprendre le nom du module tel que suggéré par Alan est précise, mais aucune publicité et je préfère encore utiliser une classe d'un paquet et laisser IntelliJ (2017.2.4) faire cette résolution pour moi quand je dites 'import class' puis 'add requires'. ;)

+0

Merci, mais j'ai déjà cette dépendance dans mon 'pom.xml'. –

+0

@GiovanniLovato le nom du module que vous avez essayé est incorrect bien – nullpointer

+0

Corrigé, mais toujours "module introuvable: java.persistence". –

1

Je ne pense pas que JPA a été publiée en tant que module encore, mais vous devriez pouvoir l'utiliser comme un module automatique. Pouvez-vous utiliser jar --file=<jarfile> --describe-module pour voir quel nom de module est dérivé pour le fichier JPA JPA.

+0

Merci! J'ai mis à jour ma question. –

+2

L'outil jar indique son nom en tant que "java.persistence", pas "javax.persistence". –

+0

Corrigé, mais toujours "module introuvable: java.persistence". –