搞了个RuoYi Plus修改包名的脚本,RuoYi-Vue-Plus/RuoYi-Cloud-Plus包名秒替换

搞了个RuoYi Plus修改包名的脚本,RuoYi-Vue-Plus/RuoYi-Cloud-Plus包名秒替换

RuoYi Plus这个开源项目,应该很多人都知道,是一个非常不错的开源项目,包含了RuoYi-Vue-Plus(多租户权限管理系统)RuoYi-Cloud-Plus(微服务权限管理系统),真正面向企业级的应用框架,我经常关注它,有时候,朋友会叫帮忙做点小应用,我就用RuoYi-Vue-Plus来快速开发。

RuoYi-Vue-Plus来开发项目,稍微正式点的,是需要改一下项目名和包名的,在文档里有详细的教程教我们怎么操作:

1
2
3
4
5
1.随便找个地方新建 org.dromara 包
2.在包上右键选择 refactor -> rename 选择 All Directories
3.使用IDEA全局替换 org.dromara 替换为 com.xxx
4.如有需要 将所有模块名逐一修改即可
5.修改完成后需查看所有common包下模块spi文件是否修改正确

这样有时候还容易替换错,这一套下来也需要花点时间的。所以,我就搞了一个修改包名的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
#!/usr/bin/env pwsh
# ============================================================
# RuoYi-Vue-Plus 包名重命名脚本 (Windows PowerShell)
# 用法: .\rename-package.ps1 -ProjectDir "F:\RuoYi-Vue-Plus" -NewGroupId "com.cicca" -NewArtifactPrefix "cicca" -NewAppName "cicca-attendance"
# ============================================================

param(
[Parameter(Mandatory=$true)]
[string]$ProjectDir,

[Parameter(Mandatory=$true)]
[string]$NewGroupId, # 例如: com.cicca

[Parameter(Mandatory=$true)]
[string]$NewArtifactPrefix, # 例如: cicca (模块前缀, 替换 ruoyi)

[Parameter(Mandatory=$true)]
[string]$NewAppName, # 例如: cicca-attendance (根 artifactId)

[string]$NewAppTitle = "", # 可选: 系统标题, 如 "CICCA考勤系统"

[switch]$DryRun # 仅预览, 不实际修改
)

$ErrorActionPreference = "Stop"

# --- 原始值 ---
$OldGroupId = "org.dromara"
$OldArtifactPrefix = "ruoyi"
$OldPackagePath = "org/dromara"
$NewPackagePath = $NewGroupId -replace '\.', '/'

# 第三方包前缀 (不替换)
$ThirdPartyPrefixes = @(
"org.dromara.warm",
"org.dromara.sms4j",
"org.dromara.x.file.storage"
)

Write-Host "============================================" -ForegroundColor Cyan
Write-Host " RuoYi-Vue-Plus 包名重命名工具" -ForegroundColor Cyan
Write-Host "============================================" -ForegroundColor Cyan
Write-Host "项目目录: $ProjectDir"
Write-Host "旧 GroupId: $OldGroupId"
Write-Host "新 GroupId: $NewGroupId"
Write-Host "旧模块前缀: $OldArtifactPrefix"
Write-Host "新模块前缀: $NewArtifactPrefix"
Write-Host "新应用名: $NewAppName"
Write-Host "DryRun: $DryRun"
Write-Host ""

if (-not (Test-Path $ProjectDir)) {
Write-Error "项目目录不存在: $ProjectDir"
exit 1
}

# ============================================================
# 阶段 0: 去除所有文件的 UTF-8 BOM
# ============================================================
Write-Host "[阶段 0] 去除 UTF-8 BOM ..." -ForegroundColor Yellow
$bomCount = 0
Get-ChildItem -Path $ProjectDir -Recurse -File |
Where-Object { $_.FullName -notlike "*\.git\*" -and $_.FullName -notlike "*\target\*" -and $_.FullName -notlike "*\node_modules\*" } |
ForEach-Object {
$bytes = [System.IO.File]::ReadAllBytes($_.FullName)
if ($bytes.Length -ge 3 -and $bytes[0] -eq 0xEF -and $bytes[1] -eq 0xBB -and $bytes[2] -eq 0xBF) {
if (-not $DryRun) {
$newBytes = $bytes[3..($bytes.Length - 1)]
[System.IO.File]::WriteAllBytes($_.FullName, $newBytes)
}
$bomCount++
}
}
Write-Host " 去除 BOM: $bomCount 个文件" -ForegroundColor Green

