Maven Central 에 라이브러리 올리기

개발 이야기 2014.08.08 00:21

최근에 오픈 소스 작업 해야겠다! 라고 맘 먹은 것이 있었는데 최종 결과물을 메이븐 Central 저장소에 올리는 것이 목표였습니다.

역시나 작업은 쉽지 않더군요. 우여곡절 끝에 업로드 완성했고 생각보다 폭발적인 반응을 얻어왔는데요.

오늘은 그 고생한 이야기를 털어보고자 남깁니다.


1. 작업환경

언어 : 자바 6 +Groovy
IDE : Intellij 13+
빌드 툴 : Gradle

2. gradle 을 활용한 maven pom 파일 생성하기



groupId = com.nobrain.gradle
artifactId = gradle-play-publisher

로 설정하였습니다.

maven 이라는 플러그인을 통해서 pom 작성하는데

저장소, 라이센, 개발자 정보 등을 작성하였습니다.

참고로 mavenDeployer 에 저장된 정보들 중 일부는 maven central 업로드시 반드시 작성되어야 하는 정보가 있습니다.
(https://docs.sonatype.org/display/Repository/Central+Sync+Requirements)

uploadArchives.repositories.mavenDeployer.repository(url : uri('../repo')

라는 설정이 있는데 이는 local disk 의 ../repo 에 라이브러리를 만들겠다는 의미입니다.


이렇게 하면 가장 기본적인 작업은 완료 되습니다. 이제부터는 외부의 작업이 필요한대요...

3. PGP 등록 및 Signing 하기

maven 프로젝트는 각각이 보안이 유지되기 위해서 PGP 라는 정보를 통해서 올바른 업데이트인지를 확인하는 것으로 보입니다.
그래서 반드시 PGP 를 생성하고 서버에 등록하여야 합니다.

3-1 PGP 생성하기

https://www.gnupg.org/download/index.html 에 접속하시면 PGP 를 생성할 수 있는 툴들을 굉장히 많이 제공하고 있습니다.
그중에서 저는 PGP KeyChain Access (Only Mac) 라는 툴을 이용하여 Public 키를 생성하였습니다.
(이메일과 Full Name 을 작성하여야 합니다.)


3-2 PGP 등록하기

생성한 PGP 키는 http://pgp.mit.edu/ 사이트를 통해서 등록하여야 하는데요.
(일부 잘 되어진 툴은 업로드도 함께 제공해줍니다.)

방법은 PGP KeyChain Access 기준으로 export 시 ASCII 로 추출하시면 됩니다.
추출된 ASCII 형태의 PGP 를 메모장으로 열게 되면 


---BEGIN...---

---END...--- 

 형식으로 되어 있는데 [Submit a Key] 란에 복사 붙여넣기 후 Submit 하시면 됩니다.

3-3 PGP 로 Signing 하기

Maven Central 로 업로드시 PGP 로 Signing 하지 않으면 절대로 업로드가 안되니 반드시 진행해주시기 바랍니다.


위와 같이 작성해주시면 빌드시 자동으로 signing 이 진행됩니다.


4. jar 생성하기

./gradlew uploadArchives

를 실행하면 1 에서 설명한 '../repo' 에 jar 파일이 생성되어 있습니다.


5. maven central upload 대행 서비스 이용하기

제가 이용한 서비스는 https://bintray.com/ 라는 서비스를 통해서 mavenCentral 에 업로드를 진행하였습니다.

해당 서비스에 가입하신 후 maven repository 에 package 를 추가 -> version 을 추가 순으로 진행하시면 됩니다.

6. bintray 에 jar 파일 업로드 하기

생성된 version 에 Files 에 들어가시면 해당 웹 페이지 UI 를 통해서 업로드가 가능하도록 되어 있습니다.

먼저 $groupId/$artifactId/$version/메이븐 파일 + jar 파일 이 되어 있는데
$version/메이븐파일 압축을 합니다. 

파일 업로드시에 Target Path 를 $groupId/$artifactId/ 로 지정 후 압축 파일을 업로드하면

업로드된 file 이 $groupId/$artifactId/$version/메이븐 파일 에 된 것을 확인 하실 수 있습니다.


6. maven cetral 업로드 준비

6-1. sonatype 저장소 가입하기

5 에서 얘기한 bintray 서비스는 sonatype 을 통해서 maven central 에 sync 를 합니다. 그러기 위해서는 sonatype 에 가입이 되어야 하는데요

https://issues.sonatype.org/secure/Signup!default.jspa 을 통해서 가입을 하실 수 있습니다.


6-2. 프로젝트 생성 요청하기

로그인 후 https://issues.sonatype.org/secure/CreateIssue!default.jspa 에 접속하시면 새로운 프로젝트를 생성할 수 있도록 요청할 수 있습니다. groupId, 소스 저장소나 이슈를 프로젝트를 관리하는 URL등은 필수 사항이니 꼭 적어주시기 바랍니다.

프로젝트 생성을 요청하면 빠르면 10분 안에 생성이 되었음을 알려줍니다.
(생각보다 피드백이 빠르고 댓글로 질문시 바로바로 대답해주니 잘못된 부분은 직접 질문하는게 빠릅니다.)


7. bintray <-> maven central Sync 하기

다시 bintray 로 돌아와서 5 에서 업로드한 버전으로 이동합니다.
메뉴 중에 Maven Central 을 보실 수 있는데 sync 를 요청하면 bintray 의 자체 repository 에 업로드를 진행 한 후
maven central 에 업로드 됩니다.
maven central 에 업로드시 6-1 에서 가입한 정보를 물어보니 꼭 6-1 을 진행 후 해주시기 바랍니다

promote 권한이 없다는 오류 : 6-2 가 정상 진행되지 않은 것입니다.
3-3 이 없을 시 오류 발생 할 수 있습니다.
source.jar, docs.jar 가 미작성시에도 오류가 날 수 있습니다.


8. 업로드와 sync 가 모두 완료되면

https://oss.sonatype.org/ 의 search 에서 검색하실 수 있습니다. :)



처음 해본 것인데 국내 자료가 그다지 없어서 직접 작성해보았습니다.

그림도 없고 대략적으로 작성한거라 부족함이 많지만 그래도 라이브러리 등록에 큰 도움이 되었으면 합니다.


위의 동작은

https://github.com/ZeroBrain/gradle-play-publisher 을 업로드하는 과정에서 얻은 경험을 토대로 작성하였습니다.


Maven Central 에 올라가는 라이브러리는 매우 신중히 작업해주시기 바랍니다.
누군가는 그 라이브러리로 작업을 하기 때문에 지원을 더이상 하지 않는다면 공지를 해줘야겠죠.

호기심 반 뿌듯함 반으로 작업을 했는데 생각보다 감당하기 어려운 책임감이 느껴지네요.

설정

트랙백

댓글