{"id":49528,"date":"2025-05-28T03:25:32","date_gmt":"2025-05-28T03:25:32","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49528"},"modified":"2025-05-28T03:26:23","modified_gmt":"2025-05-28T03:26:23","slug":"gitlab-package-registry-a-complete-guide","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/gitlab-package-registry-a-complete-guide\/","title":{"rendered":"GitLab Deploy &#8211; Package Registry &#8211; A Complete Guide"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfd7\ufe0f 1. <strong>Ensure Your GitLab Project Is Maven-Ready<\/strong><\/h2>\n\n\n\n<p>To store your <strong>Java packages (JAR\/WAR)<\/strong> into the <strong>GitLab Package Registry<\/strong> using GitLab CI\/CD (SaaS, version 18.x), you can use GitLab\u2019s built-in <strong>Maven repository<\/strong> support.<\/p>\n\n\n\n<p>Here\u2019s a step-by-step guide to:<\/p>\n\n\n\n<p>\u2705 Build your Java project<br>\u2705 Upload the <code>.jar<\/code> or <code>.war<\/code> to GitLab\u2019s <strong>Maven Package Registry<\/strong><br>\u2705 Do this all through your <strong><code>.gitlab-ci.yml<\/code> pipeline<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">In your project root:<\/h3>\n\n\n\n<p>Ensure <code>pom.xml<\/code> (for Maven) is set up with:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project<\/span>&gt;<\/span>\n  ...\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>com.example<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>my-app<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>1.0.0<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n  ...\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">project<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddea 2. <strong>GitLab Package Registry URL<\/strong><\/h2>\n\n\n\n<p>GitLab SaaS Maven registry endpoint:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">https:\/\/gitlab.com\/api\/v4\/projects\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">PROJECT_ID<\/span>&gt;<\/span>\/packages\/maven\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You can find <code>&lt;PROJECT_ID&gt;<\/code> in your GitLab project settings or by using:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">https:\/\/gitlab.com\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">namespace<\/span>&gt;<\/span>\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project_name<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd10 3. <strong>Create a CI\/CD Job to Publish Artifact<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><code>.gitlab-ci.yml<\/code> example for Maven:<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">stages:\n  - build\n  - publish\n\nvariables:\n  MAVEN_CLI_OPTS: <span class=\"hljs-string\">\"-B -DskipTests\"<\/span>\n\nbuild-job:\n  stage: build\n  image: maven:<span class=\"hljs-number\">3.8<\/span><span class=\"hljs-number\">.7<\/span>-jdk<span class=\"hljs-number\">-11<\/span>\n  script:\n    - mvn $MAVEN_CLI_OPTS clean package\n  artifacts:\n    paths:\n      - target<span class=\"hljs-comment\">\/*.jar\n      - target\/*.war\n\npublish-job:\n  stage: publish\n  image: maven:3.8.7-jdk-11\n  script:\n    - mvn deploy -s settings.xml\n  only:\n    - main\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f 4. <strong>Add <code>settings.xml<\/code> for GitLab Auth<\/strong><\/h2>\n\n\n\n<p>In the root of your repo (or dynamically generate in CI):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">settings<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">servers<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">server<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>gitlab<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">username<\/span>&gt;<\/span>gitlab-ci-token<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">username<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">password<\/span>&gt;<\/span>${env.CI_JOB_TOKEN}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">password<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">server<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">servers<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">settings<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Ensure your <code>pom.xml<\/code> contains:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">distributionManagement<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repository<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>gitlab<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">url<\/span>&gt;<\/span>https:\/\/gitlab.com\/api\/v4\/projects\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">PROJECT_ID<\/span>&gt;<\/span>\/packages\/maven<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">url<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">repository<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">distributionManagement<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udee1\ufe0f 5. <strong>Use the <code>CI_JOB_TOKEN<\/code> Securely<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>gitlab-ci-token<\/code> is a <strong>special user<\/strong> recognized by GitLab\u2019s package registry.<\/li>\n\n\n\n<li><code>CI_JOB_TOKEN<\/code> is <strong>auto-injected<\/strong> in GitLab CI\/CD and scoped to your project.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udce6 6. <strong>Check Published Packages<\/strong><\/h2>\n\n\n\n<p>After the pipeline completes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to your GitLab project<\/li>\n\n\n\n<li>Click on <strong>Packages &amp; Registries \u2192 Package Registry<\/strong><\/li>\n\n\n\n<li>You\u2019ll see your <code>.jar<\/code> or <code>.war<\/code> listed<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 Bonus: Clean Up or Promote Packages<\/h2>\n\n\n\n<p>You can add manual jobs to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Promote packages to another environment<\/li>\n\n\n\n<li>Delete old versions via API<\/li>\n\n\n\n<li>Install them in another Java project using Maven:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>com.example<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>my-app<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>1.0.0<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Summary<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Step<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>Build Artifact<\/td><td>Use <code>mvn package<\/code> in CI job<\/td><\/tr><tr><td>Upload to GitLab<\/td><td>Use <code>mvn deploy<\/code> with GitLab Maven repo<\/td><\/tr><tr><td>Auth<\/td><td>Use <code>CI_JOB_TOKEN<\/code> with <code>gitlab-ci-token<\/code><\/td><\/tr><tr><td>View<\/td><td>Packages tab in GitLab UI<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to use Package registry using Gradle<\/h2>\n\n\n\n<p>Here is a <strong>step-by-step guide<\/strong> to publish <strong>JAR\/WAR packages from a Gradle-based Java project<\/strong> to <strong>GitLab\u2019s Maven Package Registry<\/strong>, using <strong>GitLab SaaS 18.x<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Overview<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You\u2019ll use GitLab\u2019s <strong>Maven-compatible Package Registry<\/strong><\/li>\n\n\n\n<li>You\u2019ll configure Gradle to use GitLab as a Maven repo<\/li>\n\n\n\n<li>You\u2019ll automate it using <code>.gitlab-ci.yml<\/code> and <code>CI_JOB_TOKEN<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcc1 1. <strong>Setup Your Gradle Project<\/strong><\/h2>\n\n\n\n<p>In your <code>build.gradle<\/code> file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">plugins {\n    id <span class=\"hljs-string\">'java'<\/span>\n    id <span class=\"hljs-string\">'maven-publish'<\/span>\n}\n\ngroup = <span class=\"hljs-string\">'com.example'<\/span>\nversion = <span class=\"hljs-string\">'1.0.0'<\/span>\n\npublishing {\n    publications {\n        mavenJava(MavenPublication) {\n            <span class=\"hljs-keyword\">from<\/span> components.java\n        }\n    }\n    repositories {\n        maven {\n            name = <span class=\"hljs-string\">\"GitLab\"<\/span>\n            url = uri(<span class=\"hljs-string\">\"https:\/\/gitlab.com\/api\/v4\/projects\/&lt;PROJECT_ID&gt;\/packages\/maven\"<\/span>)\n            credentials {\n                username = project.findProperty(<span class=\"hljs-string\">\"gitlabUser\"<\/span>) ?: System.getenv(<span class=\"hljs-string\">\"CI_JOB_TOKEN\"<\/span>)\n                password = project.findProperty(<span class=\"hljs-string\">\"gitlabToken\"<\/span>) ?: System.getenv(<span class=\"hljs-string\">\"CI_JOB_TOKEN\"<\/span>)\n            }\n        }\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Replace <code>&lt;PROJECT_ID&gt;<\/code> with your GitLab project ID. You can find it on the project homepage (e.g., <code>gitlab.com\/api\/v4\/projects\/1234567<\/code>).<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd10 2. <strong>No Hardcoded Credentials<\/strong><\/h2>\n\n\n\n<p>Do <strong>not<\/strong> store username\/token in code.<\/p>\n\n\n\n<p>In CI\/CD, GitLab will inject <code>CI_JOB_TOKEN<\/code> automatically. For local testing, you can override via <code>gradle.properties<\/code> or CLI:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">gitlabUser=gitlab-ci-token\ngitlabToken=<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">your<\/span> <span class=\"hljs-attr\">personal<\/span> <span class=\"hljs-attr\">access<\/span> <span class=\"hljs-attr\">token<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddea 3. <strong>Test Locally (Optional)<\/strong><\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">.\/gradlew publish \\\n  -PgitlabUser=gitlab-ci-token \\\n  -PgitlabToken=<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">your<\/span> <span class=\"hljs-attr\">GitLab<\/span> <span class=\"hljs-attr\">personal<\/span> <span class=\"hljs-attr\">access<\/span> <span class=\"hljs-attr\">token<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f 4. <strong>Create <code>.gitlab-ci.yml<\/code><\/strong><\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">stages:\n  - build\n  - publish\n\n<span class=\"hljs-attr\">variables<\/span>:\n  GRADLE_USER_HOME: <span class=\"hljs-string\">\"$CI_PROJECT_DIR\/.gradle\"<\/span>\n\nbuild-job:\n  stage: build\n  <span class=\"hljs-attr\">image<\/span>: gradle:<span class=\"hljs-number\">8.2<\/span><span class=\"hljs-number\">.1<\/span>-jdk17\n  <span class=\"hljs-attr\">script<\/span>:\n    - gradle build\n\npublish-job:\n  stage: publish\n  <span class=\"hljs-attr\">image<\/span>: gradle:<span class=\"hljs-number\">8.2<\/span><span class=\"hljs-number\">.1<\/span>-jdk17\n  <span class=\"hljs-attr\">script<\/span>:\n    - gradle publish\n  <span class=\"hljs-attr\">only<\/span>:\n    - main\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>This will publish the JAR\/WAR file to GitLab Package Registry <strong>on <code>main<\/code> branch only<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udce6 5. <strong>Where to View Packages<\/strong><\/h2>\n\n\n\n<p>After successful pipeline execution:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Navigate to <strong>Your Project \u2192 Packages &amp; Registries \u2192 Package Registry<\/strong><\/li>\n\n\n\n<li>You\u2019ll see the <code>.jar<\/code> or <code>.war<\/code> under your published Maven group.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd01 6. <strong>How to Use in Other Projects<\/strong><\/h2>\n\n\n\n<p>In another Gradle project, consume the published package:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">repositories {\n    maven {\n        url = uri(<span class=\"hljs-string\">\"https:\/\/gitlab.com\/api\/v4\/projects\/&lt;PROJECT_ID&gt;\/packages\/maven\"<\/span>)\n        credentials {\n            username = <span class=\"hljs-string\">'gitlab-ci-token'<\/span>\n            password = System.getenv(<span class=\"hljs-string\">\"CI_JOB_TOKEN\"<\/span>) <span class=\"hljs-comment\">\/\/ or use .env or gradle.properties<\/span>\n        }\n    }\n}\n\ndependencies {\n    implementation <span class=\"hljs-string\">'com.example:your-artifact:1.0.0'<\/span>\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Summary Table<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Step<\/th><th>Action<\/th><\/tr><\/thead><tbody><tr><td><code>build.gradle<\/code><\/td><td>Add <code>maven-publish<\/code>, configure GitLab Maven repo<\/td><\/tr><tr><td>Credentials<\/td><td>Use <code>CI_JOB_TOKEN<\/code> with <code>gitlab-ci-token<\/code><\/td><\/tr><tr><td><code>.gitlab-ci.yml<\/code><\/td><td>Run <code>gradle publish<\/code> from CI\/CD<\/td><\/tr><tr><td>Registry URL<\/td><td><code>https:\/\/gitlab.com\/api\/v4\/projects\/&lt;PROJECT_ID&gt;\/packages\/maven<\/code><\/td><\/tr><tr><td>View Packages<\/td><td>Project \u2192 Packages &amp; Registries \u2192 Package Registry<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udfd7\ufe0f 1. Ensure Your GitLab Project Is Maven-Ready To store your Java packages (JAR\/WAR) into the GitLab Package Registry using GitLab CI\/CD (SaaS, version 18.x), you can use GitLab\u2019s built-in&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49528","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49528"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49528\/revisions"}],"predecessor-version":[{"id":49531,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49528\/revisions\/49531"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}