feat(server): 사이트에서 권장 JDK 선택 + 설치기 권장 JDK 우선 탐색
- pack 에 recommendedJdk 추가(shared/types, store 정규화, 기본 25, 허용목록 [8,11,17,21,25]). 사이트 편집기에 JDK 버전 드롭다운 추가(직접 입력 X). - 설치기 JDK 탐색 순서 변경: ① 권장 JDK 자동설치 위치(temurin-<권장>) 우선 → ② 없으면 컴퓨터 JDK(JAVA_HOME/Program Files, 권장 버전 이상만 인정). - 자동 설치/버전 검증도 pack 의 권장 버전을 사용(하드코딩 25 제거). - 렌더러에 권장 JDK 표시, 관련 안내/문서 갱신. 버전 0.4.5→0.4.6. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -593,10 +593,17 @@ function renderSubStep31(host, back, done) {
|
||||
}
|
||||
|
||||
function renderSubStep32(host, back, done) {
|
||||
// 선택한 음악퀴즈(pack)의 권장 JDK. 설치기는 이 버전을 우선 찾고/설치한다.
|
||||
var selPack = (state.packs && state.packs.find)
|
||||
? state.packs.find(function (p) { return p.key === state.selectedPackKey })
|
||||
: null
|
||||
var recommendedJdk = (selPack && selPack.pack && selPack.pack.recommendedJdk) ? selPack.pack.recommendedJdk : 25
|
||||
|
||||
host.innerHTML =
|
||||
'<h3>' + tt('step3.sub32.heading') + '</h3>' +
|
||||
'<p class="formMessage">' + tt('step3.sub32.description') + '</p>' +
|
||||
'<div class="fieldset"><label><input id="jdkPath" type="text" placeholder="C:\\Program Files\\Java\\jdk-25" value="' + (state.serverInstall.jdk || '') + '" /></label>' +
|
||||
'<p class="formMessage"><strong>' + tt('step3.sub32.recommended', { major: recommendedJdk }) + '</strong></p>' +
|
||||
'<div class="fieldset"><label><input id="jdkPath" type="text" placeholder="C:\\Program Files\\Java\\jdk-' + recommendedJdk + '" value="' + (state.serverInstall.jdk || '') + '" /></label>' +
|
||||
'<button class="secondaryBtn" id="pickJdk">' + tt('step3.sub32.pickFolder') + '</button>' +
|
||||
'<button class="secondaryBtn" id="auto">' + tt('step3.sub32.auto') + '</button>' +
|
||||
'<button class="secondaryBtn" id="install">' + tt('step3.sub32.install') + '</button></div>' +
|
||||
@@ -633,14 +640,16 @@ function renderSubStep32(host, back, done) {
|
||||
|
||||
autoBtn.addEventListener('click', async function () {
|
||||
if (installing) return
|
||||
var detect = await installerApi.detectJdk()
|
||||
var detect = await installerApi.detectJdk(recommendedJdk)
|
||||
if (detect.found) {
|
||||
input.value = detect.path
|
||||
msg.textContent = tt('step3.sub32.found', { path: detect.path })
|
||||
msg.textContent = detect.source === 'recommended'
|
||||
? tt('step3.sub32.foundRecommended', { path: detect.path, major: recommendedJdk })
|
||||
: tt('step3.sub32.found', { path: detect.path })
|
||||
msg.classList.remove('error')
|
||||
msg.classList.add('success')
|
||||
} else {
|
||||
msg.textContent = tt('step3.sub32.notFound')
|
||||
msg.textContent = tt('step3.sub32.notFound', { major: recommendedJdk })
|
||||
msg.classList.remove('success')
|
||||
msg.classList.add('error')
|
||||
}
|
||||
@@ -662,7 +671,7 @@ function renderSubStep32(host, back, done) {
|
||||
msg.classList.remove('success', 'error')
|
||||
msg.textContent = tt('step3.sub32.downloading')
|
||||
try {
|
||||
var result = await installerApi.installJdk()
|
||||
var result = await installerApi.installJdk(recommendedJdk)
|
||||
if (result.ok && result.path) {
|
||||
input.value = result.path
|
||||
state.serverInstall.jdk = result.path
|
||||
@@ -700,11 +709,11 @@ function renderSubStep32(host, back, done) {
|
||||
msg.classList.remove('success', 'error')
|
||||
msg.textContent = tt('step3.sub32.verifying')
|
||||
try {
|
||||
var v = await installerApi.verifyJdk(val)
|
||||
var v = await installerApi.verifyJdk(val, recommendedJdk)
|
||||
if (!v || !v.ok) {
|
||||
msg.classList.add('error')
|
||||
msg.textContent = (v && v.major)
|
||||
? tt('step3.sub32.versionTooLow', { major: v.major, required: (v && v.required) || 25 })
|
||||
? tt('step3.sub32.versionTooLow', { major: v.major, required: (v && v.required) || recommendedJdk })
|
||||
: tt('step3.sub32.versionUnknown')
|
||||
nextBtn.disabled = false
|
||||
return
|
||||
@@ -720,13 +729,15 @@ function renderSubStep32(host, back, done) {
|
||||
done()
|
||||
})
|
||||
;(async function () {
|
||||
var detect = await installerApi.detectJdk()
|
||||
var detect = await installerApi.detectJdk(recommendedJdk)
|
||||
if (detect.found && !input.value) {
|
||||
input.value = detect.path
|
||||
msg.textContent = tt('step3.sub32.autoDetected', { path: detect.path })
|
||||
msg.textContent = detect.source === 'recommended'
|
||||
? tt('step3.sub32.foundRecommended', { path: detect.path, major: recommendedJdk })
|
||||
: tt('step3.sub32.autoDetected', { path: detect.path })
|
||||
msg.classList.add('success')
|
||||
} else if (!detect.found) {
|
||||
msg.textContent = tt('step3.sub32.notFoundHint')
|
||||
msg.textContent = tt('step3.sub32.notFoundHint', { major: recommendedJdk })
|
||||
}
|
||||
})()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user