본문 바로가기

현재/TIL

gradle의 Maven publish 사용기

서비스 별 api를 공유할 때 dto등을 맞추게 되는데, 이때 좀 더 간편하게 공유하기 위해 사용해본 maven-publish 사용법을 공유하기 위함입니다.

 

Repository 생성

1. 우선, 테스트를 위해 개인 레포지토리를 생성한다.

 

2. 토큰 발행

- 본인 프로필을 찍고, Settings에 들어가면 맨 아래쪽에 Developer settings가 있다.

- Generate new token을 통해 토큰을 발행한다.

- 토큰의 이름은 본인이 원하는 이름으로 지정하고, write:packages만 선택후 발행한다.

(write는 publish까지 가능하고 아래 read의 경우 maven-publish는 불가하며 말 그대로 read권한만 주어진다.)

 - 발행된 토큰은 복사 후 어디에다가 저장해둔다. (잃어버리면 다시 볼 수 없으며 재발행해야 한다.)

(본인이 지정한 토큰이름으로 발행된 것을 확인할 수 있다.)

 

 

Project 생성

1. 테스트를 위한 프로젝트를 하나 생성한다.

- 프로젝트 생성은 본인이 원하는대로 만들면 되는데, 스프링일 필요는 없다. gradle 프로젝트이기만 하면 된다.

 

 

2. 프로젝트 생성 후, 배포하고 싶은 test dto를 하나 생성해본다.

- (Test란 dto를 여러 서비스에서 사용한다고 가정을 해보자!)

 

3. build.gradle에 3가지 추가

- id 추가한다.

 

id("maven-publish")

 

 

- publishing 코드를 추가한다.

위에서 발행한 토큰을 넣어준다.

 

publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/{YOUR_GITHUB_ID}/{GITHUB_REPO_NAME}")
            credentials {
                username = {TOKEN_NAME}
                password = {TOKEN_VALUE}
            }
        }
    }
    publications {
        create<MavenPublication>("default") {
            from(components["java"])
        }
    }
}

 

 

- option 추가

 

// bootjar로 만들지 않겠음
tasks.getByName<org.springframework.boot.gradle.tasks.bundling.BootJar>("bootJar") {
    enabled = false
}

// 일반 jar로 만들겠음
tasks.getByName<Jar>("jar") {
    enabled = true
}

 

 

- 위 내용을 다 작성했다면, gradle을 재빌드 시켜준다.

 

Publish하기

1. 터미널에서 publish를 한다.

 

./gradlew publish

 

 

(그럴일은 없겠으나 명령어가 안먹힌다면 아래와 같이 gradle tab에서 publish를 눌러준다.)

 

 

2. publish 성공

- 실수 없이 잘 따라왔다면 아래와 같이 빌드가 성공할 것이다.

 

 

- 성공을 했다면, 아래 repository에 가면 Packages가 생성(배포)된것을 볼 수 있다.

 

 

 

- 혹시, 실패한 사람이 있다면 아래 내용을 참고하면 좋을것 같아 같이 적어둔다.

(1) 403 에러가 난 경우 : token 이름, 비번을 다시 확인해보자

(2) 409 에러가 난 경우 : conflict는 빌드 이름이 출돌 났을 경우가 있다. 아래 버전을 한번 바꿔보자

 

 

(3) 422 에러가 난 경우 : 다른 repository에 잘못 배포가되어진 경우이다. 다른 곳에 같은 이름의 패키지가 생성되었는지 확인해보고 있다면 삭제를 해주자

 

배포된 내용 사용하기

배포를 끝냈다면, 다른 서비스(아래 프로젝트부터는 위에 프로젝트와 다른 프로젝트이다)에서 위에 배포한 Test dto를 사용해보도록 하자

1. 원하는 서버 build.gradle에 위에서 배포한 내용을 작성한다.

 

maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/{YOUR_GITHUB_ID}/{GITHUB_REPO_NAME}")
            credentials {
                username = {TOKEN_NAME}
                password = {TOKEN_VALUE}
            }
        }

 

 

2. dependency를 추가한다.

- 아래와 같이 배포한 내용을 dependency에 추가해주고 gradle을 재빌드 한다.

 

implementation("com.example:mv-publish:0.0.1-RELEASE")

 

 

(여러번 배포해서 숫자가 다름..)

 

3. 이제 원하는곳에서 Test dto를 호출해본다.

- 배포한 dto가 바로 뜨는것을 확인 할 수 있으며 해당 dto를 바로 사용할 수 있게 되었다!

 

 

긴 내용이였지만, 튜토리얼에 불과하여 금방 따라하실 수 있을 것 같습니다. 개인적으로 maven-publish를 사용하는 이유는 공통으로 쓰는 dto나 entity등을 공유할 때 실무에서는 상당히 많은 양을 주고 받게되는데, 이때 하나하나 따라 치거나 복사해서 쓰기 보단 위와같이 공유해준다면 상대 서비스 개발자쪽에서 쉽게 붙일 수 있어 사용하게되었습니다.

 

'현재 > TIL' 카테고리의 다른 글

멀티 모듈 프로젝트에 maven-publish 적용하기  (0) 2022.09.09
멀티모듈 프로젝트로 생성하기  (0) 2022.08.14