Ceci est surtout utile pour produire un fichier jar fonctionnant avec une ancienne version de Java. Je crois que jusqu'ici tous les JDK sont capables d'exécuter des versions plus anciennes, il n'y a donc pas de raison réelle d'avoir une cible plus grande que la source.
Il est toutefois judicieux de régler target
par exemple. 1.6 lors de l'utilisation d'un 1.7 JDK.
Je ne suis pas sûr, mais je crois que cela pourrait fonctionner dans certaines situations pour compiler un code 1.7 java en utilisant un compilateur 1,7 à un pot de 1,6, pour exemples d'expressions telles que
ArrayList<Integer> foo = new ArrayList<>();
qui ne sont valables dans la version source 1.7+ devrait compiler à 1,6 code octet compatible. Mais je n'ai pas vérifié si le compilateur le ferait réellement. Malheureusement, cela ne semble pas être mis en œuvre dans la pratique.
Notez que j'ai trouvé que 'javac' ne supporte pas toutes les combinaisons. J'ai aussi un cas d'utilisation. En Java 6 JAX-WS est intégré, donc je voulais avoir une solution fonctionnant sur Java 6 sans bibliothèques supplémentaires. Cette solution nécessitait alors que quelques clients soient exécutables sur une JVM Java 5 (et JAX-WS amenée sur le côté) et que la syntaxe '@ Override' soit modifiée de sorte qu'elle n'était pas immédiatement compilable par Java 5 javac. (Ceci était pré-maven, cela pourrait être plus facile à faire aujourd'hui) –
Voir aussi '-bootclasspath' comme décrit plus loin dans [cette réponse] (http://stackoverflow.com/a/10663478/418556). –
@skaffman - * "Pourquoi faire cela est une autre affaire ..." * - Java essaie d'interpréter les commentaires. Si les langues ne sont pas correctement définies, la compilation pourrait échouer à cause d'un caractère illégal dans les commentaires !!! Il est parfois plus facile de dire au compilateur d'arrêter d'interpréter les commentaires, puis de corriger l'avis de copyright dans des centaines de fichiers. – jww