Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
how to create your own maven repository on github

How to create a maven repository for your github project step by step

Clone your project in a separate folder

(note: replace ORGANIZATION and PROJECT)

git clone git clone git@github.com:ORGANIZATION/PROJECT.git my-repository

Cd into it

cd my-repository

Create a new branch (here named repository)

git branch repository

Switch to that branch

git checkout repository

Remove all files

rm -rf file1 file2 file3 .. etc

Install your jar in that directory

(note: replace YOUR_GROUP, YOUR_ARTIFACT, YOUR_VERSION and YOUR_JAR_FILE)

mvn install:install-file -DgroupId=YOUR_GROUP -DartifactId=YOUR_ARTIFACT -Dversion=YOUR_VERSION -Dfile=YOUR_JAR_FILE -Dpackaging=jar -DgeneratePom=true -DlocalRepositoryPath=.  -DcreateChecksum=true

YOUR_JAR_FILE should point to an existent jar file, this is why it's best to create your repository branch in a different folder, so you can reference the existing jar in /your/project/path/target/artifact-x.y.z.jar

Add all generated files, commit and push

git add -A . && git commit -m "released version X.Y.Z"

git push origin repository

Reference your jar from a different project

The repository url you just created is https://raw.github.com/YOUR_ORGANIZATION/YOUR_ARTIFACT/repository/

@EsikAntony

This comment has been minimized.

Copy link

EsikAntony commented Oct 12, 2017

Thank you for your instruction.
But in present time at last step you should use URL: https://github.com/YOUR_ORGANIZATION/YOUR_PROJECT/raw/repository.
And it's more correct to use existing POM (if you have it) instead of generated, just set -DpomFile=YOUR_POM_FILE_FULL_NAME in install:install-file params instead of -DgeneratePom=true.

@lubosek

This comment has been minimized.

Copy link

lubosek commented Nov 8, 2017

This is great! Thanks for the howto.

@jjpe

This comment has been minimized.

Copy link

jjpe commented Nov 19, 2017

This explanation is short, to the point, and most of all, it works. So thanks for this 👍 👍

@kuzeko

This comment has been minimized.

Copy link

kuzeko commented Nov 28, 2017

Thanks a lot! Great tutorial!

@EsikAntony where can I read more about why use ' -DpomFile=YOUR_POM_FILE_FULL_NAME' and what exactly is POM_FILE_FULL_NAME'?

Also, how do I update the pom of another project in order to use this repository?

@hervinhio

This comment has been minimized.

Copy link

hervinhio commented Dec 14, 2017

Thank you very much for this useful post.
However, I got one question, how do I define dependencies on other artifacts ?

@cap5lut

This comment has been minimized.

Copy link

cap5lut commented Dec 28, 2017

Thanks for the small, but on point, tutorial!

@kuzeko

And it's more correct to use existing POM (if you have it) instead of generated

Basically your artifact will have it's own pom.xml, there you set up the specific details for it. With the -DgeneratePom=true you would let maven generate one for you, which can't totally configure your artifact by itself.

@hervinhio
Dependencies for other artifacts are defined in the pom.xml of your artifact. For further information, read the maven manual.

@Tianhao25

This comment has been minimized.

Copy link

Tianhao25 commented Jan 18, 2018

Thanks!
This is a perfect howto I am always expecting.

It's clear and it works!

@n0mer

This comment has been minimized.

Copy link

n0mer commented Feb 20, 2018

@crearo

This comment has been minimized.

Copy link

crearo commented Jul 11, 2018

How do I create the pom.xml? The one generated after ./gradlew assembleRelease isn't being accepted by mvn.

@bvandenbon

This comment has been minimized.

Copy link

bvandenbon commented Jul 28, 2018

worked the first time, but there was a mistake in my release, and I re-released the same version. Now the pom fill that uses/downloads this repository no longer finds it. (although it worked fine the first time).

@Pythonic-Rainbow

This comment has been minimized.

Copy link

Pythonic-Rainbow commented Aug 3, 2018

@bvandenbon how do u make it work

EDIT: I figured it out
Maven URL should be http://raw.github.com/ORGANIZATION/REPO/BRANCH

@sreenivasb1988

This comment has been minimized.

Copy link

sreenivasb1988 commented Jun 7, 2019

For accessing the private repository during maven build, add the following in the maven settings.xml

<servers>
    <server>
      <id>private-repo</id>
	   <configuration>
        <httpHeaders>
          <property>
            <name>Authorization</name>
            <!-- Base64-encoded username:access_token -->
            <value>Basic {Place the token here}</value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
</server>

<repositories>
      <repository>
                    <id>private-repo</id>
                    `<name>Private` Repository</name>
                    <url>{Place the RAW github url here}</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>never</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
       </repository>
</repositories>
@eirikh1996

This comment has been minimized.

Copy link

eirikh1996 commented Aug 29, 2019

Still, source jars are not generated. How do I make it so that source jars and javadocs are generated?

@borsch

This comment has been minimized.

Copy link

borsch commented Sep 7, 2019

@eirikh1996
check this https://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html

you have to specify -Djavadoc & -Dsource arguments which is pathes to corresponding jar files like -Dfile argument

@prydin

This comment has been minimized.

Copy link

prydin commented Nov 6, 2019

The generated POM doesn't contain dependencies. How to I make it use the original POM instead and copy it to the proper directories?

@borsch

This comment has been minimized.

Copy link

borsch commented Nov 6, 2019

@prydin

please check this link https://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html. what you need is pomFile argument

@prydin

This comment has been minimized.

Copy link

prydin commented Nov 7, 2019

Thanks! I suspected it was something really simple I had overlooked!

@neo-expert

This comment has been minimized.

Copy link

neo-expert commented Jan 18, 2020

Yeah this worked. But isn't it a security risc?
Someone could provide a pom.xml and maven would just download a malicious library from a custom Repostory. Does it mean, we should check if the repostories defined in the pom are secure?

@OlivierLD

This comment has been minimized.

Copy link

OlivierLD commented Mar 23, 2020

On the first line, maybe git clone git clone should be replaced with just git clone ?

@smac89

This comment has been minimized.

Copy link

smac89 commented Apr 18, 2020

@dgallegos
The current state of Github maven registries is severely lacking in usability.

You can't delete packages if your repository was a fork, so your only option is to delete the fork and recreate the packages in a private repository.
Also don't bother uploading snapshots because you will never be able to resolve them in maven/gradle. It's quite annoying because they said in their blog, that they now support snapshots, but now I'm not sure what they meant by this.

I did some manual digging and I found that it even messes up the names of the packages.

For example I had uploaded a package with the name groupid: com.foo artifactid: com.foo.bar version: 0.1.0-SNAPSHOT.

When I sent a GET request to https://maven.pkg.github.com/<owner>/<repo>/com/foo/com.foo.bar/maven-metadata.xml, I get this back:

<metadata>
    <groupId>com.foo.com.foo</groupId>
    <artifactId>bar</artifactId>
    <versioning>
        <latest>0.1.0-SNAPSHOT</latest>
        <versions>
            <version>0.1.0-SNAPSHOT</version>
        </versions>
        <lastUpdated>20200418063644</lastUpdated>
    </versioning>
</metadata>

Doesn't make sense.

So I'd say don't bother using it yet until they've worked out the issues.

@firatkucuk

This comment has been minimized.

Copy link

firatkucuk commented May 3, 2020

I use repsy.io, It gives 1 GB of free private maven repository. It's enough for most of the projects.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.