Question

Nous sommes bloqués avec Java2SE v1.4 jusqu'à la fin de 2010. C'est vraiment méchant, mais nous ne pouvons pas nous en empêcher. Quelles options avons-nous déjà pour utiliser certaines des nouvelles fonctionnalités? Je peux penser à plusieurs façons, comme

  • changer le bytecode, par ex. utilisez Retrotranslator ou Retroweaver .

  • backport de bibliothèques, par exemple Backport simultané , mais cela n'aide pas les génériques.

  • émulation de fonctionnalités Java 5, par exemple. Collections vérifiées, Varargs avec méthodes auxiliaires, etc.

  • changer le code source par précompilation, en supprimant tous les éléments 1.5 avant la compilation finale, par exemple. Utilisez Declawer pour le faire.

Je suis très intéressé par une expérience très positive dans des environnements de production utilisant Weblogic et "real". des trucs.

Était-ce utile?

La solution

Merci pour vos réponses. Voici le résumé de toutes les réponses pertinentes et mes propres recherches.

Modification du bytecode: les paramètres
Cette opération est effectuée par les " rétro " outils : Retrotranslator , Retroweaver et JBossRetro . Le rétrotranslateur semble être le plus mature et actif de leur outil. Ces outils analysent toutes les classes et modifient le bytecode pour supprimer les fonctionnalités Java 5 et 6. De nombreuses fonctionnalités de Java5 sont prises en charge, certaines en utilisant des bibliothèques de backport tierces. Cette option est la plus populaire et il y a des retours positifs des utilisateurs. Les expériences ont montré que cela fonctionne comme attendu. Consultez un bref aperçu de la developerworks .

Pro: Vous pouvez entièrement développer en Java 5, construire des modules et toutes sortes de fichiers JAR. En fin de compte, vous venez de transformer toutes les classes en Java 1.4 et de conditionner votre fichier EAR. Cela se fait facilement avec l’intégration Maven de Retrotranslator ( org.codehaus.mojo: retrotranslator-maven-plugin ).

Contre: Les environnements conservateurs ne permettent pas le déploiement de bytecode modifié. Le résultat de la rétro-étape n'est visible par aucun codeur et ne peut pas être approuvé. Le deuxième problème est la peur: il pourrait y avoir un problème de production cryptique et le rétro-code est une autre étape qui pourrait être blâmée pour cela. Fournisseurs de serveurs d'applications peut refuser de l'aide en raison d'une modification du code temporel. Donc, personne ne veut prendre la responsabilité de l'utiliser en production. Comme il s’agit plutôt d’un policital que d’un technique problème, alors je ne vois pas de solution. Cela nous est arrivé, alors je cherchais d'autres options: - (

Compilation de Java5 à Java 1.4: jsr14
Il existe une option non prise en charge, javac -source 1.5 et -target jsr14 , qui compile la source Java5 en un bytecode Java 1.4 valide. La plupart des fonctionnalités comme varargs ou extended for loop sont quand même traduits par le compilateur. Les génériques et les annotations sont supprimés. Les énumérations ne sont pas supportées et je ne sais pas à propos de l'autoboxing, car les méthodes valueOf ont été principalement introduites dans Java5.

Con: Seul le code d'octet est traduit, l'utilisation de la bibliothèque n'est pas modifiée. Donc, vous devez faire attention à ne pas utiliser les API spécifiques à Java5 (mais vous pourriez utiliser Backports). De plus, vous devez construire tous les modules en même temps, car pour le développement, vous souhaitez probablement du code Java5 avec des informations génériques et des annotations. Donc, vous devez construire le projet entier à partir de zéro pour la production Java 1.4.

Remettre la source à Java 1.4: Declawer
Réponses à une question connexe , il y Declawer , une extension du compilateur qui fonctionne pour génériques et varargs, mais pas pour amélioré pour la boucle ou Autoboxing. La source générée "est un peu funky, mais pas trop mal".

Pro: la source générée est disponible et peut être révisée. Dans le pire des cas, des corrections peuvent être apportées à cette source. Il n'y a pas de "magie", car la source est valide Java. Certaines personnes utilisent même JAD (decompiler Java) pour récupérer le code source Java 1.4. La sortie lisible de Jad est lisible si vous compilez avec debug informations et ne pas utiliser les classes internes.

Con: Comme pour -target jsr14 , vous avez besoin d’une étape supplémentaire dans le déploiement. Les mêmes problèmes avec les bibliothèques aussi.

Remettre la source à Java 1.4: à la main
Plusieurs réponses suggèrent de le faire à la main. Pour un processus de construction répétitif automatique, cela n’est bien sûr pas utile, mais pour les changements ponctuels, c’est raisonnable. Automatisez simplement ce qui est possible. Regardez peut-être Antlr pour créer un outil de conversion maison.

Bibliothèques rétroportées:
Le problème est que Java5 contient également de nouvelles bibliothèques, qui ne sont pas disponibles dans les anciens JRE, voir question connexe . Heureusement il y a plusieurs des bibliothèques rétroportées qui vous donnent certaines fonctionnalités de Java5, mais ne peuvent pas simuler des fonctionnalités de langage, comme les génériques.

Emulation des fonctionnalités Java5 dans le code Java 1.4:
Je pensais à certaines choses que vous pourriez faire pour vous simplifier la vie tout en restant avec Java 1.4. Les caractéristiques les plus importantes sont les collections typesafe, voici quelques idées:

  • Au lieu d'utiliser des génériques, vous pouvez créer vos propres conteneurs typesafe avec un modèle.
  • Ajouter un itérateur typesafe (qui n'est plus un itérateur).
  • Ajoutez des méthodes asList permettant les arguments 1,2, ..., n et un tableau de ceux-ci (pour simuler des variables).
  • Les méthodes pour varargs (conversion des arguments 1, ..., n en tableaux) et valueOf peuvent être placées dans une classe d'assistance.

Autres conseils

  

précompilation du code source, extraction   tous les trucs avant la compilation finale   et déploiement. Y a-t-il des outils   qui peut le faire?

Oui. Ils s'appellent Retrotranslator ou Retroweaver. Hormis les génériques (qui n'existent de toute façon que pour le compilateur), vous ne pouvez pas simplement "supprimer les éléments 1.5". Les énumérations (et peut-être aussi certaines autres fonctionnalités) doivent être remplacées par un code fonctionnellement équivalent. C’est exactement ce que font ces outils.

Vous pouvez coder avec les fonctionnalités de JDK 1.5 et cibler JDK 1.4 au moment de la compilation. Voir les options Javac disponibles. Cependant, la plupart des bibliothèques utilisent maintenant le code JDK 1.5, vous serez donc coincé avec les anciennes bibliothèques.

Il convient de noter que Java 1.4 est EOL depuis un certain temps. Java 5.0 sera EOL le 8 octobre 2009. Si quelqu'un vous promet Java 5.0 d'ici 2010, je vous demanderais pourquoi?!

Pour simuler des annotations dans Java 1.4, vous pouvez utiliser http://xdoclet.sourceforge.net/. xdoclet / index.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top