# ============================================================
# 阶段 1: 重命名目录 (ruoyi-xxx -> newprefix-xxx)
# ============================================================
Write-Host "[阶段 1] 重命名模块目录 ..." -ForegroundColor Yellow
$dirRenameCount = 0

# 从最深层开始重命名, 避免父目录先改导致子目录路径失效
$dirsToRename = Get-ChildItem -Path $ProjectDir -Recurse -Directory |
Where-Object { $_.FullName -notlike "*\.git\*" -and $_.FullName -notlike "*\target\*" -and $_.Name -like "$OldArtifactPrefix-*" } |
Sort-Object { $_.FullName.Length } -Descending

foreach ($dir in $dirsToRename) {
$newName = $dir.Name -replace "^$OldArtifactPrefix-", "$NewArtifactPrefix-"
$newPath = Join-Path $dir.Parent.FullName $newName
if ($dir.FullName -ne $newPath) {
Write-Host " 目录: $($dir.Name) -> $newName"
if (-not $DryRun) {
Rename-Item -Path $dir.FullName -NewName $newName
}
$dirRenameCount++
}
}
Write-Host " 重命名目录: $dirRenameCount 个" -ForegroundColor Green

# ============================================================
# 阶段 2: 重命名 Java 包目录 (org/dromara -> new/package/path)
# ============================================================
Write-Host "[阶段 2] 重命名 Java 包目录 ..." -ForegroundColor Yellow
$pkgDirCount = 0

# 查找所有 src 下的 org/dromara 目录
$javaPkgDirs = Get-ChildItem -Path $ProjectDir -Recurse -Directory -Filter "dromara" |
Where-Object { $_.FullName -notlike "*\.git\*" -and $_.FullName -notlike "*\target\*" -and $_.Parent.Name -eq "org" } |
Sort-Object { $_.FullName.Length } -Descending

foreach ($dir in $javaPkgDirs) {
$orgDir = $dir.Parent # org 目录
$srcBase = $orgDir.Parent # org 的父目录

# 创建新包目录
$newPkgParts = $NewGroupId -split '\.'
$newPkgDir = $srcBase.FullName
foreach ($part in $newPkgParts) {
$newPkgDir = Join-Path $newPkgDir $part
}

Write-Host " 包目录: $($dir.FullName) -> $newPkgDir"
if (-not $DryRun) {
if (-not (Test-Path $newPkgDir)) {
New-Item -ItemType Directory -Path $newPkgDir -Force | Out-Null
}
# 移动所有子内容
Get-ChildItem -Path $dir.FullName | ForEach-Object {
Move-Item -Path $_.FullName -Destination $newPkgDir -Force
}
# 清理空的旧目录
if ((Get-ChildItem -Path $dir.FullName -Recurse -File).Count -eq 0) {
Remove-Item -Path $orgDir.FullName -Recurse -Force -ErrorAction SilentlyContinue
}
}
$pkgDirCount++
}
Write-Host " 重命名包目录: $pkgDirCount 个" -ForegroundColor Green

# ============================================================
# 阶段 3: 替换文件内容
# ============================================================
Write-Host "[阶段 3] 替换文件内容 ..." -ForegroundColor Yellow
$fileReplaceCount = 0

# 需要处理的文件扩展名
$extensions = @("*.java", "*.xml", "*.yml", "*.yaml", "*.properties", "*.imports",
"*.factories", "*.txt", "*.md", "*.json", "*.gradle", "*.kts",
"*.bat", "*.sh", "*.ps1", "*.vue", "*.ts", "*.js", "*.scss",
"*.css", "*.html", "*.env*", "Dockerfile*")

