Version Java requirejse de Maven Dependency?

J’ai développé et construit mon application Java avec Maven. Je dois prendre en charge Java 1.6. J’utilise donc les propriétés suivantes:

1.6 1.6 

Néanmoins, lorsque j’exécute l’application, une erreur «Une version majeure.minor non prise en charge» est détectée et je soupçonne qu’un de mes fichiers de dépendance est compilé avec une version Java plus récente que celle que je dois gérer.

Mes questions:

  1. Est-ce seulement possible? Je pensais que Maven prendrait soin de ce type de problèmes de version de dépendance.

  2. Existe-t-il un moyen simple de connaître la version mineure / majeure de toutes mes dépendances? (Ce serait génial si cela pouvait être montré en faisant mvn dependency:tree par exemple.)

Le problème est que chaque dépendance (responsable) peut décider de sa propre version de la version Java utilisée pour comstackr (1.5, 1.6, 1.7, 1.8, etc.), ce qui empêche sa résolution via Maven. Mais vous pouvez vous assurer que vous n’utilisez pas de dépendances utilisant une version de Java différente de celle que vous aimez.

Ceci peut être appliqué à l’aide du plug- in Maven Enforcer à l’aide de règles extra -forcer :

  [...]    org.apache.maven.plugins maven-enforcer-plugin 1.4.1    enforce-bytecode-version  enforce     1.6  org.mindrot:jbcrypt    true      org.codehaus.mojo extra-enforcer-rules 1.0-beta-5      [...]  

Cela cassera votre construction si vous avez une dépendance qui est compilée avec une version de JDK différente de celle que vous voulez avoir.

Pour répondre à vos deux questions:

Oui, c’est possible En regardant les docs , les et simplement à Maven la version de javac à utiliser pour comstackr votre projet. Et je cite, pour votre référence:

Remarque: Le simple fait de définir l’option target ne garantit pas que votre code s’exécute réellement sur un environnement d’exécution Java avec la version spécifiée. Le piège est l’utilisation non intentionnelle d’API qui n’existent que dans des JRE ultérieurs, ce qui provoquerait l’échec de votre code au moment de l’exécution avec une erreur de liaison. Pour éviter ce problème, vous pouvez configurer le chemin d’access aux classes d’initialisation du compilateur afin qu’il corresponde à l’environnement JRE cible ou utiliser le plug-in Animal Sniffer Maven pour vérifier que votre code n’utilise pas d’API non souhaitées.

Le nombre magique après l’erreur de Unsupported major.minor version fait à la version du JRE avec laquelle le fichier de classe est compatible:

 J2SE 8 = 52, J2SE 7 = 51, J2SE 6.0 = 50, J2SE 5.0 = 49, JDK 1.4 = 48, JDK 1.3 = 47, JDK 1.2 = 46, JDK 1.1 = 45 

Je ne sais pas s’il existe un moyen facile de dire la version majeure / mineure de TOUTES les dépendances (et dépendances transitives) d’un projet.

MISE À JOUR: Bien que je ne l’ait jamais utilisé auparavant, je me demande si le plugin Animal Sniffer Maven aidera à détecter la version majeure / mineure de vos dépendances.