메이븐 중앙 저장소에 아티팩트 업로딩 - maven - uploading artifact to central repository
개요
java 기반의 오픈 소스 프로젝트를 하고 있다면 library jar 파일을 메이븐의 중앙 저장소에 올려서 다른 이들과 손쉽게 공유할 수 있습니다.
메이븐의 중앙 저장소에 올리려면 https://bintray.com/ 같은 대행 서비스를 사용할 수도 있고 저장소 관리 솔루션인 sonatype nexus 사에서 제공하는 OSSRH(Open Source Project Repository Hosting) 을 이용할 수도 있습니다.
저는 개인적인 필요로 인해 Java 로 JIRA의 REST API 를 구현한 라이브러리를 만들었고 이를 OSSRH 를 통해 메이븐 중앙 저장소에 올리는 과정에서 제대로 매뉴얼을 안 보고 상당한 삽질을 겪은지라 혹시 비슷한 경우를 겪게 되는 분을 위해 그 과정을 정리해 봅니다.
사전 준비 사항
프로젝트와 계정 생성
먼저 오픈 소스 프로젝트를 개설하고 pom.xml 을 만들고 여기에 groupID와 artifact id, version 과 부가 항목(name, description, url, license 은 옵션 항목이지만 중앙 저장소에 올리려면 필수)을 지정해 줍니다.
저는 lesstif.com 이라는 도메인을 소유하고 있으므로 다음과 같이 com.lesstif 를 groupID 로 지정했으며 도메인이 없을 경우 다음과 같이 사용하는 오픈소스 포탈(예: com.github.lesstif) 로 설정해도 됩니다.
<groupId>com.github.lesstif</groupId> <artifactId>jira-rest-api</artifactId>
이제 소스를 구현하고 push 한 후에 deploy 할 준비가 되었다면 https://issues.sonatype.org/secure/Signup!default.jspa 에 연결하여 JIRA 계정을 생성합니다.
계정이 생성되면 이메일로 알림이 오고 JIRA 이슈를 등록 할 권한을 갖게 됩니다.
이제 https://issues.sonatype.org/projects/OSSRH 에 연결하여 CREATE 를 눌러서 지라 이슈를 하나 등록합니다.
이슈 등록시 https://issues.sonatype.org/browse/OSSRH-19670 처럼 프로젝트의 이름과 groupId, URL 등의 정보를 입력하면 이슈가 생성되고 몇 일이 지나면 OSSRH 프로젝트 운영자가 해당 이슈의 상태를 Resolved 로 바꾸고 댓글을 달아주면 배포 사전 준비가 끝납니다.
distributionManagement 설정
이제 pom.xml 의 distributionManagement 항목에 다음과 같이 OSSRH 저장소 정보를 설정해 줍니다.
그리고 $HOME/.m2/settings.xml 의 servers 항목에 위에서 만든 계정과 암호를 설정해 줍니다.
snapshot 을 deploy 해서 테스트 해보기 위해 version 항목에 -SNAPSHOT 을 붙이고 다음 명령어를 실행해 봅니다.
mvn clean deploy
정상적으로 deploy 가 되었다면 https://oss.sonatype.org/content/repositories/snapshots/com/lesstif/ 에 연결하여 확인해 볼 수 있습니다.
GPG 키 생성
메이븐 중앙 저장소에 올라오는 library 는 위변조를 방지하기 위해 GPG 키로 전자 서명하게 되어 있습니다.
윈도 사용자는 https://www.gpg4win.org/ 에서 gpg4win 을 다운로드 받아서 File -> New Certificate 메뉴에서 Key Pair 를 생성하고 이름과 이메일을 넣어줍니다.
생성이 완료되었으면 Export Certificate 를 클릭해서 공개키를 *.asc 파일로 저장한 후에 이 파일을 http://pgp.mit.edu/ 에 업로드합니다.
GPG 키는 중요하므로 꼭 백업해 두세요.
deploy
javadoc 과 source jar
중앙 저장소에는 source jar와 javadoc와 필요하므로 pom.xml 에 maven-source-plugin, maven-javadoc-plugin 을 추가합니다.
물론 javadoc 이 제대로 생성되려면 사전에 소스에 주석을 달아놓아야 합니다.
gpg-sign
deploy 시 GPG 로 jar 파일 위변조를 확인하므로 deploy 시 gpg 서명을 추가하기 위해 gpg-plugin 설정을 합니다.
settings.xml 에는 위에서 생성한 gpg 개인키의 passphrase 를 설정해 줍니다.
deploy
이제 deploy 명령을 실행하면 모든 요구 조건이 맞을 경우 중앙 저장소에 올라 갑니다.
만약 소스에 주석이 없거나 pom.xml 에 프로젝트 정보와 라이선스가 없거나 gpg 서명에 실패하는 경우 maven 의 에러 메시지를 읽어 보면 쉽게 처리가 가능합니다.
mvn clean deploy