fix(installer): 자바 못 찾을 때(ENOENT) "바닐라 먼저 실행" 안내 + JDK 추가 탐색
원인: findJavaExecutable 이 JAVA_HOME → .minecraft/runtime(런처 번들 JRE, 바닐라를 한 번 실행해야 생김) → 폴백 "java.exe" 순이라, 바닐라 미실행 + 시스템 java 없음이면 fabric-installer 실행에서 spawn java.exe ENOENT 로 실패. - findJavaExecutable 에 설치기 자동설치 JDK(.mc_custom/jdk) 와 C:\Program Files\Java 탐색을 추가해 불필요한 실패를 줄인다(fabric 실행엔 아무 자바나 됨). - 그래도 자바가 전혀 없어 ENOENT 면, "먼저 [버전] 바닐라를 한 번 실행해 자바 런타임을 받은 뒤 다시 시도" 안내 메시지로 바꿔 던진다. 0.4.24→0.4.25. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -208,6 +208,7 @@
|
||||
"jdkBusy": "이미 JDK 설치가 진행 중입니다.",
|
||||
"javaExeMissing": "설치 후 java 실행 파일을 찾지 못했습니다: {{path}}",
|
||||
"javaSpawnFailed": "Java 실행 실패: {{message}}",
|
||||
"javaNotFoundRunVanilla": "자바를 찾지 못해 설치를 진행할 수 없습니다. 먼저 마인크래프트 런처에서 [{{version}}] 바닐라를 한 번 실행해 자바 런타임을 받은 다음, 이 설치기를 다시 시도해 주세요.",
|
||||
"fabricInstallerExit": "fabric-installer 종료 코드 {{code}}{{detail}}",
|
||||
"fabricLoaderRequired": "Fabric 로더 버전이 음악퀴즈에 지정되지 않았습니다. 관리 사이트에서 platform.loaderVersion 을 설정해 주세요.",
|
||||
"fabricInstallerListEmpty": "Fabric installer 목록을 받지 못했습니다.",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "minecraft-music-quiz-installer",
|
||||
"version": "0.4.24",
|
||||
"version": "0.4.25",
|
||||
"description": "마인크래프트 음악퀴즈 간편설치기 + 관리 사이트",
|
||||
"main": "dist/installer/main.js",
|
||||
"scripts": {
|
||||
|
||||
@@ -1518,7 +1518,17 @@ async function installFabricLoader(pack: PackDefinition, customRoot: string): Pr
|
||||
'-noprofile'
|
||||
]
|
||||
sendLog(t('log.fabricInstallStart', { mc: pack.mcVersion, loader: loaderVersion, dir: mcRoot }))
|
||||
await runJavaProcess(javaCmd, args)
|
||||
try {
|
||||
await runJavaProcess(javaCmd, args)
|
||||
} catch (err) {
|
||||
// 자바를 못 찾아 spawn ENOENT 면, 대개 바닐라를 한 번도 실행하지 않아 런처 자바 런타임
|
||||
// (.minecraft/runtime)이 없고 다른 자바도 없는 경우다. 해당 버전으로 마인크래프트를 먼저
|
||||
// 실행하라고 안내한다.
|
||||
if (/ENOENT/i.test((err as Error).message)) {
|
||||
throw new Error(t('errors.javaNotFoundRunVanilla', { version: pack.mcVersion }))
|
||||
}
|
||||
throw err
|
||||
}
|
||||
sendLog(t('log.fabricInstallDone'))
|
||||
}
|
||||
|
||||
@@ -1570,7 +1580,16 @@ async function findJavaExecutable(): Promise<string> {
|
||||
// skip
|
||||
}
|
||||
|
||||
// 3) PATH 폴백.
|
||||
// 3) 설치기가 자동 설치한 JDK(.mc_custom/jdk) 또는 시스템 JDK(C:\Program Files\Java).
|
||||
// fabric-installer 실행에는 아무 자바나 되므로(버전 무관) 있으면 그대로 쓴다.
|
||||
for (const base of [path.join(getAppDataDir(), getMcCustomDirName(), 'jdk'), 'C:\\Program Files\\Java']) {
|
||||
for (const home of jdkHomesUnder(base)) {
|
||||
const exe = path.join(home, 'bin', javaName)
|
||||
if (fs.existsSync(exe)) return exe
|
||||
}
|
||||
}
|
||||
|
||||
// 4) PATH 폴백.
|
||||
return javaName
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user