优化Java安装逻辑

This commit is contained in:
yxsj245
2025-10-30 10:15:12 +08:00
parent ca59c8fb6f
commit 95451d11aa
3 changed files with 73 additions and 1 deletions

View File

@@ -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',

View File

@@ -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) {

View File

@@ -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'