#!/usr/bin/env pwsh <# .SYNOPSIS Script pour tuer les processus Java liés au projet Lions User Manager .DESCRIPTION Ce script identifie et tue tous les processus Java qui pourraient verrouiller les fichiers du projet, permettant ainsi d'exécuter mvn clean sans erreur. .PARAMETER Force Force l'arrêt des processus sans confirmation .EXAMPLE .\kill-java-processes.ps1 .EXAMPLE .\kill-java-processes.ps1 -Force #> param( [Parameter(Mandatory=$false)] [switch]$Force ) $ErrorActionPreference = "Stop" # Couleurs function Write-Success { Write-Host "✅ $args" -ForegroundColor Green } function Write-Info { Write-Host "ℹ️ $args" -ForegroundColor Cyan } function Write-Warning { Write-Host "⚠️ $args" -ForegroundColor Yellow } function Write-Error { Write-Host "❌ $args" -ForegroundColor Red } function Write-Step { Write-Host "`n🚀 $args" -ForegroundColor Magenta } Write-Host @" ╔═══════════════════════════════════════════════════════════════════════════════╗ ║ ║ ║ 🔪 ARRÊT DES PROCESSUS JAVA - LIONS USER MANAGER 🔪 ║ ║ ║ ╚═══════════════════════════════════════════════════════════════════════════════╝ "@ -ForegroundColor Cyan # 1. Lister tous les processus Java Write-Step "1. Recherche des processus Java..." $javaProcesses = Get-Process | Where-Object { $_.ProcessName -like "*java*" -or $_.ProcessName -like "*javaw*" } | Where-Object { # Exclure les processus Cursor/IDE $_.Path -notlike "*\.cursor\*" -and $_.Path -notlike "*\.vscode\*" -and $_.Path -notlike "*IntelliJ*" -and $_.Path -notlike "*eclipse*" } if ($javaProcesses.Count -eq 0) { Write-Success "Aucun processus Java trouvé à arrêter" exit 0 } Write-Info "Processus Java trouvés: $($javaProcesses.Count)" $javaProcesses | ForEach-Object { Write-Host " - PID: $($_.Id) | Process: $($_.ProcessName) | Path: $($_.Path)" -ForegroundColor Gray } # 2. Vérifier les ports utilisés Write-Step "2. Vérification des ports utilisés..." $ports = @(8080, 8081, 8180) foreach ($port in $ports) { $connections = netstat -ano | Select-String ":$port\s" | ForEach-Object { if ($_ -match '\s+(\d+)$') { $matches[1] } } if ($connections) { Write-Info "Port $port utilisé par les PIDs: $($connections -join ', ')" } } # 3. Demander confirmation (sauf si -Force) if (-not $Force) { Write-Warning "`n⚠️ Ces processus seront arrêtés de force." $confirm = Read-Host "Continuer ? (O/N)" if ($confirm -ne "O" -and $confirm -ne "o" -and $confirm -ne "Y" -and $confirm -ne "y") { Write-Info "Opération annulée" exit 0 } } # 4. Arrêter les processus Write-Step "3. Arrêt des processus Java..." $killed = 0 $errors = 0 foreach ($process in $javaProcesses) { try { Write-Info "Arrêt du processus $($process.Id) ($($process.ProcessName))..." Stop-Process -Id $process.Id -Force -ErrorAction Stop $killed++ Write-Success "Processus $($process.Id) arrêté" } catch { $errors++ Write-Error "Erreur lors de l'arrêt du processus $($process.Id): $_" } } # 5. Attendre un peu pour que les fichiers soient libérés if ($killed -gt 0) { Write-Info "Attente de 2 secondes pour libérer les fichiers..." Start-Sleep -Seconds 2 } # 6. Vérifier qu'il ne reste plus de processus (sauf Cursor/IDE) Write-Step "4. Vérification finale..." $remaining = Get-Process | Where-Object { ($_.ProcessName -like "*java*" -or $_.ProcessName -like "*javaw*") -and $_.Path -notlike "*\.cursor\*" -and $_.Path -notlike "*\.vscode\*" -and $_.Path -notlike "*IntelliJ*" -and $_.Path -notlike "*eclipse*" } if ($remaining.Count -eq 0) { Write-Success "Tous les processus Java du projet ont été arrêtés" } else { Write-Warning "Il reste $($remaining.Count) processus Java:" $remaining | ForEach-Object { Write-Host " - PID: $($_.Id) | Process: $($_.ProcessName)" -ForegroundColor Yellow } } # 7. Résumé Write-Host @" ╔═══════════════════════════════════════════════════════════════════════════════╗ ║ ║ ║ ✅ PROCESSUS JAVA ARRÊTÉS ✅ ║ ║ ║ ╚═══════════════════════════════════════════════════════════════════════════════╝ "@ -ForegroundColor Green Write-Host "📊 RÉSUMÉ:" -ForegroundColor Yellow Write-Host " Processus arrêtés: $killed" -ForegroundColor White if ($errors -gt 0) { Write-Host " Erreurs: $errors" -ForegroundColor Red } Write-Host "" Write-Host "💡 Vous pouvez maintenant exécuter 'mvn clean' sans erreur" -ForegroundColor Cyan Write-Host ""