-
github으로 maven repo 만들기GIT 2024. 10. 9. 18:45
사이드 프로젝트를 초기 진행을 해보면서 사용자에게 서비스를 제공하는 방식으로
maven repo 제공 방식을 경험해볼 수 있는 기회가 생겨서 어떻게 구현했는지 기록해보았다!
github을 이용해서 maven repo를 구현해서 사용할 수 있게 제공해보았다.
mvn-repository-publish
maven repo 형식으로 서비스를 제공하기 위해서 mvn-repository-publish를 사용할 수 있다.
Gradle 레지스트리 작업 - GitHub Docs
패키지를 GitHub Packages에 게시하고 GitHub Packages Gradle 레지스트리에 저장된 패키지를 Java 프로젝트의 종속성으로 사용하도록 Gradle을 구성할 수 있습니다.
docs.github.com
먼저, 서비스를 제공할 프로젝트 레포와 sdk를 제공할 mvn repo용으로 사용될 프로젝트 레파지토리를 만들어주어야 한다.
여기서는 간단하게 서비스 프로젝트는 test-project, mvn repo용으로 제공된 레포는 test-project-mvn-repo로 지칭한다.
mvn repository로 배포하고자 하는 프로젝트의 build.gradle.kts에 다음과 같이 추가한다.
// 배포하고자 하는 그룹과 버전을 설정 group = "com.test.project" version = "0.0.1-SNAPSHOT" // mavne-publish 플러그인 적용 apply { plugin("maven-publish") } // jar 파일 설정 tasks.jar { enabled = true archiveClassifier.set("") archiveFileName.set("test-project-${project.version}.jar") } // publish 옵션 설정 configure<PublishingExtension> { publications { create<MavenPublication>("mavenJava") { artifact(tasks.kotlinSourcesJar.get()) artifact(tasks.jar.get()) } } repositories { maven { // sdk 프로젝트를 제공할 github 주소를 입력한다 url = uri("https://maven.pkg.github.com/test-project/test-project-mvn-repo") credentials { username = project.findProperty("repo.user") as String? ?: System.getenv("TEST_PROJECT_REPO_ID") password = project.findProperty("repo.key") as String? ?: System.getenv("TEST_PROJECT_REPO_KEY") } } } } // sourceSets 설정 tasks.kotlinSourcesJar { archiveClassifier.set("sources") from(sourceSets.main.get().allSource) }
여기서 프로젝트의 REPO_ID와 REPO_KEY를 gradle 설정에 추가하거나 환경변수 설정을 통해 github repo의 env로 함께 등록해준다.
- gradle 설정 방법
- https://github.com/settings/tokens 이동
- Personal access tokens
- admin:org, repo, write:packages 토큰 발급
- .gradle/gradle.properties 설정
$ pwd /Users/username/ $ mkdir .gradle $ cd .gradle $ vi gradle.properties
repo.user={github username} repo.key={3에서 발급받은 토큰}
- 환경변수 설정 방법
- 자신이 사용 중인 셸의 설정 파일(i.e., .zshrc)에 반영
export TEST_PROJECT_REPO_ID={github username} export TEST_PROJECT_REPO_KEY={3에서 발급받은 토큰}
그 이후, 터미널에서 다음의 명령어로 publish 한다.
$ ./gradlew publish 혹은 gradle publish
publish가 완성되면 위에서 설정한 mvn repo 에서 배포 내용을 확인할 수 있다.
여기서는 https://maven.pkg.github.com/test-project/test-project-mvn-repo/packages 에서 내용을 확인할 수 있다.
단, 여기서 항상 버전에 따라서 생성이 되기 때문에, publish 할때마다 버전을 설정해주어야 함에 유의하자.
만들어진 mvn repository 사용하기
만들어진 mvn repository는 다음과 같이 사용할 수 있다.
여기서도 REPO_ID와 REPO_KEY를 gradle 설정에 반영하거나 환경 변수 설정을 통해 Github key 설정이 되어있어야 한다.
dependencies { implementation("com.test.project:test-project:0.0.1-SNAPSHOT") } repositories { maven { url = uri("https://maven.pkg.github.com/test-project/test-project-mvn-repo") credentials { username = project.findProperty("repo.user") as String? ?: System.getenv("TEST_PROJECT_REPO_ID") password = project.findProperty("repo.key") as String? ?: System.getenv("TEST_PROJECT_REPO_KEY") } } }
build를 하면 성공적으로 받아온 mvn repository를 import하여 사용할 수 있는 것을 확인할 수 있다!
github workflow로 mvn repository publish 자동화하기
원한다면, github workflow를 통해서 mvn repository에 publish 하는 작업을 자동화 할수도 있다.
단, 이 경우 위에서 설정한 TEST_PROJECT_REPO_ID, TEST_PROJECT_REPO_KEY를 github actions를 통해서 배포시 사용을 위해 organization의 secrets에 설정해야 한다.
- secrets 생성 안내 : https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions
- organization -> security -> secrets and variables -> new organization secret을 통해 생성 가능
Using secrets in GitHub Actions - GitHub Docs
Secrets allow you to store sensitive information in your organization, repository, or repository environments.
docs.github.com
name: test-project-mvn-repo Github packages 개발 배포 테스트 on: workflow_dispatch: jobs: publish: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' - name: Build and Publish run: | ./gradlew clean build publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TEST_PROJECT_REPO_ID: ${{ secrets.TEST_PROJECT_REPO_ID }} TEST_PROJECT_REPO_KEY: ${{ secrets.TEST_PROJECT_REPO_KEY }}
해당 워크플로우가 돌면, 생성되는것을 확인 가능하다.
끝 ✨ ✨ ✨ ✨ ✨!!
- 참고 사이트 ✨
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=occidere&logNo=221285584339
Github으로 개인 Maven Repository 만들기
이번 포스팅에서는 Github을 가지고 개인용 Maven Repository를 만들어 보겠다. 목차는 아래와 같다. 목...
blog.naver.com
maven nexus 설치
Nexus 설치 및 Maven 연동조대협 Nexus는 maven에서 사용할 수 있는 가장 널리 사용되는 무료 repository 중의 하나이다. www.sonatype.com 에서 다운로드 받아서 설치할 수 있다. Local에 nexus를 설치하게 되면,
bcho.tistory.com
https://waspro.tistory.com/509?category=860683
[Spring Boot] Spring Boot Maven Repo 구축(Nexus2 OSS 내부 저장소)
이번 포스팅에서는 Spring Boot에서 사용하는 Maven Dependency 리포지토리인 Nexus2 내부 저장소 구축 과정에 대해 살펴보겠습니다. 지난 몇번의 포스팅 동안 폐쇄망 환경에서 구성해야 하는 여러 고려
waspro.tistory.com
https://waspro.tistory.com/510
[Spring Boot] Spring Boot Maven Repo 연동(Nexus2 OSS 내부 저장소)
이번 포스팅에서는 지난 포스팅에서 구축한 Maven Dependency 리포지토리인 Nexus2 내부 저장소와의 연동 과정에 대해 알아보겠습니다. 지난 포스팅은 다음을 참고하시기 바랍니다. [Spring Boot] git clone
waspro.tistory.com
https://docs.gradle.org/7.6.1/userguide/publishing_maven.html#publishing_maven:complete_example
Maven Publish Plugin
Prior to Gradle 5.0, the publishing {} block was (by default) implicitly treated as if all the logic inside it was executed after the project is evaluated. This behavior caused quite a bit of confusion and was deprecated in Gradle 4.8, because it was the o
docs.gradle.org
https://doohee94.tistory.com/32
Maven Central에 JAVA 라이브러리 등록하기
Maven Central에 JAVA 라이브러리 등록하기 Controller를 만들면서, requestDto에 validation을 넣어 처리하는 경우가 많다. spring-boot-starter-validation에서 제공하는 어노테이션들로 대부분 커버가 가능했지만,
doohee94.tistory.com
gradle nexus repository upload, maven-publish 연동방법
gradle nexus repository upload, maven-publish 연동방법 gradle 에서 6.0까지만 plug-in 으로 maven (apply maven)을 지원하고 v7 부터는 지원하지 않아 maven-publish 를 사용하게 되었다. 사실 기존 방식이 조금더 직관적
mycup.tistory.com
https://github.com/github/maven-plugins
GitHub - github/maven-plugins: Official GitHub Maven Plugins
Official GitHub Maven Plugins. Contribute to github/maven-plugins development by creating an account on GitHub.
github.com
https://jamcode.tistory.com/38
Github 에 개인 maven repository 생성하기
개인적으로 개발 중인 서버 프레임워크 및 기타 Github 소스들을 쉽게 제공하기 위해서(나에게 제공...;;) maven 을 사용할 수 있는 방법을 찾던 중 혹시나 Github 에 있지 않을까 해서 확인해보니 역시
jamcode.tistory.com
GitHub packages: Single Maven repository for GitHub organization
I would like to use GitHub packages to store Maven artifacts for several repositories in a GitHub organization. Currently, it appears that for each project, a separate (Maven) repository configurat...
stackoverflow.com
https://docs.gradle.org/current/userguide/publishing_maven.html
The Maven Publish Plugin
Prior to Gradle 5.0, the publishing {} block was (by default) implicitly treated as if all the logic inside it was executed after the project is evaluated. This behavior caused quite a bit of confusion and was deprecated in Gradle 4.8, because it was the o
docs.gradle.org
Gradle을 사용하여 Java 패키지 게시 - GitHub Enterprise Cloud Docs
Gradle을 사용하여 CI(연속 통합) 워크플로의 일부로 Java 패키지를 레지스트리에 게시할 수 있습니다.
docs.github.com
GitHub - github를 maven repository로 사용하기(깃허브를 메이븐 레포지토리로 사용하기)
GitHub - github를 maven repository로 사용하기 (깃허브를 메이븐 레포지토리로 사용하기) 이번 포스팅은 GitHub를 maven repository로 이용하는 방법입니다. 혹시 Git에 대한 기본 지식이 조금 부족하시다고 생
xzio.tistory.com
https://jha-memo.tistory.com/149
Git 작업시 personal access token 에러
Fine-grained personal access token (Beta) 어느 날 갑자기 특정 repository에 push가 되지 않았다. 기존에 사용하던 personal access token에 문제가 생겼다고 판단하여, 여러 번 재설정해봤지만 결과는 똑같았다. 그
jha-memo.tistory.com
https://docs.github.com/en/actions/publishing-packages/publishing-java-packages-with-maven
Publishing Java packages with Maven - GitHub Docs
This guide shows you how to create a workflow that publishes Java packages to GitHub Packages and the Maven Central Repository. With a single workflow, you can publish packages to a single repository or to multiple repositories. We recommend that you have
docs.github.com
https://docs.github.com/ko/packages/quickstart
GitHub Packages 빠른 시작 - GitHub Docs
GitHub Actions를 사용해 GitHub Packages에 게시합니다.
docs.github.com
Gradle 레지스트리 작업 - GitHub Docs
패키지를 GitHub Packages에 게시하고 GitHub Packages Gradle 레지스트리에 저장된 패키지를 Java 프로젝트의 종속성으로 사용하도록 Gradle을 구성할 수 있습니다.
docs.github.com
GitHub Actions를 사용하여 패키지 게시 및 설치 - GitHub Docs
GitHub Actions에서 워크플로를 구성하여 GitHub Packages에서 자동으로 패키지를 게시 또는 설치할 수 있습니다.
docs.github.com
https://docs.github.com/ko/enterprise-cloud@latest/actions/publishing-packages/publishing-
'GIT' 카테고리의 다른 글
Github Actions를 이용한 CI / CD 구현하기 (0) 2022.11.27 맥에서 Git Error permission denied to <Unknown User> 문제 발생시 (0) 2022.11.15 Github Actions (0) 2022.11.03 git 기능 구현을 다른 브랜치에서 작성했을 때 (0) 2022.01.25 Git Commit Convention (0) 2021.12.14