# 构建替换规则 (顺序很重要)
$replacements = @(
# 1. 保护第三方包: 先用占位符替换
# (在正则替换中处理)

# 2. Java 包名: org.dromara -> new.group.id (排除第三方)
# 3. 模块名: ruoyi-xxx -> newprefix-xxx
# 4. artifactId: ruoyi-vue-plus -> new-app-name
# 5. 目录路径: org/dromara -> new/group/path
)

Get-ChildItem -Path $ProjectDir -Recurse -File -Include $extensions |
Where-Object { $_.FullName -notlike "*\.git\*" -and $_.FullName -notlike "*\target\*" -and $_.FullName -notlike "*\node_modules\*" } |
ForEach-Object {
$filePath = $_.FullName
$content = [System.IO.File]::ReadAllText($filePath, [System.Text.Encoding]::UTF8)
$original = $content

# --- 保护第三方包: 用占位符临时替换 ---
$placeholders = @{}
$i = 0
foreach ($prefix in $ThirdPartyPrefixes) {
$placeholder = "___THIRDPARTY_${i}___"
$placeholders[$placeholder] = $prefix
$content = $content -replace [regex]::Escape($prefix), $placeholder
$i++
}

# --- 执行替换 ---
# Java 包名
$content = $content -replace [regex]::Escape($OldGroupId), $NewGroupId

# 包路径 (目录分隔符)
$content = $content -replace [regex]::Escape($OldPackagePath), $NewPackagePath

# 模块前缀 (ruoyi-xxx -> newprefix-xxx)
$content = $content -replace "\b$OldArtifactPrefix-", "$NewArtifactPrefix-"

# 根 artifactId
$content = $content -replace "$NewArtifactPrefix-vue-plus", $NewAppName

# DromaraApplication -> 新应用类名
$appClassName = ($NewArtifactPrefix.Substring(0,1).ToUpper() + $NewArtifactPrefix.Substring(1)) + "Application"
$servletClassName = ($NewArtifactPrefix.Substring(0,1).ToUpper() + $NewArtifactPrefix.Substring(1)) + "ServletInitializer"
$content = $content -replace "DromaraApplication", $appClassName
$content = $content -replace "DromaraServletInitializer", $servletClassName

# --- 恢复第三方包 ---
foreach ($kv in $placeholders.GetEnumerator()) {
$content = $content -replace [regex]::Escape($kv.Key), $kv.Value
}

# --- 写回文件 ---
if ($content -ne $original) {
if (-not $DryRun) {
[System.IO.File]::WriteAllText($filePath, $content, (New-Object System.Text.UTF8Encoding $false))
}
$fileReplaceCount++
}
}
Write-Host " 替换文件内容: $fileReplaceCount 个文件" -ForegroundColor Green

# ============================================================
# 阶段 4: 重命名 DromaraApplication.java 等文件
# ============================================================
Write-Host "[阶段 4] 重命名启动类文件 ..." -ForegroundColor Yellow
$appClassName = ($NewArtifactPrefix.Substring(0,1).ToUpper() + $NewArtifactPrefix.Substring(1))

$filesToRename = @(
@{ Old = "DromaraApplication.java"; New = "${appClassName}Application.java" },
@{ Old = "DromaraServletInitializer.java"; New = "${appClassName}ServletInitializer.java" }
)

foreach ($fr in $filesToRename) {
$found = Get-ChildItem -Path $ProjectDir -Recurse -File -Filter $fr.Old |
Where-Object { $_.FullName -notlike "*\.git\*" -and $_.FullName -notlike "*\target\*" }
foreach ($f in $found) {
$newPath = Join-Path $f.DirectoryName $fr.New
Write-Host " 文件: $($f.Name) -> $($fr.New)"
if (-not $DryRun) {
Rename-Item -Path $f.FullName -NewName $fr.New
}
}
}

