cube8540
43
2021-02-12 15:32:31 작성 2021-02-12 15:33:44 수정됨
1
268

maven central에 artifact 업로드


최근 Bintray, JCenter, GoCenter, ChartCenter등이 지원이 종료된다는 소식을 듣고 저 역시 jcenter에 올린 라이브러리가 있어 해당 이번주에 급하게 maven central에 기존의 라이브러리를 옳겼습니다.


옳김 김에 혹시 도움이 될까 하여, 업로드 방법을 공유 하려고 합니다.


1. GPG 키 발급

maven central에 올라가는 라이브러리들은 변조를 방지 하기 위해 GPG키로 전자 서명을 하게 되어 있습니다.  윈도우 사용자인 저는 https://www.gpg4win.org/ 이곳에서 gpg4win을 다운 받아 생성 했습니다.

KleopartraGnuPG만 체크하여 설치해주세요.

File > New Key Pair > Create a personal OpenPGP key pair 순서로 키를 발급할 수 있습니다.(발급받은 키는 반드시 백업해두세요)


2. 이슈 생성

https://issues.sonatype.org/secure/Dashboard.jspa 지라에 가입을 하고 이슈를 등록해 주세요.

이슈 등록 방법은 아래의 캡처에서 create 버튼을 눌러 등록 할 수 있습니다.


제가 만든 이슈(https://issues.sonatype.org/browse/OSSRH-64275)를 참고하여 프로젝트 이름과, group id, URL 등의 정보를 입력해 주세요. 그러면 운영자가 코멘트를 달아 줄탠데 해당 요구사항을 들어 주면 됩니다. (저의 경우 groupId의 변경과 새 리포지토리(지라 이슈 번호 이름으로 된)의 생성을 부탁 받았습니다.)


3. 저장소에 배포 준비

시간이 지나서 관리자에게 groupid has been prepared, ~~~ 하는 코멘트가 달리고 저장소(https://oss.sonatype.org/#welcome)에 라이브러리를 릴리즈 해달라는 부탁을 받게 됩니다. 아이디는 지라에 가입할떄 쓴 아이디/비밀번호와 동일합니다. 로그인을 하고 계정 정보 옆의 화살표를 클릭하게 되면 아래 처럼 두가지 메뉴가 나오게 되는데 profile을 선택해 주세요.

profile을 선택하면 아래의 페이지가 나오게 됩니다.


여기서 User Token으로 이동하여 유저 토큰을 발급 받습니다.


발급 받은 후 $MAVEN_HOME > conf > setting.xml 의 servers 에 아래와 같이 설정해 주세요.

(pom.xml에도 할 수 있지만, 이러면 발급 받은 username과 password가 노출 되니 반드시 maven에 설정하도록 합시다.)

<servers>
.... <server> <id>ossrh</id> <username>발급 받은 username</username> <password>발급 받은 password</password> </server> </servers>


4. pom.xml 설정
이제 pom.xml을 설정하고 저장소에 배포를 합시다.

pom.xml 의 distributionManagement 항목에 다음과 같이 OSSRH 저장소 정보를 설정해줍니다.

    <distributionManagement>
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>


또한, 배포에 필요한 각종 플러그인들을 설정해 주세요.

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                    <testSource>11</testSource>
                    <testTarget>11</testTarget>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.2</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <locale>ko_KR</locale>
                    <encoding>UTF-8</encoding>
                    <charset>UTF-8</charset>
                    <docencoding>UTF-8</docencoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
이해가 잘 안되시는 분들은 제 pom.xml을 참고해 주세요,(https://github.com/cube8540/validator-core/blob/master/pom.xml)

그 후  mvn clean deploy 명령어로 저장소에 배포하고 https://oss.sonatype.org/#stagingRepositories에 접속하면, 자신이 올린 저장소가 보이며 status가 open 으로 되어 있을 겁니다. 그 후 지라 이슈에 첫 배포가 완료 되었다고 코멘트를 남겨 주세요.


5. 메이븐 중앙 저장소에 동기화


첫 배포 완료 코멘트가 달리면 운영자가 i see an open staging repository named 저장소명 here: https://oss.sonatype.org/#stagingRepositories 이라는 코멘트가 달리게 되는데 이 곳으로 가게 되면


[https://www.youtube.com/watch?v=dXR4pJ_zS-0&feature=youtu.be]
(저는 이미 릴리즈가 완료되어서 제 화면에는 리스트 출력이 안되네요.. )

위와 같이 자신이 올린 저장소의 리스트가 보이게 될겁니다. 이제 자신이 올린 리포지토리를 클릭하고 저 위의 close 버튼을 눌러 close 시킵니다. 그 후 한 1분 정도 기다린 후 refresh 버튼을 누르고, activity 탭을 확인해 주세요.


close 완료 되거나 실패하면 위에서 실패 정보나 완료 정보를 확인할 수 있습니다.


close가 완료 되면, 네모 박스 친 부분에서 이번엔 Release 버튼이 활성화 되어 있을겁니다.

Release 버튼을 눌러 릴리즈를 해줍시다.


6. 완료

그 후 좀 기다리면(저는 1 ~ 2시간 정도 기다린거 같습니다. 시차가 있으니 참고해 주세요) 지라 이슈에 Central sync is actived for ~~~ 이라는 코멘트가 올라옵니다.



이 코멘트가 올라오면 모두 끝난겁니다. 약 2시간에서 3시간 정도 기다리신 후 https://search.maven.org/ 이곳에 들어가 자신의 라이브러리를 검색해 주세요.


혹시 이해가 안되시는점, 막히시는 곳이 있다면 댓글로 남겨 주세요. 최대한 도와 드릴 수 있도록 하겠습니다.


(그리고 게시물이 잘못 올라간거 같은데 Tech로 옮겨주시면 감사하겠습니다...)

1
  • 댓글 1

  • kenu
    51k
    2021-02-12 20:25:26
    해당 게시물은 관리자에 의해 칼럼에서 Tips & 강좌로 이동 되었습니다.
  • 로그인을 하시면 댓글을 등록할 수 있습니다.