Вы скорее всего используете 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?"
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
А как сделать такой же репозиторий на BitBucket?
Тоже интересует, как сделать это на BitBucket
Сделал все как написано. Даже нашел подобные статьи на английском. Все правильно. Но при деплое выдает ошибку:
[ERROR] Failed to execute goal com.github.github:site-maven-plugin:0.9:site (default) on project strlib: Error creating commit: Invalid request.
[ERROR]
[ERROR] Expected data to be of type “object”; value was: nil.
[ERROR] Expected data to be of type “object”; value was: nil. (422)
0.9 поменять версию с 0.9 на 0.10. Гитхаб менял апи.
Поменять github.maven-plugin с 0.9 на 0.10. Гитхаб менял апи.
У меня та же ошибка с версией 0.12 ) Не могу выйти из положения)
Использовал
com.github.github
site-maven-plugin
<!– 0.9–>
(полагаю, что 0.12) и все ОК
Ругается на:
[ERROR] Failed to execute goal com.github.github:site-maven-plugin:0.9:site (default) on project *project_name*: Error creating commit: Invalid request.
[ERROR]
[ERROR] For ‘properties/author’, nil is not an object.
[ERROR] For ‘properties/committer’, nil is not an object.
чет не пойму, каких пропертисов и куда он просит?
[ERROR] Failed to execute goal com.github.github:site-maven-plugin:0.12:site (default) on project common: Error creating commit: Invalid request.
[ERROR]
[ERROR] For ‘properties/name’, nil is not a string.
[ERROR] For ‘properties/name’, nil is not a string. (422)
Зашел в настройки пользователя https://github.com/settings/profile
Указал значения для полей: Name, Public email.
Ошибка исчезла.
Сделал все по инструкции, deploy сказал BUILD SUCCESS, но собранный ветка mvn-repo не появилась.
Такая же проблема, как решили?