# ============================================================
# 阶段 5: 重命名 .run 配置文件
# ============================================================
Write-Host "[阶段 5] 重命名 .run 配置文件 ..." -ForegroundColor Yellow
$runDir = Join-Path $ProjectDir ".run"
if (Test-Path $runDir) {
Get-ChildItem -Path $runDir -File -Filter "$OldArtifactPrefix-*" | ForEach-Object {
$newName = $_.Name -replace "^$OldArtifactPrefix-", "$NewArtifactPrefix-"
Write-Host " .run: $($_.Name) -> $newName"
if (-not $DryRun) {
Rename-Item -Path $_.FullName -NewName $newName
}
}
}

# ============================================================
# 阶段 6: 清理 target 目录
# ============================================================
Write-Host "[阶段 6] 清理 target 目录 ..." -ForegroundColor Yellow
$targetCount = 0
Get-ChildItem -Path $ProjectDir -Recurse -Directory -Filter "target" |
Where-Object { $_.FullName -notlike "*\.git\*" } |
ForEach-Object {
if (-not $DryRun) {
Remove-Item -Recurse -Force $_.FullName
}
$targetCount++
}
Write-Host " 清理 target: $targetCount 个目录" -ForegroundColor Green

# ============================================================
# 阶段 7: 清理 .idea 缓存 (可选)
# ============================================================
Write-Host "[阶段 7] 清理 IDEA 缓存 ..." -ForegroundColor Yellow
$ideaDir = Join-Path $ProjectDir ".idea"
if (Test-Path $ideaDir) {
$workspaceXml = Join-Path $ideaDir "workspace.xml"
if (Test-Path $workspaceXml) {
if (-not $DryRun) {
Remove-Item -Force $workspaceXml
}
Write-Host " 删除 workspace.xml"
}
}

# ============================================================
Write-Host ""
Write-Host "============================================" -ForegroundColor Cyan
Write-Host " 完成!" -ForegroundColor Cyan
Write-Host "============================================" -ForegroundColor Cyan
Write-Host ""
Write-Host "后续步骤:" -ForegroundColor Yellow
Write-Host " 1. 用 IDEA 打开项目, 等待索引完成"
Write-Host " 2. 执行 mvn clean compile 验证编译"
Write-Host " 3. 检查启动是否正常"
Write-Host ""

这个保存为rename-package.ps1脚本,然后在PowerShell中执行命令

1
.\rename-package.ps1 -ProjectDir "D:\source\RuoYi-Vue-Plus" -NewGroupId "com.biz" -NewArtifactPrefix "biz" -NewAppName "biz-crm"

几秒钟就替换完了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
============================================
RuoYi-Vue-Plus 包名重命名工具
============================================
项目目录: D:\source\RuoYi-Vue-Plus
旧 GroupId: org.dromara
新 GroupId: com.biz
旧模块前缀: ruoyi
新模块前缀: biz
新应用名: biz-crm
DryRun: False

