mirror of
https://github.com/GSManagerXZ/GameServerManager.git
synced 2026-06-10 01:44:11 +08:00
优化Java安装逻辑
This commit is contained in:
@@ -135,6 +135,13 @@ const EnvironmentManagerPage: React.FC = () => {
|
||||
windows: 'https://download.java.net/openjdk/jdk8u44/ri/openjdk-8u44-windows-i586.zip',
|
||||
linux: 'https://download.java.net/openjdk/jdk8u44/ri/openjdk-8u44-linux-x64.tar.gz'
|
||||
},
|
||||
{
|
||||
version: 'Java 11',
|
||||
key: 'java11',
|
||||
description: 'Java 11 (OpenJDK 11.0.0.2)',
|
||||
windows: 'https://download.java.net/openjdk/jdk11.0.0.2/ri/openjdk-11.0.0.2_windows-x64.zip',
|
||||
linux: 'https://download.java.net/openjdk/jdk11.0.0.2/ri/openjdk-11.0.0.2_linux-x64.tar.gz'
|
||||
},
|
||||
{
|
||||
version: 'Java 17',
|
||||
key: 'java17',
|
||||
|
||||
@@ -84,7 +84,7 @@ export class JavaManager {
|
||||
await this.ensureInstallDir()
|
||||
|
||||
const platform = os.platform()
|
||||
const javaVersions = ['java8', 'java17', 'java21']
|
||||
const javaVersions = ['java8', 'java11', 'java17', 'java21']
|
||||
const environments: JavaEnvironment[] = []
|
||||
|
||||
for (const version of javaVersions) {
|
||||
@@ -191,6 +191,64 @@ export class JavaManager {
|
||||
logger.info(`文件解压完成: ${fileName}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置Java可执行文件权限 (Linux)
|
||||
*/
|
||||
private async setExecutablePermissions(versionDir: string): Promise<void> {
|
||||
const platform = os.platform()
|
||||
|
||||
// 只在Linux/Unix系统上设置权限
|
||||
if (platform !== 'linux' && platform !== 'darwin') {
|
||||
return
|
||||
}
|
||||
|
||||
logger.info(`正在设置可执行权限: ${versionDir}`)
|
||||
|
||||
try {
|
||||
// 递归查找所有bin目录
|
||||
const findBinDirs = async (dir: string): Promise<string[]> => {
|
||||
const binDirs: string[] = []
|
||||
const entries = await fs.readdir(dir, { withFileTypes: true })
|
||||
|
||||
for (const entry of entries) {
|
||||
const fullPath = path.join(dir, entry.name)
|
||||
if (entry.isDirectory()) {
|
||||
if (entry.name === 'bin') {
|
||||
binDirs.push(fullPath)
|
||||
}
|
||||
// 递归查找子目录
|
||||
const subBinDirs = await findBinDirs(fullPath)
|
||||
binDirs.push(...subBinDirs)
|
||||
}
|
||||
}
|
||||
|
||||
return binDirs
|
||||
}
|
||||
|
||||
const binDirs = await findBinDirs(versionDir)
|
||||
|
||||
// 为每个bin目录中的文件设置可执行权限
|
||||
for (const binDir of binDirs) {
|
||||
const files = await fs.readdir(binDir)
|
||||
for (const file of files) {
|
||||
const filePath = path.join(binDir, file)
|
||||
const stat = await fs.stat(filePath)
|
||||
|
||||
if (stat.isFile()) {
|
||||
// 设置为 755 权限 (rwxr-xr-x)
|
||||
await fs.chmod(filePath, 0o755)
|
||||
logger.info(`设置可执行权限: ${filePath}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
logger.info(`可执行权限设置完成`)
|
||||
} catch (error) {
|
||||
logger.warn(`设置可执行权限失败 (非致命错误):`, error)
|
||||
// 不抛出错误,因为这不是致命问题
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装Java环境
|
||||
*/
|
||||
@@ -230,6 +288,9 @@ export class JavaManager {
|
||||
// 删除下载的压缩文件
|
||||
await fs.remove(downloadPath)
|
||||
|
||||
// Linux系统下设置可执行权限
|
||||
await this.setExecutablePermissions(versionDir)
|
||||
|
||||
// 验证安装
|
||||
const javaExecutable = await this.findJavaExecutable(versionDir)
|
||||
if (!javaExecutable) {
|
||||
|
||||
@@ -104,6 +104,10 @@ function getSponsorDownloadUrl(version: string, platform: string): string {
|
||||
windows: 'openjdk-8u44-windows-i586.zip',
|
||||
linux: 'openjdk-8u44-linux-x64.tar.gz'
|
||||
},
|
||||
java11: {
|
||||
windows: 'openjdk-11.0.0.2_windows-x64.zip',
|
||||
linux: 'openjdk-11.0.0.2_linux-x64.tar.gz'
|
||||
},
|
||||
java17: {
|
||||
windows: 'openjdk-17.0.0.1+2_windows-x64_bin.zip',
|
||||
linux: 'openjdk-17.0.0.1+2_linux-x64_bin.tar.gz'
|
||||
|
||||
Reference in New Issue
Block a user