Bonjour,
Le contexte :
Je développe une bibliothèque qui doit être compatible Java 5. Jusque là j'utilisais le JDK 1.5, pas de problème. L'objectif est de rester compatible Java 5.
J'ai regardé du côté du JDK 1.6, grandement apprécié certaines méthodes, et donc réutilisé le code/principe de méthodes apparues à partir du JDK 1.6, comme par exemple la méthode isEmpty de la classe String, ou encore setReadable de File. Je suis donc toujours en 1.5.
Cette pratique me paraissait assez logique : j'avais déjà essayé - avec un JDK 1.5 - de spécifier comme format de la cible (paramètre "-version" de javac) la 1.4, et me suis naturellement pris des erreurs me disant que, par exemple, les annotations n'étaient pas supportées en Java 1.4.
Cependant, imaginez ma surprise quand j'ai essayé ceci :
J'utilise maintenant le JDK 1.6;
J'utilise aussi directement du code du JDK 1.6, par exemple j'utilise isEmpty() sur mes objets String. C'est du 1.6.
Je précise le format de ma cible (-version) : Java 1.5.
Je m'attendait à des messages d'erreurs me disant que isEmpty() est inconnu en Java 5, mais que neni, ça passe très bien. A vrai dire, en programmant en Java 6, MAIS en spécifiant le niveau Java 5, le JAR généré est compatible Java 5.
Du moins c'est ce dont je me suis aperçu ce soir sur mon projet. Dans un sens cela me paraît logique car les sources que j'ai vu en 1.6 sont faites avec du 1.5, le compilateur s'arrangerait donc avec tout ça, et c'est très sympa. Et puis les annotations & co existent en 1.5 (pas comme en 1.4).
Ou pas.
Deux petites questions
-1- Devrais-je tout de même retourner sous un JDK 1.5 ? J'avoue aimer programmer en Java 6 (ou 1.6, excusez mes éventuelles erreurs de convention ^^), ça m'évite un bête copier-coller. Et puis mon projet compile beaucoup plus vite avec un JDK 1.6 qu'avec un 1.5. Et ça me permettrait aussi de virer mon JDK 1.5, tant qu'on y est !
Le cas 1.6 - 1.5 est-il un cas particulier ?
-2- J'essaie de maintenir une Javadoc complète, et utilise donc le tag @version. Vu que j'utilise des méthodes 1.6 tout en ayant des sources 1.5 : du point de vu de l'utilisateur de la librairie je devrais mettre @since 1.5, mais du point de vue de celui qui reprend les sources, il devrait s'attendre à un @scince 1.6, non ?
Et puis il faut un JDK 1.6, même si au final une JRE 1.5 suffit.
Alors, @since 1.6 ou @since 1.5 pour un code 1.6 mais cible 1.5 ?
Un grand merci pour avoir lu ce message, et merci d'avance pour vos conseils![]()
Partager