본문 바로가기
Dev/etc

Maven Central에 배포 정리.

by 펭귄안에 온천 2023. 7. 11.
728x90
반응형

Maven Central에 배포 정리.

 

1. 지라로 들어가서 티켓을 등록

이슈 유형: New Project
summary : 요약
설명 : 설명
Group Id : 프로젝트가 속한 그룹 ID, ex) 그러나 우리는 도메인이 없으니깐 io.github.Chung10Kr
Project URL : 프로젝트의 웹사이트 URL, ex) 그러나 우리는 웹사이트가 없으니깐 https://github.com/Chung10Kr/SecurityPass
SCM URL : 소스코드 Repository ex) https://github.com/Chung10Kr/SecurityPass
UserName(s) : Jira 계정의 아이디 ex) Chung10Kr
Already Synced to Central: Maven Central에 동기화된 프로젝트 여부, 우리는 첫 업로드이기 때문에 No

 

지라 티켓 예시

2. 도메인 증빙

 

1. Create a temporary, public repository called https://github.com/chung10kr/OSSRH-93173 to verify github account ownership.

읽어보면 계정의 소유권을 확인하기 위해 OSSRH-93173 Repository를 생성하라고 한다.

 

 

3. Release 배포

https://oss.sonatype.org/ 에 snapshot,release,artifacts를 배포하라고 한다.

 

3-1 GPG키 생성 및 공개키 전송

brew install gpg

# 키 생성
gpg --gen-key

# 키 확인
gpg --list-secret-keys --keyid-format LONG
# sec   ******/ABCAAAAAAAA 2023-07-10 [SC] [expires: 2026-07-09]
# 여기서 ABCAAAAAAAA 끝에 8자리(AAAAAAAA)는 외워두자.

# 공개키 전송
gpg --keyserver keyserver.ubuntu.com --send-keys AAAAAAAA

# signing.gpg 파일 생성
gpg --export-secret-keys AAAAAAAA > signing.gpg

3-2 gradle 스크립트 추가 및 설정

# scripts/publish-maven.gradle

apply plugin: 'maven-publish'
apply plugin: 'signing'
apply from: 'publish.gradle'

task sourcesJar(type: Jar) {
    archiveClassifier.set("sources")
}

task javadocJar(type: Jar) {
    archiveClassifier.set("javadoc")
}

artifacts {
    archives sourcesJar
    archives javadocJar
}


group = PUBLISH_GROUP_ID
version = PUBLISH_VERSION

ext["signing.keyId"] = ''
ext["signing.password"] = ''
ext["signing.secretKeyRingFile"] = ''
ext["ossrhUsername"] = ''
ext["ossrhPassword"] = ''
ext["sonatypeStagingProfileId"] = ''

File secretPropsFile = project.rootProject.file('local.properties')
if (secretPropsFile.exists()) {
    Properties p = new Properties()
    p.load(new FileInputStream(secretPropsFile))
    p.each { name, value ->
        ext[name] = value
    }
} else {
    ext["signing.keyId"] = System.getenv('SIGNING_KEY_ID')
    ext["signing.password"] = System.getenv('SIGNING_PASSWORD')
    ext["signing.secretKeyRingFile"] = System.getenv('SIGNING_SECRET_KEY_RING_FILE')
    ext["ossrhUsername"] = System.getenv('OSSRH_USERNAME')
    ext["ossrhPassword"] = System.getenv('OSSRH_PASSWORD')
    ext["sonatypeStagingProfileId"] = System.getenv('SONATYPE_STAGING_PROFILE_ID')
}

