javac source et cible les options
J'ai vu les options de compilation comme discuté dans Qui du JDK de distributions peut exécuter `javac -source 1.6 -cible de 1,5`?. Je comprends les options individuelles pour la source et la cible. Je ne comprends pas pourquoi la version de la source est plus élevé que la version cible. Compiler le code pour les anciens objectifs de sens. Mais dans ce cas, pourquoi ne pas simplement utiliser la source de la plus ancienne cible que nous voulons être en mesure d'exécuter sur
Vous devez vous connecter pour publier un commentaire.
Java est rétro-compatible. Vous utilisez le -source option pour spécifier la version de java utilisée pour la compilation et que vous utilisez le -cible option pour spécifier le plus bas version de java à l'appui. par exemple. Si je spécifier une cible de 1,4, alors mon programme ne sera pas en mesure d'exécuter sur java 1.3 ou plus bas. voir la suite de javac la documentation pour plus d'info. en particulier la section sur de la Croix-Options de Compilation
Assurez-vous également de définir bootclasspath pour assurer que votre programme fonctionne sur les anciennes machines virtuelles.
De la
javac
la documentation:Peter Tseng ne mentionner beaucoup de points clés à retenir lors de la compilation. Comme une question de fait, même j'ai été confronté à un problème similaire quelque part en arrière et que vous voulez partager les causes profondes des problèmes.
J'ai eu un code source qui a compilé & de le rendre compatible (source & cible) Java '1.8'. Le code lui-même avait
java.sql.*
paquetAprès certaines modifications j'ai fini avec un code qui avaient une égale quantité de JUnit des cas de test à exécuter. Finalement je suis tombé sur un
java.lang.VerifyError
. J'ai été choqué quand j'ai entendu qu'une telle erreur se produit lorsque j'ai compiler et exécuter le code dans les différentes bibliothèques de l'environnement(ce Qui n'était pas le cas).Ce que j'ai manqué presque, pour honorer le fait que le tests avaient pour fonctionner dans un environnement isolé, Junit & son essai les cas où il s'exécute dans un autre fourche VM
De toute évidence, cela va être fractionné en tant que processus séparé et d'agir en tant qu'application autonome dans l'exécution. Même si l'IDE s'étend sur les deux processus de façon synchrone, la JVM sont assez bien isolé.
Après Java 1.7, Oracle a introduit une plus strictes de vérification et changé le format de catégorie un peu, pour contenir une pile de la carte, utilisée pour vérifier que le code est correct. L'exception que j'avais vu, c'était parce que certains de la méthode n'est pas valable de la pile de la carte. Finalement, j'ai essayé d'inclure beaucoup d'options JVM pour ajuster le réglage, mais en vain.
rien n'a fonctionné. Le seul travail est d'inclure
En Java 1.7 pour permettre seulement nominale de byte code de vérification. Depuis que ceci a été enlevé en Java 1.8, la seule option était d'utiliser
JDK1.8 ne prendra plus en charge la source et la cible de moins de 1,6