Как сделать свой Maven Repository на Github?
Вы скорее всего используете Maven, и также подключаете в нем необходимые вам зависимости, но что если вы решили написать свою библиотеку и дать возможность другим пользоваться ею. В этом случае вам необходимо добавить её в Maven репозиторий, об этом и пойдет речь в этом уроке.
Представим что мы пишем очень полезную библиотеку и хотим ею поделится, либо для своих коллег, либо для всех это не важно.
Задача состоит в том как нам сделать эту библиотеку легко доступную для Maven? Путь решения есть, он заключается в создании своего Mavenрепозитория. Почему бы не добавить свою библиотеку в Central Maven Repository? Потому что это не так просто, чтобы это сделать нужно соблюдать много правил, но об этом я возможно расскажу в другом уроке.
Шаг 1. Создание проекта
В этом шаге мы создадим наш проект, который и является нашей супер полезной библиотекой, но по сути это будет пустой проект с одним классом, дамы я мог продемонстрировать суть урока.
Создаем пустой Maven проект:
Представим что это наша новая библиотека, которой мы хотим делится через Maven, чтобы её могли подключать как dependency и использовать.
Давайте в проекте создадим пакет:
И создадим класс MyFramework.java:
package com.devcolibri.mylib;
public class MyFramework {
public static void makeAllProject(){
System.out.println("SUCCESS!");
}
}
Это и будет нашим супер функционалом фреймворка. Теперь наша цель загрузить его в наш maven repository на gihub.
Шаг 2. Конфигурируем Github
Теперь логинимся в Github и создаем новый репозиторий под ваш проект:
прежде чем создавать там Maven Repository нам нужно загрузить проект на Github.
Вот так выглядит создание репозитория у меня:
После этого коммитим свой проект в этот репозиторий. Как это сделать можно прочитать тут.
Шаг 3. Конфигурируем site-maven-plugin
site-maven-plugin – это maven плагин, с помощью которого мы сможем загружать нашу библиотеку на github.
Давайте сконфигурируем данный плагин.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.devcolibri</groupId>
<artifactId>com.devcolibri.newlib</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.7</java.version>
<github.global.server>github</github.global.server>
<github.maven-plugin>0.9</github.maven-plugin>
</properties>
<distributionManagement>
<repository>
<id>internal.repo</id>
<name>Temporary Staging Repository</name>
<url>file://${project.build.directory}/mvn-repo</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository>
</configuration>
</plugin>
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>${github.maven-plugin}</version>
<configuration>
<message>Maven artifacts for ${project.version}</message>
<noJekyll>true</noJekyll>
<outputDirectory>${project.build.directory}/mvn-repo</outputDirectory>
<branch>refs/heads/mvn-repo</branch>
<includes><include>**/*</include></includes>
<repositoryName>NewLibrary</repositoryName>
<repositoryOwner>alexbarchuk</repositoryOwner>
</configuration>
<executions>
<execution>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
В строке 51 мы указываем название репозитория:
B в строке 52 мы должны указать свой username на github:
Теперь осталось зайти в HOME папку на вашем компьютере, если это Windows, то C:/users/
<settings>
<servers>
<server>
<id>github</id>
<username>[username]</username>
<password>[password]</password>
</server>
</servers>
</settings>
И вместо [username] и [password] пишем свои данные через которые вы авторизируетесь на github.
Шаг 4. Собираем и коммитим библиотеку на Github
Теперь можно собрать и закомитить нашу библиотеку на github, для этого в Intellij IDEA выполните две maven фазы clean + deploy.
Вы должны увидеть примерно следующий лог в консоли:
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.devcolibri:com.devcolibri.newlib:jar:1.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 27, column 21
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building com.devcolibri.newlib 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ com.devcolibri.newlib ---
[INFO] Deleting D:\TMP\NewLibrary\com.devcolibri.newlib\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ com.devcolibri.newlib ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ com.devcolibri.newlib ---
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\TMP\NewLibrary\com.devcolibri.newlib\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ com.devcolibri.newlib ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\TMP\NewLibrary\com.devcolibri.newlib\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ com.devcolibri.newlib ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ com.devcolibri.newlib ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ com.devcolibri.newlib ---
[INFO] Building jar: D:\TMP\NewLibrary\com.devcolibri.newlib\target\com.devcolibri.newlib-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ com.devcolibri.newlib ---
[INFO] Installing D:\TMP\NewLibrary\com.devcolibri.newlib\target\com.devcolibri.newlib-1.0-SNAPSHOT.jar to C:\Users\Alexander\.m2\repository\com\devcolibri\com.devcolibri.newlib\1.0-SNAPSHOT\com.devcolibri.newlib-1.0-SNAPSHOT.jar
[INFO] Installing D:\TMP\NewLibrary\com.devcolibri.newlib\pom.xml to C:\Users\Alexander\.m2\repository\com\devcolibri\com.devcolibri.newlib\1.0-SNAPSHOT\com.devcolibri.newlib-1.0-SNAPSHOT.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.8.1:deploy (default-deploy) @ com.devcolibri.newlib ---
[INFO] Using alternate deployment repository internal.repo::default::file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo
Downloading: file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo/com/devcolibri/com.devcolibri.newlib/1.0-SNAPSHOT/maven-metadata.xml
Uploading: file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo/com/devcolibri/com.devcolibri.newlib/1.0-SNAPSHOT/com.devcolibri.newlib-1.0-20140611.031041-1.jar
Uploaded: file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo/com/devcolibri/com.devcolibri.newlib/1.0-SNAPSHOT/com.devcolibri.newlib-1.0-20140611.031041-1.jar (3 KB at 308.6 KB/sec)
Uploading: file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo/com/devcolibri/com.devcolibri.newlib/1.0-SNAPSHOT/com.devcolibri.newlib-1.0-20140611.031041-1.pom
Uploaded: file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo/com/devcolibri/com.devcolibri.newlib/1.0-SNAPSHOT/com.devcolibri.newlib-1.0-20140611.031041-1.pom (3 KB at 363.1 KB/sec)
Downloading: file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo/com/devcolibri/com.devcolibri.newlib/maven-metadata.xml
Uploading: file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo/com/devcolibri/com.devcolibri.newlib/1.0-SNAPSHOT/maven-metadata.xml
Uploaded: file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo/com/devcolibri/com.devcolibri.newlib/1.0-SNAPSHOT/maven-metadata.xml (779 B at 108.7 KB/sec)
Uploading: file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo/com/devcolibri/com.devcolibri.newlib/maven-metadata.xml
Uploaded: file://D:\TMP\NewLibrary\com.devcolibri.newlib\target/mvn-repo/com/devcolibri/com.devcolibri.newlib/maven-metadata.xml (293 B at 15.9 KB/sec)
[INFO]
[INFO] --- site-maven-plugin:0.9:site (default) @ com.devcolibri.newlib ---
[INFO] Creating 12 blobs
[INFO] Creating tree with 13 blob entries
[INFO] Creating commit with SHA-1: b23c8d474f02c8585ccc7eed7c5772df642b3745
[INFO] Creating reference refs/heads/mvn-repo starting at commit b23c8d474f02c8585ccc7eed7c5772df642b3745
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Где [INFO] BUILD SUCCESS говорит о том, что ваша библиотека была успешно загруженна на Github.
Теперь можите зайти на github в свой репозиторий и раскрыть список веток (branch):
И если вы перейдете в эту ветку то там будет собраная библиотека которую мы загружали.
Шаг 4. Подключаем нашу библиотеку в наш новый проект
Теперь давайте подключим библиотеку в наш новый проект, для этого мы в pom.xml добавляем свой репозиторий:
<repositories>
<repository>
<id>[name-project]-mvn-repo</id>
<url>https://raw.github.com/[username]/[name-project]/mvn-repo/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
После этого maven будет понимать откуда брать вашу библиотеку.
[name-project] – это имя вашего проекта, в нашем случае это NewLibrary
[username] – это ваш логин на github, в моем случае это: alexbarchuk
Теперь нужно подключить саму зависимость:
<dependency>
<groupId>com.devcolibri</groupId>
<artifactId>com.devcolibri.newlib</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Вот и все, ваш персональный репозиторий готов.