티스토리 뷰

반응형

maven 저장소에 라이브러리를 올리는 방법에 대해서 알아보고 삽질내역을 공유하겠습니다.

Java 프로젝트이며 빌드툴은 Gradle을 사용했고, 버전관리 사이트는 Github을 사용했습니다.

 

Step 1. bintray 가입하기

- bintray는 라이브러리(jar파일) 파일들을 업로드 할 수 있는 저장소입니다.

- 오픈소스소프트웨어(OSS)로 가입해야 무료로 이용가능합니다. (OSS이기 때문에 public 한 저장소만 사용가능)

   https://bintray.com/signup/oss (OSS 가입주소)

 

Step 2. bintary에 Repository(저장소) 생성하기

- 삽질포인트 1. (bintray 웹사이트 주의사항~!)

(20.09.12 현재) bintray가 페이지 레이아웃을 변경중이라, New Look 버전이 있고 Old Look 버전이 있습니다.. 레이아웃이 완전 다릅니다. (New 버전은 베타라서 심지어 없는 버튼도 있습니다. 뒤에서 다시 설명..) 레이아웃이 스크린샷과 많이 다르다면 페이지 상단에 'Go to Old Look'을 눌러줍니다.

 

- 가입 후에 로그인하면 Profile 페이지에서 'Add New Repository' 클릭하고 저장소 생성합니다.

- 하나의 Repository에 여러 라이브러리를 업로드 할 수 있으므로  범용적인 이름을  사용합니다. (이름으로 고민하고 싶지 않다면 그냥 maven으로 하면됩니다. 대부분 maven으로 하더라구요.. 저는 util이라는 이름으로 했습니다.)

- Type은 Maven을 선택합니다.

 

Step 3. (생성한 저장소에) Package 생성하기

- Package가 하나의 라이브러리에 대응된다고 생각하시면 됩니다.

- Repository 상세페이지로 들어가서 'Add New Package'로 새로운 패키지 생성합니다.

 

- Package 생성 샘플.

 

 

Step 4. Package에 Github 정보 추가하기

