I uploaded a maven artefact to the GitHub Package Registry (Beta) and want to add it as maven dependency. I'm already in the Regestry-Beta and activated it for my sample HalloMaven project. Also the mvn deploy
was succesful, so the artifact is public available here:
https://github.com/TobseF/HelloMaven/packages
But how to include it as a maven dependency?
I tried to add it in a fresh sample project with this pom.xml
:
<groupId>de.tfr.test</groupId>
<artifactId>maven-repo-test</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<repository>
<id>github</id>
<name>GitHub TobseF Apache Maven Packages</name>
<url>https://github.com/TobseF/HelloMaven/packages</url>
<!-- also tried:
<url>https://maven.pkg.github.com/HelloMaven/</url> -->
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>github.tobsef</groupId>
<artifactId>hello-maven</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
But the dependency cannot be resolved.
It's strange that the artifactId
is github.tobsef.hello-maven
, which doesn't match the hello-maven
specified in the pom. But I have no clue why the github.tobsef
gets prepended and if the repository url is correct.
The official GitHub Configuring Apache Maven for use with GitHub Package Registry only shows how to push it with credentials. But my repo is public, authentication is not needed.
Setup for the HalloMaven example:
settings.xml
<profiles>
<profile>
<id>github</id>
<repositories>
<repository>
<id>github</id>
<name>GitHub TobseF Apache Maven Packages</name>
<url>https://maven.pkg.github.com/TobseF</url>
</repository>
</repositories>
</profile>
</profiles>
<servers>
<server>
<id>github</id>
<username>${env.GITHUB_USERNAME}</username>
<password>${env.GITHUB_TOKEN}</password>
</server>
</servers>
pom.xml
<groupId>github.tobsef</groupId>
<artifactId>hello-maven</artifactId>
<version>1.2.1</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
</plugin>
</plugins>
</build>
<properties>
<github.global.server>github</github.global.server>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub TobseF Apache Maven Packages</name>
<url>https://maven.pkg.github.com/TobseF/HelloMaven</url>
</repository>
</distributionManagement>
deploy.yml
name: Maven Deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Maven build
run: mvn --file pom.xml package
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Deploy to Github Package Registry
env:
GITHUB_USERNAME: ${{ secrets.GITHUB_USERNAME }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: mvn --settings settings.xml --file pom.xml deploy
The result is a Could not find artifact github.tobsef:hello-maven:pom:1.2.1 in github (https://github.com/TobseF/HelloMaven/packages)
.
Any Idea how to setup the deployment to deploy the correct artifact and how to add it as dependency?
GitHub Packages supports SNAPSHOT versions of Apache Maven. To use the GitHub Packages repository for downloading SNAPSHOT artifacts, enable SNAPSHOTS in the POM of the consuming project or your ~/. m2/settings. xml file.
You can find a package scoped to a repository by going to the main page of the repository and clicking the Packages link to the right of the page. For more information, see "Connecting a repository to a package." The GitHub Packages registries below only use repository-scoped permissions: RubyGems registry.
You can authenticate to GitHub Packages with npm by either editing your per-user ~/. npmrc file to include your personal access token or by logging in to npm on the command line using your username and personal access token. To authenticate by adding your personal access token to your ~/.
OK ā , I found out how to configure it the right way.
You can see a sample project with the working GitHub Actions CI and the GitHub Package Registry here:
š HelloMaven
To see how the dependency can be included check the:
š GitHub-plugin-registry-example Template
The trick was to add an authentification to the GitHub API in the global maven settings.xml
.
<servers>
<server>
<id>github</id>
<username>YOUR_USERNAME</username>
<password>YOUR_AUTH_TOKEN</password>
</server>
</servers>
Replace the YOUR_USERNAME
with your GitHub login name.
Replace the YOUR_AUTH_TOKEN
with a generated GitHub personal access token:
GitHub > Settings > Developer Settings > Personal access tokens > Generate new token:
The token needs at least the read:packages
scope.
Otherwise you will get a Not authorized
exception.
It wasn't clear that this auth is also needed to read a package. Especially because the jar is available without any login on the package page: https://github.com/TobseF/HelloMaven/packages
So it's a little bit nasty because we have to add the <server><id>github</id>...
and hope others will also provide the the repository
with the github
id. Otherwise we have to add a server config for every github dependency.
Keep in mind that every GitHub repo is its own maven repo. So there is no global registry like the maven central. Every dependency has to provide its own repository
link declaration.
But in combination with the GitHub Actions CI, it's a very nice alternative without any third party plugins.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With