吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 277|回复: 4
收起左侧

[其他原创] java环境下的mavne、tomcat,jdk环境自动化配置

[复制链接]
xiaokeng0322 发表于 2026-3-28 13:59
本帖最后由 xiaokeng0322 于 2026-3-28 14:03 编辑

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

修改安装位置

PixPin_2026-03-28_13-49-56.png

运行截图

PixPin_2026-03-28_11-35-43.png

直接下载文件

蓝奏云下载地址 https://xiaokeng.lanzoul.com/iUprt3lr4euf

免费评分

参与人数 1热心值 +1 收起 理由
weidechan + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

long760418 发表于 2026-3-28 16:42
简单高效实用工具,点赞
gh8671 发表于 2026-3-28 17:51
SFSeiei 发表于 2026-3-28 19:00
allxxall 发表于 2026-3-29 09:08
优化建议:可以补充从网络下载安装包和跨平台的逻辑实现
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-3-29 12:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表