publishing {
    publications {
        release(MavenPublication) {
            groupId PUBLISH_GROUP_ID
            artifactId PUBLISH_ARTIFACT_ID
            version PUBLISH_VERSION

            artifact("$buildDir/libs/${project.getName()}-${version}.jar")
            artifact sourcesJar
            artifact javadocJar

            pom {
                name = PUBLISH_ARTIFACT_ID
                description = PUBLISH_DESCRIPTION
                url = PUBLISH_URL
                licenses {
                    license {
                        name = PUBLISH_LICENSE_NAME
                        url = PUBLISH_LICENSE_URL
                    }
                }
                developers {
                    developer {
                        id = PUBLISH_DEVELOPER_ID
                        name = PUBLISH_DEVELOPER_NAME
                        email = PUBLISH_DEVELOPER_EMAIL
                    }
                    // Other devs...
                }
                scm {
                    connection = PUBLISH_SCM_CONNECTION
                    developerConnection = PUBLISH_SCM_DEVELOPER_CONNECTION
                    url = PUBLISH_SCM_URL
                }
                withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')

                    project.configurations.implementation.allDependencies.each {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                    }
                }
            }
        }
    }
    repositories {
        maven {
            name = "sonatype"
            url = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"

            credentials {
                username ossrhUsername
                password ossrhPassword
            }
        }
    }
}

nexusPublishing {
    repositories {
        sonatype {
            nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
            snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
            packageGroup = PUBLISH_GROUP_ID
            stagingProfileId = sonatypeStagingProfileId
            username = ossrhUsername
            password = ossrhPassword
        }
    }
}

signing {
    sign publishing.publications
}
# publish.gradle

ext {
    PUBLISH_GROUP_ID = 'io.github.Chung10Kr'
    PUBLISH_VERSION = '1.0.0'
    PUBLISH_ARTIFACT_ID = 'SecurityPass'
    PUBLISH_DESCRIPTION = 'Permission-based API URL Management Library via @SecurityPass Annotation'
    PUBLISH_URL = 'https://github.com/Chung10Kr/SecurityPass'
    PUBLISH_LICENSE_NAME = 'GNU License'
    PUBLISH_LICENSE_URL = 'https://github.com/Chung10Kr/SecurityPass/blob/master/LICENSE'
    PUBLISH_DEVELOPER_ID = 'Chung10Kr'
    PUBLISH_DEVELOPER_NAME = 'ChungRyeol Lee'
    PUBLISH_DEVELOPER_EMAIL = 'coohg93@hanmail.net'
    PUBLISH_SCM_CONNECTION = 'scm:git:github.com/Chung10Kr/SecurityPass.git'
    PUBLISH_SCM_DEVELOPER_CONNECTION = 'scm:git:ssh://github.com:Chung10Kr/SecurityPass.git'
    PUBLISH_SCM_URL = 'https://github.com/Chung10Kr/SecurityPass/tree/master'
}

 

# build.gradle의 가장 상단에 작성
buildscript {
    dependencies {
        classpath "io.github.gradle-nexus:publish-plugin:1.1.0"
    }
}

......
# build.gradle의 하위에 작성
apply plugin: 'io.github.gradle-nexus.publish-plugin'
apply from: "${rootDir}/scripts/publish-maven.gradle"
apply from: 'publish.gradle'
# local.properties 파일 생성하고 아래것들 입력하고 .gitignore에 추가해주자.

signing.keyId=AAAAAAAA
signing.password=아까 GPG Key 생성할떄 비밀번호
signing.secretKeyRingFile=/Users/crlee/Desktop/dev/GPG/signing.gpg // signing.gpg 파일 위치
ossrhUsername=지라 아이디
ossrhPassword=지라 비밀번호

 

# 빌드 한번 하고 아래 명령어

./gradlew publishReleasePublicationToSonatypeRepository

https://s01.oss.sonatype.org/#welcome 에 접속해서 로그인 후 Staging Repositories를 확인

본인 Repository(status는 open)을 선택 해서 Close 클릭 , 몇분 지나면 Release버튼 활성화됨, Release 버튼 클릭

꽤 오랜시간 지나면 성공

 

반응형

'Dev > etc' 카테고리의 다른 글

[MAC] 특정 포트 열기  (0) 2023.10.07
[MAC] 사용중인 포트 찾아서 죽이기  (0) 2023.07.26
DPS,DAS 참고  (0) 2023.06.16
수불,재고차이  (0) 2023.06.16
[IntelliJ] 플러그인 - gitToolBox  (0) 2023.04.28