[阶段 0] 去除 UTF-8 BOM ...
去除 BOM: 0 个文件
[阶段 1] 重命名模块目录 ...
目录: ruoyi-common-translation -> biz-common-translation
目录: ruoyi-common-ratelimiter -> biz-common-ratelimiter
目录: ruoyi-common-idempotent -> biz-common-idempotent
目录: ruoyi-common-sensitive -> biz-common-sensitive
目录: ruoyi-common-websocket -> biz-common-websocket
目录: ruoyi-snailjob-server -> biz-snailjob-server
目录: ruoyi-common-security -> biz-common-security
目录: ruoyi-common-satoken -> biz-common-satoken
目录: ruoyi-common-mybatis -> biz-common-mybatis
目录: ruoyi-common-encrypt -> biz-common-encrypt
目录: ruoyi-monitor-admin -> biz-monitor-admin
目录: ruoyi-common-tenant -> biz-common-tenant
目录: ruoyi-common-social -> biz-common-social
目录: ruoyi-common-redis -> biz-common-redis
目录: ruoyi-common-excel -> biz-common-excel
目录: ruoyi-common-core -> biz-common-core
目录: ruoyi-common-mail -> biz-common-mail
目录: ruoyi-common-json -> biz-common-json
目录: ruoyi-common-sse -> biz-common-sse
目录: ruoyi-common-web -> biz-common-web
目录: ruoyi-generator -> biz-generator
目录: ruoyi-common-bom -> biz-common-bom
目录: ruoyi-common-log -> biz-common-log
目录: ruoyi-common-oss -> biz-common-oss
目录: ruoyi-common-job -> biz-common-job
目录: ruoyi-common-sms -> biz-common-sms
目录: ruoyi-common-doc -> biz-common-doc
目录: ruoyi-workflow -> biz-workflow
目录: ruoyi-system -> biz-system
目录: ruoyi-demo -> biz-demo
目录: ruoyi-job -> biz-job
目录: ruoyi-modules -> biz-modules
目录: ruoyi-extend -> biz-extend
目录: ruoyi-common -> biz-common
目录: ruoyi-admin -> biz-admin
重命名目录: 35 个
[阶段 2] 重命名 Java 包目录 ...
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-translation\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-translation\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-ratelimiter\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-ratelimiter\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-idempotent\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-idempotent\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-sensitive\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-sensitive\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-websocket\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-websocket\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-extend\biz-snailjob-server\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-extend\biz-snailjob-server\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-security\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-security\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-satoken\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-satoken\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-encrypt\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-encrypt\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-mybatis\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-mybatis\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-social\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-social\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-tenant\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-tenant\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-extend\biz-monitor-admin\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-extend\biz-monitor-admin\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-redis\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-redis\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-excel\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-excel\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-mail\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-mail\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-core\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-core\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-json\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-json\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-web\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-web\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-log\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-log\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-modules\biz-generator\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-modules\biz-generator\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-oss\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-oss\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-sms\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-sms\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-job\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-job\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-doc\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-doc\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-common\biz-common-sse\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-common\biz-common-sse\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-modules\biz-workflow\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-modules\biz-workflow\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-modules\biz-system\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-modules\biz-system\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-modules\biz-demo\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-modules\biz-demo\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-modules\biz-job\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-modules\biz-job\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-admin\src\main\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-admin\src\main\java\com\biz
包目录: D:\source\RuoYi-Vue-Plus\biz-admin\src\test\java\org\dromara -> D:\source\RuoYi-Vue-Plus\biz-admin\src\test\java\com\biz
重命名包目录: 32 个
[阶段 3] 替换文件内容 ...
替换文件内容: 715 个文件
[阶段 4] 重命名启动类文件 ...
文件: DromaraApplication.java -> BizApplication.java
文件: DromaraServletInitializer.java -> BizServletInitializer.java
[阶段 5] 重命名 .run 配置文件 ...
.run: ruoyi-monitor-admin.run.xml -> biz-monitor-admin.run.xml
.run: ruoyi-server.run.xml -> biz-server.run.xml
.run: ruoyi-snailjob-server.run.xml -> biz-snailjob-server.run.xml
[阶段 6] 清理 target 目录 ...
清理 target: 0 个目录
[阶段 7] 清理 IDEA 缓存 ...

============================================
完成!
============================================

后续步骤:
1. 用 IDEA 打开项目, 等待索引完成
2. 执行 mvn clean compile 验证编译
3. 检查启动是否正常

alt text

试一把,运行得起来不

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
...;D:\tools\dev\ideaIU-2023.3.6.win\lib\idea_rt.jar com.biz.BizApplication
Connected to the target VM, address: '127.0.0.1:59215', transport: 'socket'
Application Version: 5.5.3
Spring Boot Version: 3.5.9
__________ _____.___.__ ____ ____ __________.__
\______ \__ __ ____\__ | |__| \ \ / /_ __ ____ \______ \ | __ __ ______
| _/ | \/ _ \/ | | | ______ \ Y / | \_/ __ \ ______ | ___/ | | | \/ ___/
| | \ | ( <_> )____ | | /_____/ \ /| | /\ ___/ /_____/ | | | |_| | /\___ \
|____|_ /____/ \____// ______|__| \___/ |____/ \___ > |____| |____/____//____ >
\/ \/ \/ \/