- 생성된 Package 상세페이지로 들어가서 'Edit' 버튼을 누릅니다. (상세페이지 주소는 https://bintray.com/유저아이디/저장소이름/패키지이름 형태입니다.)

- Repository(저장소) 상세페이지와 Package 상세페이지를 혼동하지 않도록 주의합니다.

 

- 패키지 Edit 페이지 하단 Github repo에 깃헙정보를 다음과 같은 형태로 적는다. 작성후 Update Package

 

Step 5. GPG key 추가하기

- GPG는 업로드하는 라이브러리 파일들에 서명(sign)을 하기위해서 사용되는 키입니다. 

- GPG 생성을 위해서 https://gpgtools.org/ 에서 애플리케이션을 다운로드 받습니다.

- 위 링크는 Mac 사용자만 가능한 것 같습니다. 다른 운영체제를 사용하시는 분들은 GPG Key 생성에 대한 다른 문서를 참고해주시기 바랍니다. GPG Key 생성후에 사용할 'Public Key'를 뽑아낼 수 있다면 충분합니다. (서버에 업로드할 필요 없음)

- GPG Key 생성해줍니다.

- Upload Public Key를 눌러줍니다.

 

- 생성된 키를 우클릭하여 '복사' 하면 Public Key가 복사됩니다.

- 우측 상단 'Edit Profile' - 'GPG Signing' 으로 들어가서 복사한 Public Key를 등록하고 'Update'를 눌러줍니다.

 

 

Step 6. Bintray에 업로드한 GPG key로 서명하도록 설정하기

- 생성된 Repository(저장소) 상세페이지로 들어가서 'Edit' 버튼을 누른다. (상세페이지 주소는 https://bintray.com/유저아이디/저장소이름 형태다.)

- Repository(저장소) 상세페이지와 Package 상세페이지를 혼동하지 않도록 주의합니다.

 

- 'GPG Sign uploaded files using Bintray's public/pricate key pair' 체크!

 

Step 7. build.gradle 설정하기

- 먼저 필요한 plugin 설정을 합니다.

- plugin 설정 후에는 import를 꼭 한번 해주세요.

plugins {
    id 'java'
    id 'maven-publish'
    id 'com.jfrog.bintray' version '1.8.5'
}

...

- bintray 설정을 해주세요.

- user는 bintray id를, key는 bintray의 API key를 입력합니다.

bintray {
    user = 'bintray 아이디를 넣습니다'
    key = 'bintray API KEY를 넣습니다'
    ...
    

- API key는 'Edit Profile' - 'API Key' 에서 확인 가능합니다.

- User 정보와 API key는 중요정보라서 별도의 gradle.properties파일에 옮겨서 사용했습니다! (build.gradle에 직접 적어서 github에 올리지 마세요!)

gradle.properties 예제

- 아래는 제가 설정한 샘플입니다. (다른 사항은 샘플을 참고하시면 크게 어려움이 없을 겁니다.)

...

bintray {
    user = project.bintray_user
    key = project.bintray_key
    publications = ['MyPublication']

    pkg {
        repo = 'util'
        name = 'ogparser4j'
        userOrg = 'siyoon210'
        licenses = ['MIT']
        vcsUrl = 'https://github.com/siyoon210/ogparser4j.git'
        version {
            name = '1.0.1'
//        desc = 'Version description'
            released  = new Date()
            vcsTag = '1.0.1'
        }
    }
}



task sourcesJar(type: Jar) {
    from sourceSets.main.allSource
    classifier = 'sources'
}

task javadocJar(type: Jar, dependsOn: 'javadoc') {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

def pomConfig = {
    licenses {
        license {
            name "MIT License"
            url "http://www.opensource.org/licenses/mit-license.php"
        }
    }
    developers {
        developer {
            id "siyoon"
            name "siyoon jung"
            email "siyoon210@gmail.com"
            organization "Github"
            organizationUrl "https://github.com"
        }
    }
    scm {
        connection "scm:git:git://github.com/siyoon210/ogparser4j.git"
        developerConnection "scm:git:ssh://github.com:siyoon210/ogparser4j.git"
        url "https://github.com/siyoon210/ogparser4j"
    }
    distributionManagement {

    }
}

publishing {
    publications {
        MyPublication(MavenPublication) {
            from components.java
            artifact sourcesJar
            artifact javadocJar
            groupId 'com.github.siyoon210'
            artifactId 'ogparser4j'
            version '1.0.1'
            pom.withXml {
                def root = asNode()
                root.appendNode('description', 'OpenGraph parser for Java')
                root.appendNode('name', 'ogparser4j')
                root.appendNode('url', 'https://github.com/siyoon210/ogparser4j')
                root.appendNode('packaging', 'jar')
                root.children().last() + pomConfig
            }
        }
    }
}

- 예제로 사용된 build.gradle 파일 설정파일 링크 (https://github.com/siyoon210/ogparser4j/blob/develop/build.gradle)

 

Step 8. bintray에 업로드하기

- 삽질포인트2. (버전업이 필요하다면 bintray에서 해당 버전을 미리 생성해주세요)

버전업이 필요하다면 bintray에서 'New Version'

- Gradle을 이용하여서 관련 파일들을 generate하고 upload 해줍니다.

- generateMetadataFileForMyPublicationPublication - generatePomFileForMyPublicationPublication - bintrayUpload 순으로 진행했습니다.

 

- 정상적으로 업로드 되었다면 8가지의 파일이 확인되어야 합니다.

- 만약 .asc파일이 생성되지 않았다면 Step 6를 확인하세요.

 

Step 9. JCenter로 업로드하기

- JCenter는 maven central과 같은 패키지 저장소입니다. (잘 몰랐는데 JCenter가 maven central보다 더 큰 저장소라고 하네요.)

- maven 저장소에 올리기 위해서는 JCenter에 업로드가 되어있어야 합니다.

- Package 상세페이지 우측 하단에 'Add to JCenter'를 눌러줍니다.

- 요청 메세지를 보내면 되는데, Comments는 안달아도 알아서 해줍니다.. 그냥 'Send' 눌러주시면 됩니다.

- 요청이 수락되는데 약 6시간정도 소요되었습니다.

- (JCenter에 업로드가 되면 Repositories에 JCenter를 명시하고 외부에서 다운로드 받는것이 가능해집니다!)

 

Step 10. Sonatype Jira 가입하기

- maven 저장소에 업로드하기 위해서는 Sonatype Jira에 먼저 승인을 받아야 가능합니다.

- 다음 주소로 가입합니다. https://issues.sonatype.org/projects/OSSRH

Stpe 11. maven link 승인받기

- Sonatype Jira에 로그인하고 이슈를 생성합니다.

- 프로젝트는 'Community Support - Open Source Project Repository Hosting (OSSRH)', 이슈 유형은 'New Project'로 합니다.

- 그리고 나머지 프로젝트 정보를 아래와 같이 기입합니다.

- 승인이되면 관리자가 해당 이슈에 댓글을 달아주고, 이슈의 상태는 RESOLVED로 변경됩니다.

- 제 경우에는 관리자가 Github주소 인증을 위해 티켓명으로 Github Repository를 만들라고 요구했습니다.

- 모든 과정은 지체없이 금방 처리되었습니다. (늦어도 하루안에는 처리가 될 것 같아요.)

- 만들었던 이슈 링크 입니다. (https://issues.sonatype.org/browse/OSSRH-60459)

 

Step 12. maven token 확인하기

 https://oss.sonatype.org/ 로 이동합니다.

- 로그인에 사용하는 아이디와 비밀번호는 위에서 가입한 Sonatype Jira에서 사용한 id를 사용하세요.

profile 화면으로 이동
User Token 확인하기

- 해당 name과 token은 다음 단계에서 사용합니다.

Step 13. maven central로 Sync하기

- Sync하고자 하는 패키지의 버전 상세페이지로 이동합니다.(상세페이지 주소는 https://bintray.com/유저아이디/저장소이름/패키지이름/버전명 형태입니다.)

- 다른 상세페이지와 혼동하지 않도록 주의하세요.

- 'Maven Central' 탭에서 Step 12에서 확인한 User tokey key와 password를 입력하고 'Sync'를 누릅니다.

- 만약 'Maven Central'탭이 보이지 않는다면 Step 2 삽질포인트 1을 확인해주세요.

- 정상적으로 진행되었다면 Sync Status가 Successfully synced and closed repo. 상태로 변경됩니다.

- Sync가 실패한다면 central.sonatype.org/pages/requirements.html 해당 문서를 확인해보세요.

- 10여분 정도 지나면 maven 저장소에서 확인 가능합니다~!!

 

 

참고

- jojoldu.tistory.com/161

- www.jfrog.com/confluence/

- central.sonatype.org/pages/requirements.html

반응형
댓글