Вы скорее всего используете 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/<username>/.m2/settings.xml создаем этот файл со следующийм содержимым:
<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>
Вот и все, ваш персональный репозиторий готов.
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
12 комментариев к статье "Как сделать свой Maven Repository на Github?"