Java 环境一键配置脚本说明
由于最近帮很多同学部署 Java 环境,每次都需要重新配置一次 JDK8、Maven、Tomcat,这个流程很繁琐也很无趣,于是就写了一个脚本去直接配置环境变量。
- JDK8 需要提前安装 然后脚本中修改安装位置
- Maven 和 Tomcat 只需要修改脚本的下载位置即可
RunSetup.bat
编码格式:ANSI(否则中文乱码)
@echo off
echo 设置环境变量...
powershell -ExecutionPolicy Bypass -File "%~dp0SetupJavaMavenTomcat.ps1"
echo.
echo 按任意键退出 或者直接关闭即可
pause > nul
SetupJavaMavenTomcat.ps1
编码格式:ANSI(否则中文乱码)
<#
安全配置 Java、Maven 和 Tomcat 系统环境变量
- 将当前系统环境变量备份至桌面(.reg 文件) 便于恢复。
- 设置 JAVA_HOME、MAVEN_HOME、CATALINA_HOME。
- 删除 PATH 中所有旧的与 Java、Maven 和 Tomcat 相关的条目。
- 将 %JAVA_HOME%\bin、%MAVEN_HOME%\bin、%CATALINA_HOME%\bin 添加至 PATH。
- 发送 WM_SETTINGCHANGE 通知。
- 可选测试 java、mvn 和 catalina 命令。
必须以管理员身份运行。
#>
param(
[string]$JavaHome = "D:\Install\jdk8\jdk",
[string]$MavenHome = "D:\Install\apache-maven-3.9.9",
[string]$TomcatHome = "D:\develop\apache-tomcat-9.0.115"
)
# ----------------------------
# 1. 验证权限
# ----------------------------
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) {
Write-Host "错误提示:此脚本必须以管理员身份运行" -ForegroundColor Red
Write-Host "右键点击PowerShell -> 以管理员身份运行" -ForegroundColor Yellow
pause
exit 1
}
# ----------------------------
# 2. 校验路径
# ----------------------------
$valid = $true
# Java
if (-not (Test-Path $JavaHome)) {
Write-Host "错误:未找到 Java 目录: $JavaHome" -ForegroundColor Red
$valid = $false
}
else {
$javaBin = Join-Path $JavaHome "bin"
if (-not (Test-Path $javaBin)) {
Write-Host "错误:未找到 Java 可执行文件目录: $javaBin" -ForegroundColor Red
$valid = $false
}
}
# Maven
if (-not (Test-Path $MavenHome)) {
Write-Host "错误:未找到 Maven 目录: $MavenHome" -ForegroundColor Red
$valid = $false
}
else {
$mavenBin = Join-Path $MavenHome "bin"
if (-not (Test-Path $mavenBin)) {
Write-Host "错误:未找到 Maven 可执行文件目录: $mavenBin" -ForegroundColor Red
$valid = $false
}
}
# Tomcat
if (-not (Test-Path $TomcatHome)) {
Write-Host "错误:未找到 Tomcat 目录: $TomcatHome" -ForegroundColor Red
$valid = $false
}
else {
$tomcatBin = Join-Path $TomcatHome "bin"
if (-not (Test-Path $tomcatBin)) {
Write-Host "错误:未找到 Tomcat 可执行文件目录: $tomcatBin" -ForegroundColor Red
$valid = $false
}
}
if (-not $valid) {
Write-Host "请修正路径并重新运行。" -ForegroundColor Yellow
pause
exit 1
}
Write-Host "`n正在配置 Java、Maven 和 Tomcat 环境变量......" -ForegroundColor Cyan
Write-Host "Java 路径: $JavaHome" -ForegroundColor Gray
Write-Host "Maven 路径: $MavenHome" -ForegroundColor Gray
Write-Host "Tomcat 路径: $TomcatHome`n" -ForegroundColor Gray
# ----------------------------
# 3. 备份当前环境
# ----------------------------
$backupFile = "$env:USERPROFILE\Desktop\EnvBackup_$(Get-Date -Format 'yyyyMMdd_HHmmss').reg"
$backupOk = $false
try {
reg export "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" $backupFile /y | Out-Null
$backupOk = $true
Write-Host "备份已保存至: $backupFile" -ForegroundColor Green
}
catch {
Write-Host "警告:备份失败,但脚本将继续运行。" -ForegroundColor Yellow
}
# ----------------------------
# 4. 设置 JAVA_HOME
# ----------------------------
$oldJavaHome = [System.Environment]::GetEnvironmentVariable("JAVA_HOME", "Machine")
if ($oldJavaHome) {
if ($oldJavaHome -eq $JavaHome) {
Write-Host "JAVA_HOME 已经设置为 $JavaHome。跳过。" -ForegroundColor Green
} else {
Write-Host "检测到旧的 JAVA_HOME: $oldJavaHome" -ForegroundColor Yellow
Write-Host "替换为: $JavaHome" -ForegroundColor Yellow
[System.Environment]::SetEnvironmentVariable("JAVA_HOME", $JavaHome, "Machine")
}
} else {
Write-Host "设置 JAVA_HOME = $JavaHome" -ForegroundColor Green
[System.Environment]::SetEnvironmentVariable("JAVA_HOME", $JavaHome, "Machine")
}
# ----------------------------
# 5. 设置 MAVEN_HOME
# ----------------------------
$oldMavenHome = [System.Environment]::GetEnvironmentVariable("MAVEN_HOME", "Machine")
if ($oldMavenHome) {
if ($oldMavenHome -eq $MavenHome) {
Write-Host "MAVEN_HOME 已经设置为 $MavenHome。跳过。" -ForegroundColor Green
} else {
Write-Host "检测到旧的 MAVEN_HOME: $oldMavenHome" -ForegroundColor Yellow
Write-Host "替换为: $MavenHome" -ForegroundColor Yellow
[System.Environment]::SetEnvironmentVariable("MAVEN_HOME", $MavenHome, "Machine")
}
} else {
Write-Host "设置 MAVEN_HOME = $MavenHome" -ForegroundColor Green
[System.Environment]::SetEnvironmentVariable("MAVEN_HOME", $MavenHome, "Machine")
}
# ----------------------------
# 6. 设置 CATALINA_HOME
# ----------------------------
$oldCatalinaHome = [System.Environment]::GetEnvironmentVariable("CATALINA_HOME", "Machine")
if ($oldCatalinaHome) {
if ($oldCatalinaHome -eq $TomcatHome) {
Write-Host "CATALINA_HOME 已经设置为 $TomcatHome。跳过。" -ForegroundColor Green
} else {
Write-Host "检测到旧的 CATALINA_HOME: $oldCatalinaHome" -ForegroundColor Yellow
Write-Host "替换为: $TomcatHome" -ForegroundColor Yellow
[System.Environment]::SetEnvironmentVariable("CATALINA_HOME", $TomcatHome, "Machine")
}
} else {
Write-Host "设置 CATALINA_HOME = $TomcatHome" -ForegroundColor Green
[System.Environment]::SetEnvironmentVariable("CATALINA_HOME", $TomcatHome, "Machine")
}
# ----------------------------
# 7. 清除相同配置
# ----------------------------
$currentPath = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
$pathEntries = $currentPath -split ";" | Where-Object { $_ -ne "" }
$removed = @()
$kept = @()
foreach ($entry in $pathEntries) {
$entry = $entry.Trim()
if ($entry -eq "") { continue }
$expanded = [System.Environment]::ExpandEnvironmentVariables($entry)
$isJava = ($expanded -imatch "java") -or ($entry -imatch "%JAVA_HOME%")
$isMaven = ($expanded -imatch "maven") -or ($entry -imatch "%MAVEN_HOME%")
$isTomcat = ($expanded -imatch "tomcat") -or ($entry -imatch "%CATALINA_HOME%")
if ($isJava -or $isMaven -or $isTomcat) {
$removed += $entry
} else {
$kept += $entry
}
}
if ($removed.Count -gt 0) {
Write-Host "`n已删除旧的 Java/Maven/Tomcat PATH 条目:" -ForegroundColor Yellow
$removed | ForEach-Object { Write-Host " $_" -ForegroundColor DarkYellow }
} else {
Write-Host "`n未找到旧的 Java/Maven/Tomcat PATH 条目。" -ForegroundColor Gray
}
# ----------------------------
# 8. 增加新配置
# ----------------------------
$newJavaEntry = "%JAVA_HOME%\bin"
$newMavenEntry = "%MAVEN_HOME%\bin"
$newTomcatEntry = "%CATALINA_HOME%\bin"
$kept += $newJavaEntry
$kept += $newMavenEntry
$kept += $newTomcatEntry
$finalEntries = $kept | Select-Object -Unique
$newPath = ($finalEntries | Where-Object { $_ -ne "" }) -join ";"
[System.Environment]::SetEnvironmentVariable("Path", $newPath, "Machine")
Write-Host "`nPATH 已更新。已添加:" -ForegroundColor Green
Write-Host " $newJavaEntry" -ForegroundColor Green
Write-Host " $newMavenEntry" -ForegroundColor Green
Write-Host " $newTomcatEntry" -ForegroundColor Green
# ----------------------------
# 9. 通知系统进行更改
# ----------------------------
$HWND_BROADCAST = 0xFFFF
$WM_SETTINGCHANGE = 0x001A
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class WinAPI {
[DllImport("user32.dll")]
public static extern int SendMessageTimeout(int hWnd, int Msg, int wParam, string lParam, int fuFlags, int uTimeout, out int lpdwResult);
}
"@
$null = [WinAPI]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE, 0, "Environment", 2, 5000, [ref]0)
Write-Host "已发送环境变更通知。" -ForegroundColor Gray
# ----------------------------
# 10. 显示结果
# ----------------------------
Write-Host "`n========== 配置完成 ==========" -ForegroundColor Cyan
Write-Host "JAVA_HOME = $([System.Environment]::GetEnvironmentVariable('JAVA_HOME', 'Machine'))" -ForegroundColor White
Write-Host "MAVEN_HOME = $([System.Environment]::GetEnvironmentVariable('MAVEN_HOME', 'Machine'))" -ForegroundColor White
Write-Host "CATALINA_HOME = $([System.Environment]::GetEnvironmentVariable('CATALINA_HOME', 'Machine'))" -ForegroundColor White
Write-Host "`nJava/Maven/Tomcat 在 PATH 中的条目:" -ForegroundColor Cyan
$finalPath = [System.Environment]::GetEnvironmentVariable("Path", "Machine") -split ";"
$finalPath | Where-Object { $_ -imatch "java|maven|tomcat|JAVA_HOME|MAVEN_HOME|CATALINA_HOME" } | ForEach-Object { Write-Host " $_" -ForegroundColor White }
Write-Host "=============================================`n" -ForegroundColor DarkGray
Write-Host "请重新打开命令提示符或重启应用程序以使更改生效。" -ForegroundColor Yellow
if ($backupOk) {
Write-Host "要恢复之前的环境,请导入备份文件:" -ForegroundColor Gray
Write-Host "reg import `"$backupFile`"" -ForegroundColor Gray
}
Write-Host ""
# ----------------------------
# 11. 校验配置情况
# ----------------------------
# 更新当前会话环境
$env:JAVA_HOME = $JavaHome
$env:MAVEN_HOME = $MavenHome
$env:CATALINA_HOME = $TomcatHome
$tempPath = $newPath `
-replace "%JAVA_HOME%", $JavaHome `
-replace "%MAVEN_HOME%", $MavenHome `
-replace "%CATALINA_HOME%", $TomcatHome
$env:Path = $tempPath
Write-Host "在当前会话中测试 Java 版本..." -ForegroundColor Cyan
try {
$javaVersion = & "$javaBin\java.exe" -version 2>&1
Write-Host "Java 成功:" -ForegroundColor Green
$javaVersion | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
}
catch {
Write-Host "Java 测试失败(正常),重新打开终端后 java 将正常工作。" -ForegroundColor Yellow
}
Write-Host "`n在当前会话中测试 Maven 版本..." -ForegroundColor Cyan
try {
$mvnVersion = & "$mavenBin\mvn.cmd" --version 2>&1
Write-Host "Maven 成功:" -ForegroundColor Green
$mvnVersion | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
}
catch {
Write-Host "Maven 测试失败(正常),重新打开终端后 mvn 将正常工作。" -ForegroundColor Yellow
}
Write-Host "`n在当前会话中测试 Tomcat catalina 版本..." -ForegroundColor Cyan
try {
$catalinaVersion = & "$tomcatBin\catalina.bat" version 2>&1
Write-Host "Tomcat 成功:" -ForegroundColor Green
$catalinaVersion | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
}
catch {
Write-Host "Tomcat 测试失败(正常),重新打开终端后 catalina 将正常工作。" -ForegroundColor Yellow
}
Write-Host ""
pause
修改安装位置
运行截图
直接下载文件
蓝奏云下载地址 https://xiaokeng.lanzoul.com/iUprt3lr4euf