From 95451d11aa2b58d035f675e1e9c52d2178a43d0e Mon Sep 17 00:00:00 2001 From: yxsj245 <17737475682@163.com> Date: Thu, 30 Oct 2025 10:15:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96Java=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pages/EnvironmentManagerPage.tsx | 7 +++ server/src/modules/environment/javaManager.ts | 63 ++++++++++++++++++- server/src/routes/environment.ts | 4 ++ 3 files changed, 73 insertions(+), 1 deletion(-) diff --git a/client/src/pages/EnvironmentManagerPage.tsx b/client/src/pages/EnvironmentManagerPage.tsx index 732a17a..0942ba8 100644 --- a/client/src/pages/EnvironmentManagerPage.tsx +++ b/client/src/pages/EnvironmentManagerPage.tsx @@ -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', diff --git a/server/src/modules/environment/javaManager.ts b/server/src/modules/environment/javaManager.ts index 609941a..d770da7 100644 --- a/server/src/modules/environment/javaManager.ts +++ b/server/src/modules/environment/javaManager.ts @@ -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 { + const platform = os.platform() + + // 只在Linux/Unix系统上设置权限 + if (platform !== 'linux' && platform !== 'darwin') { + return + } + + logger.info(`正在设置可执行权限: ${versionDir}`) + + try { + // 递归查找所有bin目录 + const findBinDirs = async (dir: string): Promise => { + 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) { diff --git a/server/src/routes/environment.ts b/server/src/routes/environment.ts index 30cd005..f28fb96 100644 --- a/server/src/routes/environment.ts +++ b/server/src/routes/environment.ts @@ -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'