Хостинг репозитория Maven на github
У меня есть вилка небольшой библиотеки с открытым исходным кодом, над которой я работаю на github. Я хотел бы сделать его доступным для других разработчиков через maven, но я не хочу запускать свой собственный сервер Nexus, и потому что это вилка, которую я не могу легко развернуть oss.sonatype.org.
Что я хотел бы сделать, это развернуть его на github, чтобы другие могли получить к нему доступ с помощью maven. Как лучше всего это сделать?
6 ответов:
лучшее решение, которое я смог найти, состоит из следующих шагов:
- создать ветку под названием
mvn-repo
для размещения артефактов maven.- используйте github site-maven-plugin чтобы подтолкнуть ваши артефакты к 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
так что githubsite-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>
The
mvn-repo
ветка не должна существовать, она будет создана для вас.теперь бегите
mvn clean deploy
снова. Вы должны увидеть, что Maven-deploy-plugin "загружает" файлы в локальный промежуточный репозиторий в целевом каталоге, а затем сайт-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: чтобы избежать проблемы, упомянутой в комментариях ('ошибка создания фиксации: недопустимый запрос. Для' свойства/имя', 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.