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
--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
Vous devez vous connecter pour publier un commentaire.
Juste pour effacer une certaine confusion ici. Les moyens de travail indiqué dans la question par vous-même sont des solutions de rechange et ne doivent pas être combinés, comme vous l'avez déjà vu.
Donc, la façon dont il devrait fonctionner:
Vous pouvez utiliser le compilateur args d'ajouter des modules
OU
Faire usage de la
javax.xml.ws.annotation
être un extensible module qui est quand vous pouvez faire usage de la dépendanceDans l'idéal, ce serait une option préférable de coller l'ancien est juste une autre utilisation de la @Deprecated module marquée
forRemoval
.Non, le
requires
est juste une partie de la déclaration. [Pensez à ce sujet, avant le JDK 9 si vous avez utilisé une déclarationimport some.foo.bar;
dans votre classe qui n'a pas été ajouté comme une bibliothèque(classpath) qui ont travaillé?]. Le module requis doit être sur le modulepath vous y avez accès.Mise à jour - La première option serait de ne pas être pris en charge à toute heure de plus avec l'utilisation de JDK/11 ou au-dessus de laquelle le JEP pour Supprimer la Java EE et CORBA Modules est ciblé.
required
clause par lui-même, il ne suffit pas pour obtenir l'accès à un module... est-ce vrai pour tous les JDK fourni par les modules (à l'exclusion desjava.base
), ou c'est seulement vrai pour le obsolète modules?Mise à jour de la réponse de fr.
La première option a fonctionné pour moi. (N'essayez pas deuxième option)
Le javax.annotation et d'autres JavaEE classes sont prévues pour le retrait en Java 11, par PEC-320, si la première option ne fonctionnera plus jamais les versions.
D'accord. Serait-mise à jour de la réponse en conséquence. 🙂
OriginalL'auteur Naman
De build gradle, ajoutant ce qui suit à construire.gradle travaux:
OriginalL'auteur Pratik Patil