2026-02-28 14:34:04 [background-preinit] INFO o.h.validator.internal.util.Version
- HV000001: Hibernate Validator 8.0.3.Final
2026-02-28 14:34:04 [main] INFO com.biz.BizApplication
- Starting BizApplication using Java 17.0.2 with PID 73708 (D:\source\RuoYi-Vue-Plus\biz-admin\target\classes started by userxxx in D:\source\RuoYi-Vue-Plus)
2026-02-28 14:34:04 [main] INFO com.biz.BizApplication
- The following 1 profile is active: "dev"
2026-02-28 14:34:08 [main] INFO io.undertow.servlet
- Initializing Spring embedded WebApplicationContext
2026-02-28 14:34:08 [main] INFO c.b.d.d.DynamicRoutingDataSource
- dynamic-datasource detect P6SPY plugin and enabled it
2026-02-28 14:34:08 [main] INFO com.zaxxer.hikari.HikariDataSource
- master - Starting...
2026-02-28 14:34:08 [main] INFO com.zaxxer.hikari.pool.HikariPool
- master - Added connection com.mysql.cj.jdbc.ConnectionImpl@427c2c96
2026-02-28 14:34:08 [main] INFO com.zaxxer.hikari.HikariDataSource
- master - Start completed.
2026-02-28 14:34:08 [main] INFO c.b.d.d.DynamicRoutingDataSource
- dynamic-datasource - add a datasource named [master] success
2026-02-28 14:34:08 [main] INFO c.b.d.d.DynamicRoutingDataSource
- dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.16
2026-02-28 14:34:10 [main] INFO c.b.common.redis.config.RedisConfig
- 初始化 redis 配置
2026-02-28 14:34:10 [main] INFO org.redisson.Version
- Redisson 3.52.0
2026-02-28 14:34:11 [redisson-netty-1-6] INFO o.r.connection.ConnectionsHolder
- 1 connections initialized for 101.34.179.216/101.34.179.216:16379
2026-02-28 14:34:11 [redisson-netty-1-3] INFO o.r.connection.ConnectionsHolder
- 8 connections initialized for 101.34.179.216/101.34.179.216:16379
2026-02-28 14:34:12 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils
- [FileUtils] [workspace] use user.home as workspace: C:\Users\userxxx/snailJob/worker
2026-02-28 14:34:12 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils
- [FileUtils] [workspace] use user.home as workspace: C:\Users\userxxx/snailJob/worker
2026-02-28 14:34:12 [main] INFO c.a.s.c.j.c.e.b.AbstractScriptExecutor$SnailFileUtils
- [FileUtils] [workspace] use user.home as workspace: C:\Users\userxxx/snailJob/worker
2026-02-28 14:34:12 [main] INFO c.b.common.json.config.JacksonConfig
- 初始化 jackson 配置
____ ____ ___ ____ _ _ ____ _ _
[__ |__| __ | | | |_/ |___ |\ |
___] | | | |__| | \_ |___ | \|
https://sa-token.cc (v1.44.0)
2026-02-28 14:34:13 [main] INFO c.a.s.c.s.SnailJobClientJobCoreAutoConfiguration
- Snail-Job 客户端IP为: 172.20.16.122
2026-02-28 14:34:13 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware
- Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@349d0836

▄ ▄ ▄▄▄▄▄▄ ▄
█ █ █ ▄▄▄ ▄ ▄▄ ▄▄▄▄▄ █ █ ▄▄▄ ▄ ▄
▀ █▀█ █ ▀ █ █▀ ▀ █ █ █ ▄▄▄▄▄ █▄▄▄▄▄ █ █▀ ▀█ ▀▄ ▄ ▄▀
██ ██▀ ▄▀▀▀█ █ █ █ █ █ █ █ █ █▄█▄█
█ █ ▀▄▄▀█ █ █ █ █ █ █▄▄ ▀█▄█▀ █ █

:: Warm-Flow :: (v1.8.4)

