Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Java 저장소 사이의 코드 공유

공유할 Java 코드나 macro는 별도 저장소에 두고 commit하여 아티팩트를 빌드합니다. 이를 사용하는 dependent repository는 공유 저장소의 아티팩트에 접근할 권한과 정확한 Maven 좌표를 가져야 합니다.

접근 설정

소비 저장소의 Settings > Artifacts 또는 Libraries의 backing repository 설정에서 공유 저장소를 추가합니다. 다른 프로젝트이면 프로젝트 참조와 해당 가져오기 권한도 필요합니다. 라이브러리 원천 설정의 권한과 전이 의존성 조건을 적용합니다.

Jemma 빌드는 공유 저장소가 만든 아티팩트를 자동 발행합니다. 소비 저장소는 이를 참조하여 컴파일하고 실행합니다.

Maven 좌표 찾기

좌표는 다음 세 부분입니다.

공유 저장소 RID:Gradle 하위 프로젝트 이름:발행 버전

저장소 RID는 URL에서 확인하거나 Artifacts 설정의 해당 저장소 항목을 선택하여 의존성 문자열을 복사할 수 있습니다. 실제 좌표의 RID는 ri.stemma.main.repository.{식별자} 형식을 사용합니다.

하위 프로젝트 이름과 발행 버전은 공유 저장소의 최근 Jemma CI 발행 로그에서 확인합니다. 로그가 충분하지 않으면 해당 저장소 ci.yml의 ./gradlew 실행 줄에 --info를 추가하여 자세한 발행 정보를 볼 수 있습니다.

./gradlew --no-daemon --build-cache --stacktrace patch publish --info

이는 실제 아티팩트를 발행하는 CI 명령입니다. 단순 조회 명령이 아니므로 공유 저장소의 정상 발행 절차에서 사용합니다. ci.yml은 업그레이드 때 덮어쓸 수 있어 장기적인 사용자 지정 검사 설정을 보관하는 위치로 쓰지 않습니다.

로그에는 다음 경로 형태가 나타날 수 있습니다. 꺾쇠로 표시한 값은 로그에서 읽을 항목이며 실행 명령이 아닙니다.

Upload https://<MAVEN_REPO_URL>/maven-repository-proxy/authz/user-code/<SHARED_CODE_REPO_RID>/<SUBPROJECT>/<VERSION>/<SUBPROJECT>-<VERSION>.jar

Uploading: ri/stemma/main/repository/<UUID>/<SUBPROJECT>/<VERSION>/<SUBPROJECT>-<VERSION>.jar to repository remote at https://<ARTIFACTS_URL>/artifacts/api/legacy/mrp/authz/user-code/

Uploading: ri/stemma/main/repository/<UUID>/<SUBPROJECT>/<VERSION>/<SUBPROJECT>-<VERSION>.jar to repository remote at https://<ARTIFACTS_URL>/artifacts/api/repositories/<UUID>/contents/release/maven/

경로의 SUBPROJECT와 VERSION을 좌표에 사용합니다. UUID 경로와 점으로 구분한 전체 repository RID를 혼동하지 않습니다.

소비 저장소의 Gradle 설정

루트가 아니라 언어 하위 프로젝트, 예를 들어 transforms-java/build.gradle에 의존성을 추가합니다. 다음은 형식을 보여 주는 가상 좌표이므로 실제 CI에서 얻은 값으로 바꿉니다.

dependencies {
    implementation 'ri.stemma.main.repository.11111111-1111-1111-1111-111111111111:transforms-java:1.2.3'
}

최신 Java Gradle 템플릿의 일반 컴파일 의존성은 implementation으로 지정합니다. 라이브러리의 공개 API에 노출하여 소비자의 컴파일에도 필요한 의존성은 Java Library 플러그인의 api 범위를 검토합니다.

기존 템플릿의 buildscript 안 dependencies는 빌드 플러그인을 위한 별도 영역입니다. 예를 들어 com.palantir.transforms.java:lang-java-gradle-plugin의 classpath 설정과 실제 변환 코드가 사용할 공유 저장소 의존성을 같은 블록에 넣지 않습니다.

Java 하위 프로젝트에는 템플릿이 제공하는 com.palantir.transforms.lang.java와 com.palantir.transforms.lang.java-defaults 설정을 유지합니다. 전체 build.gradle을 단일 의존성 예제로 덮어쓰지 않습니다.

새 버전 적용

공유 저장소의 코드를 바꿔 다시 컴파일하면 발행 버전이 달라질 수 있습니다. 소비 저장소는 자동으로 새 버전을 선택하지 않으므로 CI에서 새 버전을 확인하고 Maven 좌표를 직접 갱신해야 합니다.

이 기능은 Java 저장소의 빌드 아티팩트를 공유하는 방식입니다. Python과 같은 전용 Java 라이브러리 생성 및 태그 기반 라이브러리 발행 흐름은 제공하지 않습니다. 일반 저장소의 Git 태그와 공유 아티팩트의 발행 버전 계약은 구분합니다.