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 |