Размещение репозитория Maven на github
У меня есть вилка небольшой библиотеки с открытым исходным кодом, над которой я работаю на github. Я хотел бы сделать его доступным для других разработчиков через maven, но я не хочу запускать свой собственный сервер Nexus, и потому что это вилка, я не могу легко развернуть его oss.sonatype.org.
Что я хотел бы сделать, это развернуть его в github, чтобы другие могли получить к нему доступ с помощью maven. Как лучше всего это сделать?
6 ответов
лучшее решение, которое я смог найти, состоит из следующих шагов:
- создать ветку под названием
mvn-repo
для размещения артефактов maven. - используйте github сайт-maven-плагин чтобы подтолкнуть ваши артефакты к github.
- настройка maven для использования удаленного
mvn-repo
как репозиторий maven.
есть несколько преимуществ использования этого подхода:
- артефакты Maven хранятся отдельно из вашего источника в отдельной ветке под названием
mvn-repo
, как и страницы github, хранятся в отдельной ветви под названиемgh-pages
(если вы используете страницы github) - в отличие от некоторых других предлагаемых решений, он не конфликтует с вашим
gh-pages
если вы используете их. - естественно связывается с целью развертывания, поэтому нет новых команд maven для изучения. Просто используйте
mvn deploy
как обычно
типичный способ развертывания артефактов на удаленном maven РЕПО использовать mvn deploy
, поэтому давайте исправим этот механизм для этого решения.
во-первых, скажите maven развернуть артефакты во временное промежуточное расположение внутри целевого каталога. Добавьте это в свой pom.xml
:
<distributionManagement>
<repository>
<id>internal.repo</id>
<name>Temporary Staging Repository</name>
<url>file://${project.build.directory}/mvn-repo</url>
</repository>
</distributionManagement>
<plugins>
<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>
</plugins>
теперь попробуйте запустить mvn clean deploy
. Вы увидите, что он развернул ваш репозиторий maven в target/mvn-repo
. Следующий шаг - заставить его загрузить этот каталог в GitHub.
Добавьте свою аутентификационную информацию в ~/.m2/settings.xml
так что на GitHub site-maven-plugin
можно нажать на GitHub:
<!-- NOTE: MAKE SURE THAT settings.xml IS NOT WORLD READABLE! -->
<settings>
<servers>
<server>
<id>github</id>
<username>YOUR-USERNAME</username>
<password>YOUR-PASSWORD</password>
</server>
</servers>
</settings>
(как уже отмечалось, пожалуйста, убедитесь, что chmod 700 settings.xml
чтобы никто не мог прочитать ваш пароль в файле. Если кто-то знает, как сделать запрос site-maven-plugin для пароля вместо того, чтобы требовать его в конфигурационном файле, дайте мне знать.)
Тогда скажи GitHub site-maven-plugin
о новом сервере, который вы только что настроили, добавив следующее к вашему pom:
<properties>
<!-- github server corresponds to entry in ~/.m2/settings.xml -->
<github.global.server>github</github.global.server>
</properties>
наконец, настроить site-maven-plugin
для загрузки временное промежуточное РЕПО на ваш mvn-repo
ветка на Github:
<build>
<plugins>
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>0.11</version>
<configuration>
<message>Maven artifacts for ${project.version}</message> <!-- git commit message -->
<noJekyll>true</noJekyll> <!-- disable webpage processing -->
<outputDirectory>${project.build.directory}/mvn-repo</outputDirectory> <!-- matches distribution management repository url above -->
<branch>refs/heads/mvn-repo</branch> <!-- remote branch name -->
<includes><include>**/*</include></includes>
<repositoryName>YOUR-REPOSITORY-NAME</repositoryName> <!-- github repo name -->
<repositoryOwner>YOUR-GITHUB-USERNAME</repositoryOwner> <!-- github username -->
</configuration>
<executions>
<!-- run site-maven-plugin's 'site' target as part of the build's normal 'deploy' phase -->
<execution>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
на mvn-repo
филиал не должен существовать, он будет создан для вас.
теперь бегите mvn clean deploy
еще раз. Вы должны увидеть Maven-deploy-plugin "загрузить" файлы в локальный промежуточный репозиторий в целевом каталоге, а затем site-maven-plugin фиксирует эти файлы и отправляет их на сервер.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building DaoCore 1.3-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ greendao ---
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.jar (77 KB at 2936.9 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.pom (3 KB at 1402.3 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/maven-metadata.xml (768 B at 150.0 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/maven-metadata.xml (282 B at 91.8 KB/sec)
[INFO]
[INFO] --- site-maven-plugin:0.7:site (default) @ greendao ---
[INFO] Creating 24 blobs
[INFO] Creating tree with 25 blob entries
[INFO] Creating commit with SHA-1: 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] Updating reference refs/heads/mvn-repo from ab7afb9a228bf33d9e04db39d178f96a7a225593 to 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.595s
[INFO] Finished at: Sun Dec 23 11:23:03 MST 2012
[INFO] Final Memory: 9M/81M
[INFO] ------------------------------------------------------------------------
посещение github.com в браузере выберите mvn-repo
филиала, и проверить что все ваши файлы уже там.
поздравляем!
теперь вы можете развернуть свои артефакты maven в публичное РЕПО бедняка, просто запустив mvn clean deploy
.
есть еще один шаг, который вы хотите сделать, чтобы настроить любые POM, которые зависят от вашего pom, чтобы знать, где находится ваш репозиторий. Добавьте следующий фрагмент в pom любого проекта, который зависит от вашего проекта:
<repositories>
<repository>
<id>YOUR-PROJECT-NAME-mvn-repo</id>
<url>https://raw.github.com/YOUR-USERNAME/YOUR-PROJECT-NAME/mvn-repo/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
теперь любой проект, который требует ваших файлов jar, автоматически загружает их из репозитория github maven.
Edit: чтобы избежать проблемы, упомянутой в комментариях ('ошибка создания фиксации: недопустимый запрос. Для' properties/name ' nil не является строкой.'), убедитесь, что вы указали имя в своем профиле на github.
не используйте GitHub в качестве репозитория Maven.
Edit: эта опция получает много голосов вниз, но никаких комментариев о том, почему. Это правильный вариант, независимо от технических возможностей для фактического размещения на GitHub. Хостинг на GitHub неправильный по всем причинам, изложенным ниже, и без комментариев я не могу улучшить ответ, чтобы прояснить ваши проблемы.
лучший вариант - сотрудничать с оригиналом Проект
лучший вариант-убедить оригинальный проект включить ваши изменения и придерживаться оригинала.
альтернатива-поддерживайте свою собственную вилку
поскольку вы разветвили библиотеку с открытым исходным кодом, и ваша вилка также является открытым исходным кодом, вы можете загрузить свою вилку в Maven Central (читать руководство по загрузке артефактов в центральный репозиторий), давая ему новые groupId
и, возможно, новый artifactId
.
рассмотрите этот вариант, только если вы хотите сохранить эту вилку до тех пор, пока изменения не будут включены в исходный проект, а затем вы должны отказаться от этого.
действительно подумайте, является ли вилка правильным вариантом. Прочитайте мириады результатов Google для 'почему бы не раскошелиться'
мышление
раздувание репозитория с помощью банок увеличивает размер загрузки для no выгода
кувшин-это output
вашего проекта, его можно регенерировать в любое время от своего inputs
, и Ваше РЕПО GitHub должно содержать только inputs
.
не веришь мне? Затем проверьте результаты Google для 'не храните двоичные файлы в git'.
помощь GitHub в работе с большими файлами скажет вам то же самое. По общему признанию, jar не велики, но они больше, чем исходный код, и как только jar был создан выпуск, для которого у них нет причин быть версионными - вот для чего нужен новый выпуск.
определение нескольких репозиториев в вашем pom.xml замедляет сборку по количеству репозиториев, умноженному на количество артефактов
Стивен Коннолли говорит:
если кто-то добавляет ваше РЕПО, они влияют на производительность сборки поскольку теперь у них есть еще одно РЕПО для проверки артефактов... Это не большой проблема, если вам нужно только добавить один РЕПО... Но проблема растет и дальше вещь, которую вы знаете, ваша сборка maven проверяет 50 репозиториев для каждого артефакта и время сборки-это собака.
правильно! Maven должен проверить каждый артефакт (и его зависимости), определенный в вашем pom.XML на каждый репозиторий определен, поскольку более новая версия может быть доступна в любом из этих репозиториев.
попробуйте это для себя, и вы почувствуете боль медленного построения.
лучшее место для артефактов находится в Maven Central, так как его центральное место для банок, и это означает, что ваша сборка будет проверять только один место.
вы можете прочитать больше о репозиториях в документации Maven на введение в репозиториях
можно использовать JitPack чтобы выставить репозиторий GitHub как артефакт Maven. Это очень просто. Ваши пользователи должны добавить это в свой pom.XML-код:
- добавить репозиторий:
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
- добавить зависимость:
<dependency>
<groupId>com.github.User</groupId>
<artifactId>Repo name</artifactId>
<version>Release tag</version>
</dependency>
ответ везде идея в том, что JitPack построит ваше РЕПО GitHub и будет обслуживать банки. Требование состоит в том, что у вас есть файл сборки и GitHub освобождать.
хорошо, что вам не нужно обрабатывать развертывание и загрузку. Поскольку вы не хотели поддерживать свой собственный репозиторий артефактов, он хорошо подходит для ваших нужд.
Другой альтернативой является использование любого веб-хостинга с поддержкой webdav. Вам понадобится некоторое пространство для этого где-то, конечно, но это просто настроить и хорошая альтернатива запуску полномасштабного сервера nexus.
добавьте это в раздел сборки
<extensions>
<extension>
<artifactId>wagon-webdav-jackrabbit</artifactId>
<groupId>org.apache.maven.wagon</groupId>
<version>2.2</version>
</extension>
</extensions>
добавьте что-то вроде этого в раздел distributionManagement
<repository>
<id>release.repo</id>
<url>dav:http://repo.jillesvangurp.com/releases/</url>
</repository>
наконец, убедитесь, что вы настроили доступ к репозиторию в своих настройках.в XML
добавить это к вашему раздел серверы
<server>
<id>release.repo</id>
<username>xxxx</username>
<password>xxxx</password>
</server>
и определение для вашего раздела репозиториев
<repository>
<id>release.repo</id>
<url>http://repo.jillesvangurp.com/releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
наконец, если у вас есть какой-либо стандартный хостинг php, вы можете использовать что-то вроде sabredav для добавления возможностей webdav.
преимущества: у вас есть собственный репозиторий maven Недостатки: у вас нет никаких возможностей управления в nexus; вам нужна настройка webdav где-то
в качестве альтернативы, Bintray предоставляет бесплатный хостинг репозиториев maven. Это, вероятно, хорошая альтернатива Sonatype OSS и Maven Central, если вы абсолютно не хотите переименовывать groupId. Но, пожалуйста, хотя бы попытайтесь интегрировать свои изменения вверх по течению или переименовать и опубликовать в Central. Это делает его гораздо проще для других, чтобы использовать вилку.
Если у вас есть только aar
или jar
сам файл или просто не хочу использовать плагины-я создал простой скрипт. Вы можете добиться того же - опубликовать свои артефакты в Github и использовать его в качестве публичного репозитория Maven.