web-dev-qa-db-fra.com

Qu'est-ce que sjavac, à qui s'adresse-t-il et comment l'utiliser?

Il y a eu n certain buzz à propos d'un outil appelé sjavac sur les listes de diffusion OpenJDK. En outre, il existe deux JEP associés: JEP 139: Améliorez javac pour améliorer la vitesse de construction et JEP 199: Smart Java Compilation, Phase Two .

Mes questions sont:

  • Qu'est-ce que l'outil sjavac exactement?
  • À qui est-il destiné?
  • Comment est-ce que je l'utilise?

Avertissement: question à réponse automatique. Je voulais juste apporter la connaissance de cet outil à la communauté StackOverflow et créer une référence à la future FAQ sjavac.

50
aioobe

Qu'est-ce que l'outil sjavac exactement?

L'outil sjavac est un (prétendument intelligent) wrapper autour de javac, développé chez Oracle et destiné à fournir les fonctionnalités suivantes:

  • compilations incrémentielles - recompiler uniquement ce qui est nécessaire
  • compilation parallèle - utilise plus d'un noyau pendant la compilation
  • garder le compilateur dans une VM chaude - réutiliser une instance javac JIT pour des invocations consécutives

Lors de la recompilation d'un ensemble de fichiers source, javac examine les horodatages des fichiers .Java et .class pour déterminer ce qu'il faut conserver et quoi recompiler. C'est incroyablement grossier et peut être dévastateur pour les grandes bases de code. En plus des horodatages, sjavac inspecte l'API publique des dépendances pour déterminer quels fichiers doivent être recompilés.

Sjavac tente également de diviser la compilation en plusieurs invocations de javac. En d'autres termes, cela apporte un haut niveau de parallélisme au processus de construction.

Enfin, l'outil sjavac est divisé en une partie client et une partie serveur qui vous permet de laisser sjavac fonctionner en arrière-plan, JIT'ed et prêt à être utilisé lors d'appels consécutifs.

À qui est-il destiné?

Les personnes qui travaillent sur de grands projets et recompilent fréquemment la base de code pendant le développement sont encouragées à essayer sjavac. (Sachez cependant que l'outil est en cours de développement et qu'il y a encore des problèmes en suspens.)

Comment l'utiliser?

L'outil n'est pas encore livré avec OpenJDK, vous devrez donc le récupérer à partir du OpenJDK jdk9/dev repository . De plus, il n'y a pas encore de lanceur en place, vous pouvez donc l'invoquer avec Java com.Sun.tools.sjavac.Main.

55
aioobe

Vous pouvez essayer le backport jdk8 de sjavac ici: http://sjavac.s3-website-eu-west-1.amazonaws.com/

3
user4196234