Skip to content

feat: jvm 바인딩 추가 - #181

Open
kdyann wants to merge 1 commit into
dev-five-git:mainfrom
kdyann:feat/jvm-binding
Open

feat: jvm 바인딩 추가#181
kdyann wants to merge 1 commit into
dev-five-git:mainfrom
kdyann:feat/jvm-binding

Conversation

@kdyann

@kdyann kdyann commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

braillify 라이브러리를 Java 및 Kotlin 환경에서 사용할 수 있도록 JVM 바인딩을 추가합니다.

주요 구성

  • Rust 코어를 직접 호출하는 JNI 바인딩
  • Java와 Kotlin에서 공통으로 사용할 수 있는 API 제공
  • encode, translateToUnicode, translateToBrailleFont 지원
  • 플랫폼별 네이티브 라이브러리를 포함한 Fat JAR 생성
  • Linux x64/ARM64, macOS Intel/ARM, Windows x64 지원
  • Rust 오류 및 패닉을 JVM 예외로 변환
  • 실행 환경에 맞는 네이티브 라이브러리 자동 로딩
  • Java 8 이상 지원

배포

JVM에서는 사용자가 JAR을 직접 관리하는 것보다 Gradle 또는 Maven에서 의존성 한 줄로 추가하는 방식이 편할 것 같아 Maven Central 배포로 구현했습니다.

Maven Central 배포를 포함하는 현재 방향이 괜찮을지, 아니면 GitHub Release artifact만 제공하는 편이 나을지 의견 부탁드립니다.

Maven Central 방식을 유지한다면 프로젝트에서 사용할 namespace와 groupId 확인이 필요합니다.

테스트

  • Rust JNI 단위 테스트 9개
  • Java/JNI 통합 테스트 22개

@codecov

codecov Bot commented Aug 27, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 3.77358% with 51 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
packages/jvm/src/lib.rs 3.77% 51 Missing ⚠️
Files with missing lines Coverage Δ
packages/jvm/src/lib.rs 3.77% <3.77%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@owjs3901

Copy link
Copy Markdown
Contributor

커버리지 이슈를 확인해주세요

@kdyann

kdyann commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Rust 테스트 3,727개는 모두 통과했지만, 새 JVM 크레이트가 Cargo workspace에 포함되면서 JNI bridge 코드 51줄이 Rust coverage 대상에 추가됐습니다. 이 코드는 별도의 Gradle/JUnit 테스트에서 실행되지만 해당 결과가 Rust coverage에는 반영되지 않아, coverage가 99.63%로 집계됩니다. Ubuntu에서만 실패하는 이유는 Linux에만 100% threshold가 적용되기 때문입니다.

혹시 JNI 코드를 coverage에서 제외하지 않고, JVM 테스트 결과가 Rust coverage에 반영되도록 CI 구조를 조정하는 방향으로 진행해도 괜찮을까요?

@owjs3901

owjs3901 commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

https://github.com/dev-five-git/vespera

위 repo를 보면 조금 도움이 될 것 같습니다.

같은 jvm에 rust인데 커버리지 이슈를 해결한 것으로 알고 있습니다.

@kdyann

kdyann commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

확인해보니 Vespera는 JVM 테스트 결과를 Rust coverage에 병합하는 방식이 아니라, JNI 크레이트를 tarpaulin 산정에서 제외하고 별도의 jni-e2e job에서 검증하고 있는 것 같습니다.

Braillify도 동일하게 JVM 크레이트를 Rust coverage에서 제외하고, 기존 Gradle/JUnit 테스트를 별도 필수 검증으로 유지하는 방향으로 수정하는 방식으로 진행해도 괜찮을지 여쭙니다.

@owjs3901

owjs3901 commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

동의합니다, 그렇게 진행합시다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants