TL;DR
- Jrs는 단일 모듈 자바 프로젝트를 대상으로
jrs.toml하나에서 빌드·테스트·실행·패키징을 처리하는 Rust 기반 JVM 빌드 도구임. - Kotlin, Scala, Groovy를 자바와 함께 컴파일하며, 의존성 해결 결과와 체크섬을
jrs.lock에 고정하고 오프라인 빌드를 지원함. - JUnit 계열·Spock·Kotest·ScalaTest·MUnit 테스트와 JUnit XML 보고서·JaCoCo 커버리지, 실행 감시 및 작업 훅을 제공함.
- 일반·이식형·팻 JAR, 축소된
jlink런타임,jpackage네이티브 설치 프로그램을 만들며 Maven·Gradle 프로젝트의 매니페스트 변환도 지원함. - 실험 단계이며 Maven·Gradle 대체재가 아니고, 플러그인 시스템·빌드 DSL·멀티모듈 리액터 없이 기능 범위를 의도적으로 제한함.
개요
- Jrs는 Rust로 작성된 JVM 빌드 시스템으로,
jrs.toml하나에서 자바 프로젝트를 빌드·테스트·실행·패키징함. - Kotlin, Scala, Groovy도 자바와 나란히 컴파일하며, 작은 매니페스트와 커밋하는 잠금 파일, 단일 바이너리로 구성되고 별도 빌드 스크립트를 작성하지 않음.
상태
- Jrs는 실험 단계이며 Maven이나 Gradle의 대체재가 아님.
- 단일 모듈 프로젝트를 빌드하고 두 도구의 기능 중 의도적으로 좁은 범위만 구현함. 플러그인 시스템, 빌드 DSL, 멀티모듈 리액터는 제공하지 않음.
- 프로덕션 빌드에 도입하기 전에 자체 요구사항에 맞는지 평가해야 함.
- 로드맵에는 알려진 미지원 항목이, 명세에는 설계 근거가 정리되어 있음.
매니페스트 하나, 빌드 스크립트 없음
- 프로젝트 구성은
jrs.toml과 소스 트리로 이뤄짐. 의존성 해결 결과는jrs.lock에 기록되며 이 파일은 저장소에 커밋함. target/아래 항목은 모두 삭제 후 다시 빌드할 수 있는 임시 산출물임.- 매니페스트에는 프로젝트 이름·버전·메인 클래스, 자바 소스 버전과
javac인자, 선택적 Kotlin 버전, 일반 의존성과 테스트 전용 의존성을 지정함. - 예시 의존성은
com.google.guava:guava버전33.0.0-jre와 테스트 클래스패스 전용org.junit.jupiter:junit-jupiter버전5.10.2임. - 예시 프로젝트 구조는
jrs.toml, 커밋할jrs.lock,src/main/java/,src/main/kotlin/,src/main/resources/,src/test/java/, 임시target/로 구성됨.
제공 기능
의존성 해결
- Maven Central 및 자체 저장소에서 의존성을 가져오며, 전이 의존성 그래프, 가장 가까운 버전 우선 조정(nearest-wins mediation), 제외, 분류자(classifier), 컴파일 전용 의존성, SNAPSHOT을 처리함.
버전 고정
- 커밋된
jrs.lock에 모든 버전과 체크섬을 기록함. - 다운로드 파일은 공유 캐시에 저장하기 전에 검증하며,
--offline빌드는 해당 캐시만 사용함.
컴파일
- 자바와 함께 Kotlin, Scala, Groovy를 컴파일하고 언어 간 양방향 호출을 지원함.
- 각 컴파일러는 Maven Central에서 가져와 버전을 고정하고, 사용 중인 JDK에서 실행함.
테스트
- JUnit 5·6, JUnit 4, Spock, Kotest, ScalaTest, MUnit을 지원함.
- 클래스·태그·메서드로 테스트를 필터링하며 JUnit XML 보고서와 JaCoCo 커버리지를 생성함.
패키징
- 모든 빌드에서 바이트 단위로 동일한 결과물을 만드는 일반·이식형·팻 JAR을 생성함.
- 축소된
jlink런타임 또는jpackage를 통한 네이티브 설치 프로그램을 생성함.
실행
- 메인 클래스를 직접 실행하며,
--watch를 추가하면 변경 때마다 다시 빌드함.
작업
- 코드 생성기, 체크섬, 기타 작업을
jrs.toml에 선언하고 고정된 훅에서 하위 프로세스로 실행함. - Maven Central에서 제공하는 자바 도구도 포함되며, 작업은 빌드를 확장할 수 있지만 빌드 순서를 재배열하지 않음.
마이그레이션
pom.xml,build.gradle,build.gradle.kts에서 한 번에jrs.toml을 생성함. Spring Boot 빌드도 포함하며 검토가 필요한 항목을 보고함.
검사
jrs tree --why,jrs outdated,jrs classpath명령을 제공함.jrs add와jrs remove는 매니페스트의 주석을 유지함.
설치
- Jrs는 단일 바이너리이며,
PATH또는JAVA_HOME에 JDK 17 이상이 필요함. Kotlin·Scala·Groovy 컴파일러는 직접 가져옴. - Apple 설치는 아래 명령으로 Apple Silicon 또는 Intel 빌드를 선택해
~/.local/bin에 설치함. 다른 위치를 지정하려면sh뒤에-s -- --to <dir>를 추가함. curl -fsSL https://getjrs.dev/install.sh | sh- Linux 설치는 같은 스크립트로 x86_64 또는 ARM64 빌드를 선택해
~/.local/bin에 설치함. 바이너리는 정적 링크되어 모든 배포판에서 실행됨. curl -fsSL https://getjrs.dev/install.sh | sh- Windows 설치는 PowerShell에서 아래 명령으로 x86_64 바이너리 ZIP을 다운로드하고
jrs.exe를 압축 해제한 뒤,PATH에 포함된 디렉터리로 옮기는 방식임. curl.exe -fsSLO https://github.com/pwittchen/jrs/releases/latest/download/jrs-x86_64-pc-windows-msvc.ziptar -xf jrs-x86_64-pc-windows-msvc.zip jrs.exe- 소스 설치는 저장소를 복제한 뒤
cargo install --path .를 실행하는 방식임. Rust 에디션 2024를 지원하는 툴체인이 필요하며 바이너리는~/.cargo/bin에 설치됨. git clone https://github.com/pwittchen/jrs.gitcd jrscargo install --path .- 각 릴리스에는 다운로드 검증용
SHA256SUMS파일이 포함되며 설치 스크립트가 체크섬을 확인함. - 설치 후
jrs self check로 새 릴리스 여부를 확인하고,jrs self update로 체크섬 검증을 거쳐 현재 위치에서 업데이트함. - 시작 절차는
jrs init으로jrs.toml, 메인 클래스, 테스트를 만든 뒤jrs run과jrs test를 실행하는 방식임. 기존pom.xml또는build.gradle에서 시작할 경우jrs migrate를 사용함.
연락·지원·컨설팅
- Jrs는 Apache License 2.0에 따른 무료 오픈소스이며 상업적 사용도 포함함. 유료 등급, 기능 제한, 원격 측정은 없음.
- Piotr Wittchen은 Jrs 제작자이며 계약 업무, 프로젝트 개발, 컨설팅을 제공함.
- 이메일: [email protected]
- 웹사이트: wittchen.io · GitHub: github.com/pwittchen
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요