Test 4 : Compilation où le résultat existe déjà OU est modifier
📌 Description
Ce test vérifie que si l’exécutable Main.class est déjà présent et que Main.java
n'a pas été modifié, alors bake ne doit pas recompiler inutilement.
Cela permet d’optimiser la compilation en évitant de perdre du temps et des ressources
à recompiler des fichiers inchangés, comme make en C.
📂 Fichiers utilisés
Main.java: Fichier source contenant le programme principal.Bakefile: Contient les règles de compilation.Main.class: Fichier compilé qui doit exister avant le test.
✅ Résultat attendu
1️⃣ Première exécution de bake
- Si
Main.classn’existe pas,bakedoit compilerMain.java. - Commande exécutée :
javac Main.java Main.classest généré.
2️⃣ Seconde exécution de bake sans modification
- Si
Main.classest déjà à jour,bakene doit rien faire. - Aucune commande
javacne doit être exécutée.
3️⃣ Modification de Main.java et recompilation
- Si
Main.javaest modifié,bakedoit détecter le changement et
recompiler uniquementMain.java. - Commande exécutée :
javac Main.java
🔬 Procédure de test
1️⃣ Étape 1 : Compilation initiale
- Supprimer
Main.classs’il existe déjà :rm -f Main.class - Exécuter
bake:java -cp bakefile.jar fr.monlouyan.bakefile.Main
javac Main.java
3. **Attendu** :
- `bake` doit exécuter `javac Main.java` et créer `Main.class`.
### **2️⃣ Étape 2 : Vérification sans modification**
1. Exécuter `bake` une seconde fois :
```sh
java -cp bakefile.jar fr.monlouyan.bakefile.Main
javac Main.java
- Attendu :
- Aucune recompilation ne doit avoir lieu.
bakene doit afficher aucun message de compilation.
3️⃣ Étape 3 : Modifier Main.java
- Modifier
Main.java, par exemple en ajoutant une ligne :System.out.println("Nouvelle ligne ajoutée !"); - Exécuter
bake:java -cp bakefile.jar fr.monlouyan.bakefile.Main
javac Main.java
3. **Attendu** :
- `bake` détecte la modification et exécute `javac Main.java`.
- `Main.class` est mis à jour.
---
## 🛠 **Fichier `Bakefile` utilisé**
```make
# Bakefile
Main.class: Main.java
javac Main.java
all: Main.class
➡ Ce Bakefile garantit que bake ne recompile Main.java que si nécessaire.
🎯 Validation du test
| Situation | Comportement attendu |
|---|---|
Première compilation (bake) |
javac Main.java est exécuté ✅ |
Seconde exécution sans modification (bake) |
Aucune recompilation ✅ |
Modification de Main.java |
javac Main.java est exécuté à nouveau ✅ |
📌 Conclusion
- Si
bakene recompile pas sans raison et ne recompileMain.javaque si modifié, alors le test est réussi ! ✅ - Cela assure une optimisation de la compilation et empêche le gaspillage de ressources.
🚀 Lance le test et vérifie que bake fonctionne correctement !