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.class
n’existe pas,bake
doit compilerMain.java
. - Commande exécutée :
javac Main.java
Main.class
est généré.
2️⃣ Seconde exécution de bake
sans modification
- Si
Main.class
est déjà à jour,bake
ne doit rien faire. - Aucune commande
javac
ne doit être exécutée.
3️⃣ Modification de Main.java
et recompilation
- Si
Main.java
est modifié,bake
doit 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.class
s’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.
bake
ne 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
bake
ne recompile pas sans raison et ne recompileMain.java
que 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 !