2026-02-28 14:34:17 [main] INFO o.d.w.p.modes.sb.config.BeanConfig
- 【warm-flow】,加载完成
2026-02-28 14:34:17 [main] INFO io.undertow
- starting server: Undertow - 2.3.20.Final
2026-02-28 14:34:17 [main] INFO org.xnio
- XNIO version 3.8.16.Final
2026-02-28 14:34:17 [main] INFO org.xnio.nio
- XNIO NIO Implementation Version 3.8.16.Final
2026-02-28 14:34:17 [main] INFO org.jboss.threads
- JBoss Threads version 3.7.0.Final
________ _____ ______ ________ ___ ___ ___
|\ ____\|\ _ \ _ \|\ ____\|\ \ |\ \ |\ \
\ \ \___|\ \ \\\__\ \ \ \ \___|\ \ \\_\ \ \ \ \
\ \_____ \ \ \\|__| \ \ \_____ \ \______ \ __ \ \ \
\|____|\ \ \ \ \ \ \|____|\ \|_____|\ \|\ \\_\ \
____\_\ \ \__\ \ \__\____\_\ \ \ \__\ \________\
|\_________\|__| \|__|\_________\ \|__|\|________|
\|_________| \|_________|
V 3.3.5
2026-02-28 14:34:18 [main] INFO com.biz.BizApplication
- Started BizApplication in 13.725 seconds (process running for 14.738)
2026-02-28 14:34:18 [main] INFO c.b.c.sse.listener.SseTopicListener
- 初始化SSE主题订阅监听器成功
______ _ __ _____ __
.' ____ \ (_)[ | |_ _| [ |
| (___ \_| _ .--. ,--. __ | | | | .--. | |.--.
_.____`. [ `.-. |`'_\ :[ | | | _ | / .'`\ \| '/'`\ \
| \____) | | | | |// | |,| | | | | |__' | \__. || \__/ |
\______.'[___||__]'-;__[___|___] `.____.''.__.'[__;.__.'
:: Snail Job :: (v1.9.0)

2026-02-28 14:34:18 [main] INFO c.a.s.c.c.init.SnailJobStartListener
- snail-job client is preparing to start... v1.9.0
2026-02-28 14:34:18 [main] INFO c.a.s.c.c.r.c.g.SnailJobGrpcClient
- gRPC client started connect to server
2026-02-28 14:34:18 [main] INFO c.a.s.c.c.rpc.server.SnailGrpcServer
- ------> snail-job remoting server start success, grpc = com.aizuda.snailjob.client.common.rpc.server.SnailGrpcServer, port = 28080
2026-02-28 14:34:19 [snail-job-grpc-client-executor-127.0.0.1-0] ERROR c.a.s.c.j.c.r.JobExecutorRegistrar
- Job executors register error requestId:[0] message:[UNAVAILABLE: io exception]
2026-02-28 14:34:19 [main] INFO c.a.s.c.c.init.SnailJobStartListener
- snail-job client started successfully v1.9.0
2026-02-28 14:34:19 [snail-job-grpc-client-executor-127.0.0.1-2] ERROR c.a.s.c.c.handler.ClientRegister
- heartbeat check requestId:[1] message:[UNAVAILABLE: io exception]
Consume Time:5 ms 2026-02-28 14:34:19
Execute SQL:SELECT oss_config_id, config_key, access_key, secret_key, bucket_name, prefix, endpoint, domain, is_https, region, status, ext1, remark, access_policy, create_dept, create_by, create_time, update_by, update_time FROM sys_oss_config

2026-02-28 14:34:19 [main] INFO c.b.s.runner.SystemApplicationRunner
- 初始化OSS配置成功
(♥◠‿◠)ノ゙ biz-crm启动成功 ლ(´ڡ`ლ)゙
2026-02-28 14:34:19 [RMI TCP Connection(6)-172.20.16.122] INFO io.undertow.servlet
- Initializing Spring DispatcherServlet 'dispatcherServlet'

这个脚本,我试过几次,在RuoYi-Vue-Plus能正常用。RuoYi-Cloud-Plus也可以用这个脚本,但是我没验证功能,只是能看到包名那些已经修改了,如果有需要的可以试一下,看有没有什么问题。

搞了个RuoYi Plus修改包名的脚本,RuoYi-Vue-Plus/RuoYi-Cloud-Plus包名秒替换

https://blogs.52fx.biz/posts/732919295.html

作者

eyiadmin

发布于

2026-02-28

更新于

2026-02-28

许可协议

评论