:: Enseignements :: ESIPE :: E4INFO :: 2018-2019 :: Java Inside ::
[LOGO]

Bootcamp


Git, Pro, JUnit, JMH, Github, Travis

Exercice 1 - Git / Github

Le but de cet exercice est de créer un repository sur Github qui sera utiliser pour le reste des labs.

  1. Créer un compte sur Github (si vous n'en aavez pas déjà un)
  2. Créer un repository nommé java-inside avec un .gitignore configuré pour les projets Java et un README indiquant que ce repository va contenir les différents labs de la matière Java Inside.
  3. Dans votre home directory sur la machine de la fac (ou votre propre machine), cloner le projet avec git clone (dans un terminal).
    Changer l'editeur de texte (pour le texte des commits) pour utiliser vi
    export GIT_EDITOR=vi
    Modifier le README puis faite une git commit et aller vérifier que le README est bien mis à jour sur GitHub.
    Que se passe t'il ? Pourquoi ? Comment corriger le problème ?
  4. Ajouter un fichier test.txt, puis utiliser git add. Puis faite en sorte que le fichier apparaisse sur Github.
  5. Modifier le contenu du fichier test.txt en utilisant directement l'interface de github (le petit stylo Edit) pui commiter le.
    Comment faire pour mettre à jour la copie local de votre repository pour que vous voyez le contenu du fichier changé sur la machine locale.
  6. Supprimer le fichier test.txt en locale et fait en sorte qu'il soit supprimer sur Github.
  7. Ouvrer Eclipse (en utilisant la version /home/ens/forax/java-inside/eclipse) et répéter les mêmes opérations,
    • créer un fichier test-eclipse.txt en local
    • faire en sorte qu'il soit pris en compte par git
    • faire en sorte qu'il soit visible sur github
    • modifier le en utilisant l'interface de Github
    • faire en sorte de voir les modifications que vous avez fait en local
    • suprimmer le fichier en local et de mettre à jour le repository sur Github
  8. Prenez une feuille blanche et faire un dessin expliquant le fonctionnement de Git !

Exercice 2 - Pro et JUnit 5

Pour la suite des labs, nous allons utiliser un outils de build pour gérer les dépendences, compiler, packager, executer les tests d'un projet Java.
Dans le monde Java, historiquement, ant qui ressemble à Make mais avec un fichier de build écrit en Java était utiliser. Depuis une quizaine d'année, la plupart des projets utilise soit Apache Maven (build toujours en XML) si le build est standard ou Gradle si le build (en Groovy ou récemment Kotlin) est plus compliqué.
Nous n'utiliserons ni Maven ni Gradle mais Pro qui est utilisé par personne mais qui a l'avantage de pouvoir facilement packager des versions de Java qui n'existe pas encore.
Pro est installé sur les machines de l'université dans le répertoire /home/ens/forax/java-inside/pro-jdk-11, si vous voulez utiliser pro sur votre machine personnel, vous pouvez télécharger les differentes version à partir de l'onglet releases de Github.

  1. Créer un repertoire lab1 puis dans ce répertoire utiliser la commande pro scaffold pour créer un exemple de projet Java ayant un module fr.umlv.javainside.lab1.
    Puis utiliser la commande pro sans argument pour exécuter le build définie par le fichier build.pro. Ajouter une classe Java fr.umlv.javainside.lab1.Sums ayant deux méthodes caculant la somme des nombre de 0 à n soit en tilisant une boucle loopSum soit en utilisant un Stream streamSum.
    Vérifier que le module build correctement.
  2. Ajouter une classe de test fr.umlv.javainside.lab1.SumsTests utilisant le framework de test JUnit 5 (regarder l'exemple) testant les deux méthodes loopSum et streamSum avec différents paramétres.
    Vérifier que le module build toujours correctement et que les tests sont bien exécutées.

Exercice 3 - JMH

Pour faire les tests de performance sur des micro-benchmarks, nous allons utiliser l'outil Java Microbenchmark Harness (ou JMH)
Pour demander à Pro d'utiliser JMH, il faut:
  • ajouter les dépendences sur JMH
  • demander au compilateur d'utiliser le processeur d'annotation de JMH
  • ajouter le perfer dans la liste des commandes que l'on passe à run

  1. Récupérer un exemple de test de performance JMH JMHSample_01_HelloWorld.java, changer le build pour utiliser ce test et vérifier que le projet build. Créer un test JMH TestBenchMark qui compare la vitesse d'exécution des méthodes loopSum et streamSum en fonction de différents paramètres.
    La doc de JMH est uniquement composé d'exemples exécutables.
Note: pour executer un test JMH à partir de la ligne de commande, on doit écrire
    /chemin-vers-pro/pro/bin/java --module-path target/test/artifact:deps -m fr.umlv.javainside.lab1/fr.umlv.javainside.lab1.TestBenchMark
  
Le module-path indique les répertoires contenant les jars et -m prend en paramètre le nom du module et le nom du fichier Java séparé par un slash.

Exercice 4 - Travis

Travis est un service qui permet de tester (et déployer) du code à distance. Travis est intégré avec Github et execute le script de test à chaque fois qu'un commit est fait.
Comme nous n'utilisons pas Maven ou Gradle mais Pro, il va falloir dans un premier temps demander à Travis de télécharger la dernière version de Pro, pour cela nous avons un petit script écrit en Java (si on peut écrire des scripts en Java) nommé pro_wrapper.java.
Le script s'exécute en utilisant java pro_wrapper.java (pas besoin de le compiler).
Le script pro_wrapper.java utilise la variable d'environement PRO_SPECIAL_BUILD pour choisir quelle version de pro doit être utiliser. PRO_SPECIAL_BUILD='' correspond à Java 11 et PRO_SPECIAL_BUILD='early-access' correspond à la version 12.

  1. Enregistrez vous sur le site travis-ci.org et demander à ce que Travis s'occupe de votre repository GitHub java-inside
  2. Liser comment marche Travis
  3. Créer un fichier .travis.yml, qui décrit en YAML la configuration de test.
    Attention: Travis est sourcillieux avec son fichier YAML , il n'accepte pas les tabs et un déclage se fait avec 2 espaces, pas 3, pas 1 !
    language: java
    jdk: openjdk11
    
    # https://github.com/travis-ci/travis-ci/issues/8408
    before_install:
      - unset _JAVA_OPTIONS
    
    env: 
      - PRO_SPECIAL_BUILD='early-access'
    
    install:
      - cd lab01
      - java pro_wrapper.java version
    
    script:
      - ./pro/bin/pro version
      - ./pro/bin/pro    
        
  4. Regarder les temps d'exécution si vous demandez à Travis d'exécuter les tests JMH, que pouvez vous en conclure ?
  5. Utiliser la notion de build matrix pour tester votre projet avec les version 11 et 12 de Pro.