169 votes

Gradle, "sourceCompatibility" vs "targetCompatibility" ?

Quelle est la relation/différence entre sourceCompatibility y targetCompatibility ? Que se passe-t-il lorsqu'ils sont réglés sur des valeurs différentes ?

Selon Documentation Gradle :

sourceCompatibility est "Compatibilité de la version de Java à utiliser lors de la compilation du source Java". targetCompatibility est "Version de Java pour laquelle générer des classes".

Je crois savoir que targetCompatibility générera un bytecode java compatible avec une version spécifique de Java, est-ce un sous-ensemble de la fonctionnalité de sourceCompatibility ?

106voto

Matt Points 4917

targetCompatibility y sourceCompatibility les cartes de -target release y -source release dans javac. La source est essentiellement le niveau du langage source et la cible est le niveau du bytecode qui est généré.

Plus de détails peuvent être trouvés dans le javac la section de compilation croisée .

85voto

user1644873 Points 801

Faites attention lorsque vous les utilisez ; nous avons été mordus par des personnes faisant des suppositions.

Ce n'est pas parce que vous utilisez une sourceCompability (ou targetCompatibility) de 1.5 que vous pouvez toujours compiler votre code avec le JDK 1.6 et vous attendre à ce qu'il fonctionne sous le JDK 1.5. Le problème est celui des bibliothèques disponibles.

Si votre code appelle une méthode qui n'est disponible que dans le JDK 1.6, il sera toujours compilé avec les diverses options de compatibilité de la VM cible. Mais lorsque vous l'exécuterez, il échouera car la méthode incriminée n'est pas présente (vous obtiendrez une MethodNotFoundException ou ClassNotFoundException).

Pour cette raison, je toujours comparer le paramètre de compatibilité à la version réelle de Java sous laquelle je construis. S'ils ne correspondent pas, la construction échoue.

41voto

A Jakhar Points 538

sourceCompatibilité \= spécifie que la version du langage de programmation Java doit être utilisée pour compiler les données. .java fichiers. par exemple sourceCompatibility 1.6 =spécifie que la version 1.6 du langage de programmation Java doit être utilisée pour la compilation .java des fichiers.

Par défaut, sourceCompatibility = "version de la JVM actuellement utilisée" et targetCompatibility = sourceCompatibility.

Compatibilité cible \= L'option garantit que les fichiers de classe générés seront compatibles avec les VM spécifiées 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 fonctionneront sur la cible spécifiée par targetCompatibility et sur les versions ultérieures, mais pas sur les versions antérieures de la VM.

0voto

haoyu wang Points 971

Par exemple, si vous définissez la compatibilité de la source à 1.7, vous ne pouvez pas utiliser l'expression lambda, qui est une nouvelle fonctionnalité de Java 8, même si votre version du jdk est 1.8.
Quant à "targetCompatibility", il signifie sur quelle version de jre le fichier de classe généré peut être exécuté, si vous le définissez à 1.8, il peut ne pas fonctionner avec succès sur jdk 1.7, mais il peut généralement fonctionner sur une version supérieure de jdk.

0voto

Benjamin Points 672

Ce sont les drapeaux de la commande javac.

javac [options] [sourcefiles]

Options:
...
-source release - Specifies the version of source code accepted.
...
-target release - Generates class files for a specific VM version.
...

En d'autres termes : vous écrivez un code dans un fichier source et compilez vos classes en fonction de la version target Version VM. Afin de l'exécuter, par exemple, sur un autre poste de travail avec une version plus ancienne de java.

Selon : https://docs.oracle.com/en/java/javase/11/tools/javac.html

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