install4j 13.02026-06-03변경 로그
이제 install4j 13에서 Windows MSIX 미디어 파일을 빌드할 수 있습니다.
MSIX는 Windows 애플리케이션을 위한 최신 패키징 형식입니다. MSIX는 Microsoft Store의 기본 패키지 형식이기도 하며 Microsoft Intune과 같은 관리형 배포 도구와 연동됩니다. MSIX 패키지는 Windows가 직접 완전히 되돌릴 수 있는 방식으로 설치하고 제거하며, 관리자 권한이 없는 표준 사용자도 설치할 수 있습니다.
MSIX는 MSI와 완전히 별개입니다. MSI의 경우 install4j는 install4j가 생성한 인스톨러를 감싸는 래퍼만 생성합니다. 화면, 액션, 스크립트 같은 install4j 개념은 MSI 모델에 매끄럽게 매핑될 수 없기 때문입니다. 반면 MSIX는 선언적 방식이므로 서비스, 파일 연결, 시작 작업과 같은 개념이 매니페스트 항목으로 직접 변환됩니다.
MSIX 패키지는 .msix 파일을 두 번 클릭하거나 PowerShell에서 Add-AppxPackage를 실행하여 설치하며, 설치 시점에 install4j 인스톨러 마법사는 실행되지 않습니다.
이 미디어 파일 유형을 배포하려면 코드 서명이 필수라는 점에 유의하십시오. 서명되지 않은 MSIX 패키지는 Windows의 개발 모드에서만 설치할 수 있기 때문입니다.
MSIX 관련 설정은 모두 미디어 파일 마법사의 전용 하위 단계에서 구성합니다. "MSIX 옵션" 단계에서는 패키지 ID 이름, 패키지 버전, 테스트된 최소 및 최대 Windows 버전을 설정합니다. 또한 런처를 로그인 런처로 지정할 수 있습니다. 로그인 런처는 사용자가 로그온할 때 자동으로 실행되며, 사용자는 나중에 Windows의 "시작 앱" 설정에서 이를 비활성화할 수 있습니다.
패키지 아이콘은 "패키지 아이콘" 하위 단계에서 사용자 지정합니다. 이 아이콘은 Windows 설치 대화 상자에 표시됩니다. 배경색을 지정하면 투명도가 있는 아이콘에 불투명한 타일이 적용됩니다. 시작 메뉴와 작업 표시줄에는 런처 마법사에서 구성한 아이콘이 사용됩니다.
서비스는 생성된 서비스 런처에서 선택되며 매니페스트를 통해 Windows 서비스로 등록됩니다. 시작 유형과 서비스 계정은 "서비스" 하위 단계에서 런처별로 구성합니다.
파일 연결은 하나 이상의 파일 확장자를 런처에 바인딩하여, 해당 파일을 두 번 클릭하면 애플리케이션이 열리도록 합니다. 연결마다 설명, 선택 사항인 MIME 유형, 사용자 지정 아이콘을 구성할 수 있습니다.
URL 스킴 핸들러도 같은 방식으로 선언되며, myapp://와 같은 사용자 지정 스킴이 런처로 라우팅됩니다. 두 기능 모두 "파일 연결 및 URL 핸들러" 하위 단계에서 설정합니다.
App URI 핸들러를 사용하면 런처가 특정 호스트에 대한 일반 https:// 링크를 처리할 수 있습니다. 일치하는 링크가 열리면 Windows는 브라우저 대신 애플리케이션으로 라우팅할 수 있습니다. 사이트의 링크는 해당 사이트의 동의 없이는 등록할 수 없으므로, 호스트는 이 패키지를 나열하는 생성된 windows-app-web-link.json 파일을 /.well-known/ 아래에 게시해야 합니다.
앱 실행 별칭(app execution aliases)은 선택한 런처를 사용자의 PATH에서 실행 파일 이름으로 노출하므로, 명령 프롬프트나 실행 대화 상자에서 이름으로 호출할 수 있습니다. 별칭은 패키지 범위로 한정되며 패키지와 함께 제거됩니다. 별칭은 "PATH의 애플리케이션" 하위 단계에서 선택합니다.
자동 업데이트의 경우 MSIX 패키지는 install4j 업데이트 아키텍처가 아닌 Windows에 내장된 App Installer 메커니즘에 의존합니다. 필요한 .appinstaller 파일은 install4j가 생성하며, 이후 Windows가 호스팅 URL을 주기적으로 확인하여 새 패키지 버전이 백그라운드에서 설치되도록 합니다. 호스팅 URL과 확인 빈도, 사용자에게 확인 메시지를 표시할지 여부 등 업데이트 동작은 "자동 업데이트" 하위 단계에서 구성합니다.
프로젝트에 구성된 모든 언어는 매니페스트에 자동으로 선언됩니다.
소프트웨어 개발은 빠르게 에이전트 중심(agentic)으로 변하고 있으며, 이제 일상적인 개발 작업의 상당 부분이 AI 코딩 어시스턴트를 통해 진행됩니다. install4j 13은 인스톨러 작성을 이러한 워크플로우에 통합합니다. 코딩 어시스턴트가 install4j 프로젝트 파일을 읽고, 편집하고, 생성할 수 있는 AI 에이전트 스킬이 함께 제공되므로, 변경 사항을 자연어로 설명해 프로젝트에 바로 적용할 수 있습니다. 덕분에 인스톨러를 구축하고 유지 관리하는 진입 장벽이 낮아지고, 프로젝트 파일은 에이전트가 작업하는 코드베이스의 또 한 부분이 됩니다.
스킬은 자체 완결형 지식 패키지입니다. 여기에는 프로젝트 파일 스키마, 사용 가능한 모든 빈 클래스의 카탈로그(화면, 액션, 폼 컴포넌트, 화면 및 위젯 스타일), 실행 가능한 샘플 프로젝트, install4j API, 전체 문서가 일반적인 워크플로우에 대한 지침과 함께 AI 친화적인 형식으로 담겨 있습니다. 이를 통해 어시스턴트는 정확한 정보를 근거로 검증할 수 있으며 추측에 의존할 필요가 없습니다.
호환되는 어시스턴트는 install4j와 관련된 작업을 요청받으면 스킬을 스스로 로드합니다. 예를 들어 hello 샘플에 이미 설치된 버전을 감지하고 두 번째 설치 전에 확인 메시지를 표시하는 시작 검사를 추가하라고 요청하면, 어시스턴트가 적절한 레지스트리 API를 찾아 새 액션을 프로젝트 파일에 삽입하고 프로젝트가 여전히 컴파일되는지 확인합니다.
스킬을 설치하려면 도구 모음에서 "AI 스킬 설치" 버튼을 클릭합니다. 대화 상자에서 AI 에이전트의 스킬 디렉터리에 스킬을 저장할 수 있습니다. 지원되는 에이전트로는 Claude Code, Claude Desktop, Cursor, Codex CLI, Gemini CLI, OpenCode, Junie가 있습니다.
스킬은 전역으로 설치해 컴퓨터의 모든 프로젝트에서 사용할 수 있게 하거나, 프로젝트별로 설치해 에이전트가 해당 프로젝트에서 실행될 때만 사용할 수 있게 할 수 있습니다. 스킬은 정확한 install4j 버전을 기준으로 생성되므로 스키마, 빈 카탈로그, 샘플이 항상 설치된 컴파일러와 일치합니다.
install4j 13에서는 install4j 프로젝트 파일을 위한 XML 스키마가 도입되었습니다. 이 스키마(install4j.xsd)는 install4j 설치 디렉터리의 resource 디렉터리에 포함되어 있으며, .install4j 파일 형식의 모든 요소, 속성, 열거형 값을 인라인 설명과 함께 문서화합니다. 230개 이상의 요소, 450개의 속성, 150개의 열거형 값을 다루고, 이를 설명하는 약 600개의 문서 항목이 포함된 포괄적인 스키마입니다.
XML 편집기에서 .install4j 파일에 이 스키마를 연결하면 편집하는 동안 자동 완성, 인라인 문서, 유효성 검사 기능을 사용할 수 있습니다. 또한 이제 명령줄에서 컴파일할 때마다 프로젝트 파일이 스키마에 대해 유효성이 검사되므로 구조적 오류를 정확한 메시지와 함께 조기에 잡아낼 수 있습니다.
새로운 install4j Test API를 사용하면 테스트 JVM 내부에서 GUI 모드의 인스톨러 UI를 구동하는 자동화된 엔드 투 엔드 테스트를 작성할 수 있습니다. 이 API는 특정 프레임워크에 종속되지 않으므로 JUnit, TestNG, Spock 또는 일반 main 메서드에서 사용할 수 있습니다.
세션은 세션 빌더 중 하나로 시작합니다. 생성된 인스톨러를 테스트하려면 InstallerSessionBuilder.forMediaFile(...)를, 언인스톨러를 테스트하려면 UninstallerSessionBuilder.forInstallation(...)를, 업데이트 다운로더와 같은 사용자 지정 인스톨러 애플리케이션에는 InstallerApplicationSessionBuilder.forInstallation(...)를 사용합니다. 빌더 옵션에는 타임아웃, 추가 명령줄 인수, 시스템 속성, 작업 디렉터리, 로그 파일, 그리고 브레이크포인트로 쉽게 디버깅할 수 있도록 인스톨러를 프로세스 내에서 실행하는 디버그 모드가 있습니다.
세션 내에서는 ID로 화면을 기다리고, 다음, 이전, 취소, 마침 버튼으로 탐색하고, 폼 컴포넌트와 대화 상자에 대해 강력한 형식의 핸들로 상호 작용하며, 마지막으로 인스톨러 변수, 설치 디렉터리, 로그, 종료 코드를 검증합니다:
InstallerSession session = InstallerSessionBuilder
.forMediaFile(new File("media/myApp_windows-x64.exe"))
.installationDirectory(targetDirectory)
.start();
session.waitForScreenId("welcome").nextScreen();
// Accept the license, then fill in a custom form screen
session.currentScreen().checkBox("acceptCheckBox").setSelected(true);
session.currentScreen().nextScreen();
session.currentScreen().textField("port").setText("8443");
session.currentScreen().nextScreen();
// Modal dialogs can be handled when they appear
session.alert().clickYes();
session.currentScreen().finish();
// Verify the outcome after the installer has exited
int exitCode = session.awaitExit(Duration.ofMinutes(2));
assertEquals(0, exitCode);
Kotlin 사용자를 위해 API를 더 관용적으로 사용할 수 있도록 확장 함수가 포함되어 있습니다. useSession { } 블록은 세션을 시작하고 자동으로 닫으며, onScreen과 onAlert 같은 헬퍼는 화면이나 대화 상자에서 코드 블록을 실행하고, session["name"] 접근자는 인스톨러 변수를 읽습니다:
InstallerSessionBuilder
.forMediaFile(File("media/myApp_windows-x64.exe"))
.useSession {
onScreen("welcome") { nextScreen() }
onCurrentScreen {
checkBox("acceptCheckBox").setSelected(true)
nextScreen()
}
onAlert { clickYes() }
onCurrentScreen { finish() }
awaitExit()
}
Test API는 com.install4j:install4j-test로 Maven Central에 게시되며, install4j 설치 디렉터리의 resource 디렉터리에 install4j-test.jar로도 함께 제공됩니다.
이러한 GUI 테스트는 CI에서 헤드리스로 실행할 수도 있습니다. GitHub Actions 러너처럼 디스플레이가 없는 Linux에서는 인스톨러 하위 프로세스가 자동으로 xvfb-run과 가벼운 창 관리자로 감싸져, 인스톨러가 가상 프레임버퍼에 렌더링되고 물리적인 화면 없이 테스트가 실행됩니다. 컴퓨터에 필요한 것은 xvfb-run과 지원되는 창 관리자(metacity, mutter, openbox, fluxbox, marco) 중 하나뿐입니다.
콘솔 모드를 위해 고급 터미널 UI가 추가되었습니다. 콘솔 모드는 그래픽 디스플레이가 없는 환경에서 install4j 인스톨러가 실행되는 방식입니다. 이전 버전의 install4j는 단순 콘솔 모드만 지원했습니다.
인스톨러가 Java 25 이상에서 ANSI를 지원하는 터미널로 실행되면 콘솔 모드는 이제 현대적인 대화형 UI를 렌더링합니다:
-
색상이 적용된 출력으로 성공 및 오류 메시지가 한눈에 들어옵니다.
-
백분율이 표시되는
실시간 진행 표시줄: 상태 및 세부 행이 스크롤되어 사라지지 않고 제자리에서 업데이트됩니다. 긴 파일 경로는 가운데를 줄여 표시되므로 경로의 앞부분과 끝부분이 계속 보입니다.
-
소요 시간을 알 수 없는 작업을 위한
스피너.
-
화살표 키로 탐색하는
단일 선택 목록: 옵션 메뉴와 예/아니요, 확인/취소 확인에 사용됩니다.
-
-
텍스트 및 마스킹된 비밀번호 입력,
탭 완성이 지원되는 파일 및 디렉터리 입력 프롬프트.
-
라이선스 계약과 같은 긴 텍스트를 위한
내장 페이저: 사용자가 끝까지 스크롤하도록 요구할 수도 있습니다.
고급 렌더러는 이전 Java 버전에서 실행되거나 충분한 기능을 갖춘 터미널이 없는 경우, 예를 들어 출력이 파일로 리디렉션되거나 다른 프로세스로 파이프되는 경우 자동으로 단순 콘솔로 폴백합니다. 인스톨러에 -J-Dinstall4j.plainConsole=true를 전달하면 단순 렌더러를 강제로 사용할 수 있습니다.
"레이블" 및 "키-값 쌍" 폼 컴포넌트에 새로운 "파일 경로 말줄임" 속성이 추가되었습니다. 레이블에 사용 가능한 가로 공간에 맞지 않는 파일 경로가 포함된 경우 경로의 내부 구성 요소가 줄임표로 대체되어 경로의 앞부분과 끝부분이 계속 표시됩니다.
install4j IDE는 이제 완전한 크기 조절을 지원합니다. 일반 설정에서 배율 인수를 백분율로 설정하거나 원하는 크기의 사용자 지정 UI 글꼴을 설정하면 UI가 그에 맞게 확대/축소됩니다.
이 기능 덕분에 이제 install4j IDE를 모든 OpenJDK 변형 및 모든 HiDPI 해상도의 Linux에서 실행할 수 있습니다. 이전에는 HiDPI 해상도의 Linux에서 JetBrains 런타임만 지원되었습니다.
새로운 사용자 홈 런처 변수가 추가되었습니다. 다른 ${launcher:...} 변수와 마찬가지로 런처가 시작할 때 런처 자체에 의해 확장되며(Linux에서는 이제 .vmoptions 파일에서도 확장됨) 현재 사용자의 홈 디렉터리로 확인됩니다.
예를 들어 VM 매개변수나 인수가 사용자별 구성 디렉터리를 가리키도록 하는 데 유용합니다.
JEP 512의 새로운 main 메서드에 대한 지원이 추가되었습니다. Java 25에서 확정된 JEP 512("Compact Source Files and Instance Main Methods")는 main 메서드를 인스턴스 메서드로 선언하고 String[] 매개변수를 생략할 수 있게 해줍니다.
이제 런처는 기존의 public static void main(String[] args) 외에도, 진입점이 예컨대 인스턴스 void main() 메서드인 클래스를 가리킬 수 있습니다.