Outils

Les utilitaires standard de Java

Le but de ce chapitre n’est pas de dupliquer la documentation des outils livrés avec Java (voir https://docs.oracle.com/javase/<version>/tools/title.htm ). Mais d’attirer l’attention sur certains utilitaires et sur quelques options remarquables.

- javac : en général c’est la configuration de votre I.D.E qui utilisera les options de javac il faudra éventuellement les modifier dans le cadre d’un projet ou les adapter quand la compilation d’un module particulier va exiger des options spécifiques.

+ Parmi les options générales penser à :

  • -encoding: pour le type de caractères utilisé dans vos sources.
  • -g <option>: pour le type d’information de debug qui sera inclus dans le binaire. En phase de développement on mettra toutes les informations, par contre il faudra évaluer si c’est pertinent pour un binaire en livraison.
  • -parameters : pour mettre dans le binaire le nom explicite des paramètres (voir chapitre sur l’introspection).
  • -h : génération de canevas de codes native.
  • -Xlint: <clef> : permet d'émettre des warnings supplémentaires à propos de codes avec des propriétés limite. (exemple: Xlint:fallthrough pour un switch).

cas particuliers:

  • processor : pour lancer des classes annotation processor.
  • les options spéciales de traitements modulaires: --add-reads, --add-exports, --limit-modules et --add-modules

- java : bien prendre en compte la distinction entre classPath et modulePath. Dans un contexte purement modulaire le commande a la forme java [options] [--module-path modulepath] --module module[/mainclass] [args…].

+ Autre options remarquables:

  • -enableassertions : pour activer les assertions dans un ensemble de packages.
  • les options liées à la gestion des modules: -add-modules et --add-reads, --add-exports, --add-opens
  • les options de tuning en -X et -XX (mémoire, garbage collector, etc.) sont très nombreuses (et pour des spécialistes).
  • -agentlib : pour spécifier des bibliothèques de codes natifs.

    • javap: pour les amateurs de dump du binaire (parfois utile pour comprendre des situations compliquées).
    • javadoc: un outil fondamental! Même si le lancement est intégré à votre IDE le plus important est d'écrire correctement la documentation javadoc. Rechercher dans la documentation Oracle How to Write Doc Comments for the Javadoc Tool.

      Noter toutefois un problème: il y a en réalité deux niveaux possibles de documentation. La documentation qui concerne les utilisateurs d’une API et la documentation qui concerne la maintenance. Il avait été envisagé des marqueurs spécifiques pour la maintenance mais ils ne sont pas standard: il faudra donc gérer une présentation distincte et explicite de ce niveau.

    • jar, jlink: voir le chapitre sur les déploiements.
    • jdeps : permet d’analyser les dépendances entre modules (utile!)
    • missioncontrol, flightrecorder: outils de monitorat.
    • rmid et rmiregistry: voir le chapitre sur les références distantes.
    • serialver : utilitaire liés aux E/S objet et permettant de générer un serialVersionUID

Cas particulier de l’accessibilité

Oui il existe des utilisateurs et même des programmeurs qui sont aveugles!

Raison de plus pour soigner les éléments de documentation et la réalisation des interfaces graphiques (voir Java Accessibility Guide )

On ne dira jamais assez qu’une interface simple, bien organisée est un objectif de design vraiment professionnel et que les interfaces spectaculaires sont certes vendeuses mais finalement rarement ergonomiques et surtout inaccessibles aux handicapés. (dans un domaine connexe voir aussi Accessible Rich Internet Applications ARIA)

Remarques sur d’autres outils

IL n’est pas dans les objectifs de ce cours de présenter l’ensemble des outils utiles pour une programmation dans un contexte professionnel.

Toutefois voici quelques remarques d’ordre général:

  • L’introduction des modules a fortement perturbé l’organisation de nombreux utilitaires (Maven, Gradle, les IDE etc.). Un point particulièrement délicat est la mise en place de code de tests. Il faudra savoir manipuler les options de compilation et d’exécution qui "contournent" (un peu) les contraintes modulaires: add-modules et les add-reads, add-opens, etc.
  • Les utilitaires de "débourrage" (lint) doivent être utilisés avec discernement: certains multiplient des warnings qui finissent par émousser l’attention du programmeur. (de ce point de vue l’outil findbugs est un très bon compromis).

En conclusion: il faut rester vigilants avec les outils de déploiement … on ne peut que souhaiter des évolutions qui permettent de simplifier des déploiements et des évolutions des applications sur site.