Quelle est la relation/différence entre sourceCompatibility
et targetCompatibility
? Que se passe-t-il quand ils sont réglés sur différentes valeurs?
Selon documentation Gradle :
sourceCompatibility
est "Compatibilité de version Java à utiliser lors de la compilation Java source."] targetCompatibility
est "Version Java pour laquelle générer des classes."
Si j'ai bien compris, targetCompatibility
générera Java compatible avec une version spécifique de Java. S'agit-il d'un sous-ensemble des fonctionnalités de sourceCompatibility
?
cela mappe vers javac - voir la section de compilation croisée - source est fondamentalement le niveau de langue source et cible est le niveau du bytecode généré.
Soyez prudent lorsque vous utilisez ces derniers; nous avons été mordus par des personnes faisant des hypothèses.
Ce n'est pas parce que vous utilisez sourceCompability (ou targetCompatibility) de 1.5 que vous pouvez toujours compiler votre code avec JDK 1.6 et que vous vous attendez à ce qu'il fonctionne sous JDK 1.5. Le problème concerne les bibliothèques disponibles.
Si votre code appelle une méthode disponible uniquement dans JDK 1.6, il sera toujours compilé avec les différentes options de compatibilité pour la machine virtuelle cible. Mais lorsque vous l'exécutez, il échouera car la méthode incriminée n'est pas présente (vous obtiendrez une exception MethodNotFoundException ou ClassNotFoundException).
Pour cette raison, je toujours compare le paramètre de compatibilité à la version actuelle Java que je construis sous. S'ils ne correspondent pas, la construction échoue.
sourceCompatibility = spécifie que la version du langage de programmation Java doit être utilisée pour compiler les fichiers . Java. p.ex. sourceCompatibility 1.6 = spécifie que la version 1.6 de le langage de programmation Java soit utilisé pour compiler des fichiers . Java.
Par défaut sourceCompatibility = "version de la JVM actuellement utilisée" et targetCompatibility = sourceCompatibility
targetCompatibility = L'option garantit que les fichiers de classe générés seront compatibles avec les ordinateurs virtuels spécifiés par targetCompatibility. Notez que dans la plupart des cas, la valeur de l'option -target est la valeur de l'option -source; dans ce cas, vous pouvez omettre l'option -target.
Les fichiers de classe seront exécutés sur la cible spécifiée par targetCompatibility et sur les versions ultérieures, mais pas sur les versions antérieures de la machine virtuelle