2 votes

UnsupportedClassVersionError de maven-pmd-plugin pour un projet java 11

Nous sommes en train de migrer nos projets java 8 vers java 11. JAVA_HOME pointe toujours vers java 8 mais le premier projet à migrer se compile en java 11 et les tests unitaires fonctionnent parfaitement.

Le plugin maven-compiler et la chaîne d'outils sont définis comme suit cette question . La version de Maven est 3.5.0.

Quand j'exécute

mvn verify

Je reçois l'erreur suivante :

Failed to execute goal org.apache.maven.plugins:maven-pmd-plugin:3.11.0:
pmd (pmd) on project <yourproject>: 
  Execution pmd of goal org.apache.maven.plugins:maven-pmd-plugin:3.11.0:
  pmd failed: An API incompatibility was encountered while executing 
  org.apache.maven.plugins:maven-pmd-plugin:3.11.0:pmd: 
    java.lang.UnsupportedClassVersionError: 
       <Yourclass> has been compiled by a more recent version of the Java Runtime 
       (class file version 55.0), this version of the Java Runtime only recognizes 
       class file versions up to 52.0    //(indentation added for readability)

Je comprends que les classes ont été compilées en utilisant java 11 (comme prévu) et que maven fonctionne sur java 8 parce que c'est ce vers quoi JAVA_HOME pointe. Mais pourquoi cela fait-il trébucher le pmd-plugin ? Il est censé vérifier le code source, sans tenir compte des classes compilées.

Existe-t-il un moyen de contourner ce problème, à moins de définir JAVA_HOME à 11 ?

1voto

Johnco Points 1389

En fait, PMD se soucie des classes compilées pour la résolution de type.

PMD est capable de vérifier les types de variables, les types de retours de méthodes, etc. pour les utiliser dans son analyse. Pour ce faire, PMD utilise les classes compilées et le classpath complet des dépendances.

Vous pouvez désactiver cette fonction par le biais de la configuration du plugin en la mise en place de la typeResolution à la propriété false pero Soyez avertis Plusieurs règles s'appuient sur ces informations et, lorsqu'elles ne sont pas disponibles, elles s'appuient sur une base de données. meilleur effort ce qui signifie que vous obtiendrez davantage de faux positifs/négatifs dans l'analyse.

La qualité de l'analyse de PMD est considérablement entravée par la non-utilisation de la résolution de type.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X