136 lines
2.8 KiB
Bash
136 lines
2.8 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# ======================
|
|
# CONFIGURATION
|
|
# ======================
|
|
OUT="out"
|
|
MAIN_CLASS="Main" # Si Main est dans un package, ex: monpackage.Main
|
|
# ======================
|
|
|
|
# Se placer dans le dossier du script
|
|
cd "$(dirname "$0")"
|
|
|
|
cmd="${1:-help}"
|
|
|
|
|
|
clean() {
|
|
if [ -d "$OUT" ]; then
|
|
echo "Suppression du dossier '$OUT'..."
|
|
rm -rf "$OUT"
|
|
else
|
|
echo "Aucun dossier '$OUT' à supprimer."
|
|
fi
|
|
}
|
|
|
|
|
|
build() {
|
|
if ! command -v javac >/dev/null 2>&1; then
|
|
echo "[ERREUR] javac introuvable dans le PATH"
|
|
return 1
|
|
fi
|
|
|
|
mkdir -p "$OUT"
|
|
|
|
echo "Création de la liste des sources..."
|
|
mapfile -t sources < <(find . -type f -name "*.java")
|
|
|
|
COUNT="${#sources[@]}"
|
|
if [ "$COUNT" -eq 0 ]; then
|
|
echo "[ERREUR] Aucun fichier .java trouvé dans $PWD"
|
|
return 1
|
|
fi
|
|
|
|
echo "$COUNT fichiers trouvés. Compilation..."
|
|
|
|
javac -d "$OUT" "${sources[@]}"
|
|
ERR=$?
|
|
|
|
if [ "$ERR" -eq 0 ]; then
|
|
echo "Compilation réussie !"
|
|
else
|
|
echo "[ERREUR] Compilation (code $ERR)"
|
|
fi
|
|
|
|
return $ERR
|
|
}
|
|
|
|
|
|
run() {
|
|
build
|
|
if [ $? -eq 0 ]; then
|
|
echo
|
|
echo "Exécution de $MAIN_CLASS ..."
|
|
java -cp "$OUT" "$MAIN_CLASS"
|
|
fi
|
|
}
|
|
|
|
|
|
count() {
|
|
COUNT=$(find . -type f -name "*.java" | wc -l)
|
|
echo "$COUNT fichiers Java trouvés."
|
|
|
|
LIGNES=0
|
|
while IFS= read -r file; do
|
|
NB=$(wc -l < "$file")
|
|
LIGNES=$((LIGNES + NB))
|
|
done < <(find . -type f -name "*.java")
|
|
|
|
echo "$LIGNES lignes Java trouvées."
|
|
}
|
|
|
|
|
|
watch() {
|
|
echo "Mode surveillance activé : recompilation à chaque changement..."
|
|
echo "Ctrl+C pour quitter."
|
|
|
|
LASTSTATE=""
|
|
|
|
while true; do
|
|
CURRENTSTATE=$(find . -type f -name "*.java" -exec stat -c "%n %Y" {} \;)
|
|
if [ "$CURRENTSTATE" != "$LASTSTATE" ]; then
|
|
LASTSTATE="$CURRENTSTATE"
|
|
build
|
|
fi
|
|
sleep 2
|
|
done
|
|
}
|
|
|
|
|
|
purge() {
|
|
echo "Suppression des .class hors de '$OUT'..."
|
|
find . -type f -name "*.class" ! -path "./$OUT/*" -delete
|
|
}
|
|
|
|
|
|
rebuild() {
|
|
clean
|
|
purge
|
|
build
|
|
}
|
|
|
|
|
|
help() {
|
|
echo "Usage: ./build.sh [option]"
|
|
echo
|
|
echo " build - Compile le projet"
|
|
echo " clean - Supprime le dossier de sortie '$OUT'"
|
|
echo " run - Compile puis lance $MAIN_CLASS"
|
|
echo " count - Compte les fichiers et les lignes Java"
|
|
echo " watch - Recompile automatiquement si un fichier change"
|
|
echo " purge - Supprime les .class hors de '$OUT'"
|
|
echo " rebuild - Nettoie, purge et recompile le projet"
|
|
echo " help - Affiche cette aide"
|
|
}
|
|
|
|
|
|
case "$cmd" in
|
|
clean) clean ;;
|
|
build) build ;;
|
|
run) run ;;
|
|
count) count ;;
|
|
watch) watch ;;
|
|
purge) purge ;;
|
|
rebuild) rebuild ;;
|
|
help|*) help ;;
|
|
esac
|