Comment obtenir l'accès à javax.annotation.De la ressource au moment de l'exécution de Java 9

J'ai un test:

public class ResourceTest {
    @Test
    public void test() throws ClassNotFoundException {
        Class.forName("javax.annotation.Resource");
    }
}

Il tente d'accéder à javax.annotation.Resource. Dans java 8, il a travaillé, mais en java 9 (je suis en utilisant Oracle JDK 9) il ne parvient pas à ClassNotFoundException.
Comme expliqué ici Printemps: @Resource injection cessé de travailler sous JDK9 , javax.annotation.Resource à partir du JDK n'est pas disponible par défaut en Java 9.

Je vais essayer d'obtenir l'accès à l'aide du module descripteur:

module test {
    requires java.xml.ws.annotation;
    requires junit;
}

Ici, j'ai expressément demander l'accès à java.xml.ws.annotation module (qui contient javax.annotation.Resource). Mais le test échoue toujours.

Lorsque je supprime que requires clause et ajouter une dépendance (comme une bibliothèque) qui contient javax.annotations.Resource, il travaille:

    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.3.1</version>
    </dependency>

Quand je les ajouter à la fois (Maven de la dépendance dans pom.xml et requires java.xml.ws.annotation), la compilation dans l'IDÉE échoue avec le message suivant:

the unnamed module reads package javax.annotation from both java.xml.ws.annotation and java.annotation

Mais Maven build réussit encore!

Si j'ajoute java.xml.ws.annotation module via la ligne de commande, il fonctionne (pas de Maven dépendance et avec requires clause):

mvn clean test -DargLine="--add-modules java.xml.ws.annotation"

Dois-je faire quelque chose de mal avec mon module de description? Comment puis-je obtenir de l'accès à l'JDK fourni par javax.annotation.Resource sans commutateurs de ligne de commande?

Le projet de test est disponible à https://github.com/rpuch/test-resource-jdk9

Ce qui se passe lorsque vous ajoutez juste le --add-modules argline et puis requires <modulename>?
L'épreuve est exécutée avec succès dans un tel cas, la classe est réussi).
La java.xml.ws.module annotation est déconseillé pour l'enlèvement. Vous devriez regarder juste en fonction de la version autonome, sens requires java.annotation et la dépendance Maven sur javax.annotation/javax.annotation-api/1.3.1 comme vous l'avez fait. Ceci élimine le --add-modules de l'utilisation trop.
Merci les gars!
Double Possible de Comment exprimer la dépendance maven sur java ee pour le passage à Java 9?

OriginalL'auteur Roman Puchkovskiy | 2017-09-30