Размещение репозитория Maven на github

У меня есть форк небольшой библиотеки с открытым исходным кодом, над которой я работаю на github. Я хотел бы сделать его доступным для других разработчиков через maven, но я не хочу запускать собственный сервер Nexus, и, поскольку это форк, я не могу легко развернуть его на oss.sonatype.org.

Я бы хотел развернуть его на github, чтобы другие могли получить к нему доступ с помощью maven. Как лучше всего это сделать?


person emmby    schedule 23.12.2012    source источник
comment
С какими проблемами лицензирования вы сталкиваетесь в OSS Sonatype? Просто любопытно, так как сам пользуюсь.   -  person Archimedes Trajano    schedule 03.02.2014
comment
Есть инструмент, который позволяет вам напрямую открывать репозиторий GitHub через maven. jitpack.io stackoverflow.com / a / 28483461/3975649   -  person metrimer    schedule 24.04.2015
comment
Github также анонсировал реестр пакетов, поддерживающий maven. В настоящее время в общедоступной бета-версии: github.com/features/package-registry   -  person Kaan    schedule 14.07.2019


Ответы (8)


Лучшее решение, которое мне удалось найти, состоит из следующих шагов:

  1. Создайте ветку с именем mvn-repo для размещения ваших артефактов maven.
  2. Используйте site-maven-plugin github, чтобы отправить свои артефакты на github.
  3. Настройте 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 любого проекта, который зависит от вашего проекта:

<repositories>
    <repository>
        <id>YOUR-PROJECT-NAME-mvn-repo</id>
        <url>https://github.com/YOUR-USERNAME/YOUR-PROJECT-NAME/raw/mvn-repo/</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
    </repository>
</repositories>

Теперь любой проект, для которого требуются ваши файлы jar, будет автоматически загружать их из репозитория github maven.

Изменить: чтобы избежать проблемы, упомянутой в комментариях («Ошибка при создании фиксации: недопустимый запрос. Для« свойства / имя », nil не является строкой.»), Убедитесь, что вы указали имя в своем профиле на github.

person emmby    schedule 23.12.2012
comment
(Обратите внимание, что предпочтительный способ размещения артефактов maven - по-прежнему использовать сервер nexus. Однако использование github может работать как легкая альтернатива, когда существующий сервер или размещение вашего собственного - непростой вариант. Также обратите внимание, что вы не будете иметь возможность напрямую просматривать свой репозиторий maven. Github не позволяет просматривать структуры каталогов при использовании raw. Однако вы всегда можете просмотреть репозиторий, перейдя на свою страницу github и просмотрев ветку mvn-repo.) - person emmby; 23.12.2012
comment
Также обратите внимание, что это решение будет перезаписывать ваши предыдущие артефакты при каждом развертывании. Это подходит для репозиториев моментальных снимков, но не для выпущенных артефактов. Чтобы отключить это поведение, установите <merge>true</merge> в конфигурации site-maven-plugin. Если вы это сделаете, я думаю, вам придется вручную создать ветку mvn-repo в github и удалить все ее файлы в первый раз. - person emmby; 24.12.2012
comment
+1 умный и хорошо оформленный. Моя единственная критика заключается в том, что вы не включили ссылку на сайт плагинов Maven: github.com/github/maven -плагины. Спасибо, я искал способ опубликовать свой сайт Maven на github! - person Mark O'Connor; 24.12.2012
comment
Альтернативный подход, который, возможно, решит вашу проблему с версией: cemerick. com / 2010/08/24 / hosting-maven-repos-on-github. Менее элегантно, но использует клиент Maven для локальной публикации. Возможно, это можно было бы включить в новый плагин Maven для git. - person Mark O'Connor; 24.12.2012
comment
Спасибо, Марк! Спасибо за ссылку. Я действительно включил ссылку на github.com/github/maven-plugins#readme , но полезно иметь его и здесь. Кроме того, ссылка на cemerick была отправной точкой для этого решения. Это хороший материал, но он не автоматизирует отправку на github. - person emmby; 24.12.2012
comment
Беру свою критику :-) - person Mark O'Connor; 24.12.2012
comment
Этот умный прием, кажется, работает, если у вас есть исходный код для jar-файла, который вы хотите опубликовать, но что, если у вас нет источника? - person Ring; 06.01.2013
comment
Спасибо за этот классный подход @emmby. Но, как упоминалось в сообщении ниже, не могли бы вы немного пояснить, как POM другого проекта будет ссылаться на двоичные файлы, которые мы помещаем в наше репо ...? В частности, что это делает с <id> & <url> элементами репозитория? Есть там какая-то конвенция ..? Можно ли проверить URL-адрес, чтобы убедиться, что он работает нормально ...? Мне удалось создать и разместить ветку mvn-repo для своего проекта на GitHub. Но неясно, как указать URL-адрес репо и идентификатор в POM зависимого проекта. (См. Мой пост ниже). Большое спасибо. - person fritz; 13.03.2013
comment
Хотя я указал имя пользователя и пароль в settings.xml, при использовании github в качестве репозитория сборка не может загружать файлы. <repositories> <repository> <id>id</id> <url>https://github.com/My-Group/comapny/tree/mvn-repo/</url> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> - person Nandish A; 14.03.2013
comment
@genthaler внес несколько правок, которые полностью сломали это для меня. Конкретно перестал работать раздел distributionManagement. Я вернулся к предыдущей версии, но см. stackoverflow.com/revisions/14013645/3, если вы хотите увидеть его редакции - person emmby; 08.10.2013
comment
Этот подход не работает при использовании двухфакторной аутентификации на github. См. Мое примечание к проблеме здесь: github.com/github/maven- plugins / issues / 36 # issuecomment-31005606 - person Dag; 20.12.2013
comment
Чтобы это работало для многомодульных проектов, вы также можете просто использовать <altDeploymentRepository>internal.repo::default::file://${user.dir}/target/mvn-repo</altDeploymentRepository> с maven-deploy-plugin и <outputDirectory>${user.dir}/target/mvn-repo</outputDirectory> с site-maven- плагин. Это развернет все артефакты в корневом (родительском) проекте и отправит их в соответствующий родительский каталог на github. В противном случае сборка каждого подмодуля перезапишет сборку подмодуля, созданного до ... - person s.d; 25.02.2014
comment
В настройках сервера вы можете опустить свое имя пользователя и заменить пароль токеном доступа с ограниченной областью действия. См .: github.com/github/maven-plugins - person Travis; 14.03.2014
comment
Если вы не хотите указывать свой логин github в файле settings.xml, можно использовать OAuth2 < / а> - person thomas88wp; 31.05.2014
comment
Если вы используете maven версии 3.1 или выше, вам необходимо изменить версию site-maven-plugin на 0.9, иначе вы увидите следующую ошибку: Выполнение по умолчанию цели com.github.github: site-maven-plugin: 0.8: сайт не удалось: несовместимость API была обнаружена при выполнении com.github.github: site-maven-plugin: 0.8: site: java.lang.NoSuchMethodError: org.apache.maven.execution.MavenSession.getRepositorySession () Lorg / sonatype / aether / RepositorySystemSession; - person Geir Engdahl; 05.06.2014
comment
@emmby Спасибо за отличный ответ. Я успешно смог бы разместить репозиторий maven на github. Как я могу добиться этого для битбакета. - person Shashank Agrawal; 19.08.2014
comment
@emmby: замечательный ответ ... все работает как шарм ... единственное, что мне еще предстоит выяснить, это как это сделать, если мое репозиторий git является частным ... любая помощь? - person azi; 13.10.2014
comment
Кажется, это больше не работает с текущим состоянием github - person quarks; 01.12.2014
comment
Два предложения, которые заставят его работать (по крайней мере, для меня): Установить текущую версию плагина Github (сейчас это будет 0.11). Также я бы посоветовал всем использовать токен OAUTH вместо пароля. Вы можете сгенерировать его в «Настройки-› Приложения- ›Персональные токены доступа». Затем вы также можете встроить его в POM через и сохранить токен как переменную среды. <github.global.userName>YourUserName</github.global.userName> <github.global.password>${GITHUB_OAUTH_TOKEN</github.global.password> - person Florian Loch; 12.02.2015
comment
Этот ответ звучит как накладные расходы по сравнению с тем, что предлагает Бэ в своем ответе ... - person iku; 12.03.2015
comment
@ s.d Я попробовал ваше решение, и maven-site-plugin говорит: basedir не существует (несмотря на то, что он действительно существует). :( - person WonderCsabo; 18.04.2015
comment
Есть ли способ использовать это с репозиторием организации? Я попытался использовать название организации в элементе ‹repositoryName›, но это не сработало. Я также пробовал с именами пользователей владельцев организаций к тому же результату. - person Simeon; 03.05.2015
comment
Возможно использование с репо организации. Используйте свое имя пользователя и пароль на github в файле settings.xml и установите <repositoryOwner>your-organization-name</repositoryOwner> в файле pom. - person Max; 13.07.2015
comment
Привет, следуя приведенному выше предложению, я получаю ниже трассировку ошибки при развертывании mvn. org.apache.maven.lifecycle.LifecycleExecutionException: не удалось выполнить цель com.github.github: site-maven-plugin: 0.12: сайт (по умолчанию) в проекте spark-parent_2.10: Ошибка создания фиксации: недопустимый запрос. Для «свойства / имя» nil не является строкой. Для 'properties / name' nil не является строкой. - person piyush.mukati; 12.12.2015
comment
Этот метод подразумевает подход репо на артефакт. Конечно, вы можете использовать один и тот же общий промежуточный каталог для всех артефактов, но как только у вас будет достаточно большое репо, у вас возникнут проблемы с кучей памяти Java. Я бы предпочел использовать плагин Maven exec и вызвать двоичный файл git для отправки новых артефактов. - person lordscales91; 16.12.2016
comment
Кто-нибудь получил это для работы с частными репозиториями по состоянию на декабрь 2016 года? Возможно, избыточно, но я задал здесь вопрос: stackoverflow.com/questions/41192900/. Зависимому проекту не удалось загрузить банку с использованием имени пользователя и пароля или токена, когда репо было установлено как частное. Когда это было публично, все было хорошо. - person Justin; 19.12.2016
comment
@WonderCsabo это случилось со мной, когда я скопировал код выше. Он сделал что-то странное с кодировкой символов в имени файла. Попробуйте явно ввести mvn-repo, он должен работать. - person user1580492; 30.05.2017
comment
Спасибо за этот пост, он очень полезен. Однако после того, как все это заработало в многомодульном проекте, я обнаружил, что существуют некоторые ограничения GitHub на размер артефактов. У нас есть несколько универсальных uber-jar-файлов размером 50 МБ, и загрузка на GitHub для них не удалась (я предполагаю, что из-за размера работали более мелкие). Кроме того, загрузка была очень медленной. Я думаю, что частное репо или одна из услуг - действительно единственный способ реализовать крупный проект. - person dbschwartz; 25.11.2017
comment
Мне потребовалось несколько попыток, чтобы заставить что-то работать с токеном доступа пользователя github. вот это пример в общественном достоянии / microservices-demo / blob / Вам необходимо сгенерировать токен личного доступа GitHub и предоставить ему возможность публикации в репо и прочитать ваш адрес электронной почты согласно github.com/github/maven-plugins/issues/. Затем вам нужно установить токен как envar с export GITHUB_OAUTH_TOKEN=xxx - person simbo1905; 18.02.2019
comment
По состоянию на 31 августа 2020 года это не работает (больше). Когда я пытаюсь получить доступ к своему репо на github с указанным форматом URL https://github.com/YOUR-USERNAME/YOUR-PROJECT-NAME/raw/mvn-repo/, он просто возвращает 404. - person basZero; 01.09.2020

Не используйте GitHub в качестве репозитория Maven.

Изменить: этот вариант получил много голосов против, но без комментариев относительно того, почему. Это правильный вариант независимо от технических возможностей размещения на GitHub. Хостинг на GitHub является неправильным по всем причинам, изложенным ниже, и без комментариев я не могу улучшить ответ, чтобы прояснить ваши проблемы.

Лучший вариант - сотрудничать с исходным проектом

Лучший вариант - убедить исходный проект включить ваши изменения и придерживаться оригинала.

Альтернатива - сохранить свою вилку

Поскольку вы создали форк библиотеки с открытым исходным кодом, и ваш форк также является открытым, вы можете загрузить свой форк в Maven Central (прочтите Руководство по загрузке артефактов в центральный репозиторий), присвоив ему новый groupId и, возможно, новый artifactId.

Рассматривайте этот вариант только в том случае, если вы хотите поддерживать этот форк до тех пор, пока изменения не будут внесены в исходный проект, а затем вам следует отказаться от этого.

Серьезно подумайте, является ли форк правильным вариантом. Прочтите множество результатов Google по запросу "почему бы не использовать форк"

Рассуждения

Раздутие репозитория банками увеличивает размер загрузки без всякой пользы

Jar - это output вашего проекта, его можно в любой момент регенерировать из inputs, а ваше репо на GitHub должно содержать только inputs.

Не верите мне? Затем проверьте результаты Google на предмет «не хранить двоичные файлы в git».

Справка GitHub Работа с большими файлами расскажет вам то же самое. По общему признанию, jar-файлы не большие, но они больше, чем исходный код, и после того, как jar был создан выпуском, у них нет причин для версионирования - это то, для чего новый выпуск.

Определение нескольких репозиториев в pom.xml замедляет сборку на количество репозиториев, умноженное на количество артефактов

Стивен Коннолли говорит:

Если кто-то добавит ваше репо, это повлияет на его производительность сборки, поскольку теперь у них есть другое репо для проверки артефактов ... Это не большая проблема, если вам нужно добавить только одно репо ... Но проблема растет, и следующее, что вы знаете, Сборка maven проверяет 50 репозиториев для каждого артефакта, а время сборки - собака.

Верно! Maven необходимо проверить каждый артефакт (и его зависимости), определенный в вашем pom.xml, на соответствие каждому репозиторию, который вы определили, поскольку в любом из этих репозиториев может быть доступна более новая версия.

Попробуйте сами, и вы почувствуете боль от медленной сборки.

Лучшее место для артефактов - Maven Central, так как это центральное место для банок, а это означает, что ваша сборка будет проверять только одно место.

Вы можете узнать больше о репозиториях в документации Maven на странице Введение в репозитории

person Bae    schedule 05.03.2014
comment
Полностью согласен, и это имеет смысл для вилок, которые вы хотите оставить на некоторое время. Но это может быть много накладных расходов для небольшого патча к существующему проекту. - person emmby; 06.03.2014
comment
Если она недолговечна, попросите их построить ее сами. Вы всегда будете сталкиваться с подобными компромиссами. - person Bae; 18.03.2014
comment
Я сомневаюсь, что у Github есть проблемы с этим, поскольку они написали плагин, который включает эту возможность. Согласен, это меньше, чем идея, но c'est la vie. - person PHY6; 25.06.2014
comment
Не всегда возможно развернуть проект с открытым исходным кодом на Sonatype. Например, когда ваш проект зависит от другого проекта с открытым исходным кодом, который еще не развернут (и его нельзя развернуть, потому что он не соответствует требованиям сонатипа). - person Gab; 28.08.2014
comment
@Gab, тогда ваша зависимость на самом деле не с открытым исходным кодом. Вам следует связаться с другим проектом, объяснить это и заставить их исправить свое лицензирование. (В прошлом виновником такого поведения была Солнце) - person Bae; 08.10.2014
comment
@Bae Это не вопрос лицензирования. Некоторые владельцы проектов решают не публиковать в центре внимания просто потому, что это не их приоритет. Ваш путь невозможен в реальном мире. Если вы хотите протестировать: убедите это опубликовать в Центре code.google.com/p/sd -dss. Это большой проект с открытым исходным кодом, финансируемый сообществом ЕС :) - person Gab; 12.10.2014
comment
@Gab Тогда отправь это в Central. В документации Sonatype описаны необходимые шаги, и если это действительно открытый исходный код, то любой может это сделать. - person Bae; 13.10.2014
comment
@Bae ссылка UsageGuide мертва. Не могли бы вы обновить его? Я думаю, что новое местоположение - central.sonatype.org/pages/ossrh-guide.html < / а> - person Justin Wrobel; 12.12.2014
comment
Есть еще одна проблема с решением github: если кто-то хочет использовать ваши материалы, он хочет быть уверенным, что репо не потеряет артефакт, не отключится или что-то еще. Удалить репо на Gitrhub очень просто. На Центральной не все так просто. Однако использование github для снэпшотов кажется разумным. - person user1050755; 02.03.2016
comment
Как насчет простого аргумента, что использование Github ускоряет работу новичка в 10 раз? Обучение, практика и устранение неполадок при централизованном развертывании maven потребуют годы для новичка. Это совершенно не удобно - person Andrey Chaschev; 13.11.2017
comment
@AndreyChaschev Как указано в решении, ваш компромисс заключается в том, что оно замедляет вашу сборку для каждого дополнительного репозитория Maven, который требует проверки. Если у вас есть достоверные отзывы о проблемах с удобством использования Maven Central, постарайтесь их исправить. Добавление слоев обходных путей - тоже неправильный ответ. - person Bae; 13.11.2017
comment
@Bar найти способ, который другие люди ценят и на самом деле используют, - лучший способ. JS был медленной, узкой и, скажем так, несерьезной платформой вначале, но теперь эта система развертывания артефактов оставляет Java далеко позади. Все благодаря сообществу. Github представляет сообщество и прост в использовании. Другая доступная вещь - это размещенный на Maven репозиторий в JFrog's Bintray, который является бесплатным для Open Source. - person Andrey Chaschev; 16.11.2017
comment
Вы правы, попробовав описанный выше подход, я обнаружил, что с большими uber-jar API GitHub будет их использовать, и нам пришлось отказаться от этого направления. Учитывая ограничения и время, необходимое для загрузки на GitHub, это убедило меня, что GitHub - просто неподходящий инструмент. Кто-то прокомментировал, что GitHub создал этот плагин, и это правда, но на самом деле он предназначен для страниц GitHub (которые небольшие и не являются проблемой). Лучше всего разместить собственное репозиторий Maven или, возможно, одну из репозиториев (хотя услуги не выглядят великолепно или очень дороги). - person dbschwartz; 25.11.2017
comment
этот вариант получил бы меньше голосов, если бы он действительно объяснял, почему использование репозитория на основе github, в частности, плохо, вместо того, чтобы просто распространять FUD об использовании нескольких репозиториев и больших файлов в git в целом - person OlegYch; 25.01.2018
comment
@OlegYch Спасибо за отзыв. Не могли бы вы уточнить, почему детали 1) и 2) соответствуют FUD. Это явные и явные причины того, почему репозиторий на основе github - плохая идея. - person Bae; 26.01.2018
comment
@Bae это фуд, потому что он предполагает, что а) иметь несколько репозиториев - это всегда плохо, б) иметь двоичные файлы в любом репозитории git - это плохо; и не имеет ничего общего с размещением репозитория maven на github - person OlegYch; 28.01.2018
comment
@OlegYch Согласно объяснению, а) наличие нескольких репозиториев замедляет вашу сборку maven, поскольку каждый артефакт проверяется в каждом репозитории. Это не FUD, это факт. B) git предназначен для управления версиями, двоичные артефакты - это выходы и что-то, что можно регенерировать, они не получают выгоды от управления версиями и алгоритмов дифференцирования git, они просто раздувают ваше репозиторий git и замедляют людей клоны. Но я понимаю, что ответ явно не объясняет этого. - person Bae; 28.01.2018
comment
@OlegYch Спасибо за отзыв, я обновил текст ответа, чтобы добавить больше деталей. - person Bae; 28.01.2018
comment
GitHub представил решение git-lfs.github.com, которое стоит 5 долларов в месяц за 50 ГБ хранилища и 50 ГБ. пропускная способность. - person n0mer; 20.02.2018
comment
@ n0mer Это замечательно по поводу git-lfs, но как это решает реальные проблемы, которые я поднимаю в этом ответе? Это не так. Если это открытый исходный код, то он принадлежит только одному репо Maven Central. - person Bae; 20.02.2018
comment
@Bae он решает вашу проблему не хранить двоичные файлы в git - и предлагает подходящий способ смягчить его. - person n0mer; 20.02.2018
comment
@ n0mer Достаточно честно, вздутие живота - меньшая из проблем :) - person Bae; 20.02.2018
comment
если вы хотите только ускорить синхронизацию Gradle, вы можете увидеть следующее сообщение stackoverflow.com/a/57686895/2629825 - person Muhammad Omer; 28.08.2019

Вы можете использовать JitPack (бесплатно для общедоступных репозиториев Git), чтобы представить свой репозиторий GitHub как артефакт Maven. Это очень легко. Вашим пользователям нужно будет добавить это в свой pom.xml:

  1. Добавить репозиторий:
<repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
</repository>
  1. Добавить зависимость:
<dependency>
    <groupId>com.github.User</groupId>
    <artifactId>Repo name</artifactId>
    <version>Release tag</version>
</dependency>

Как ответил в другом месте, идея состоит в том, что JitPack создаст ваше репозиторий GitHub и будет обслуживать банки. Требуется наличие файла сборки и выпуска GitHub.

Приятно то, что вам не нужно заниматься развертыванием и загрузкой. Поскольку вы не хотели поддерживать свой собственный репозиторий артефактов, он хорошо подходит для ваших нужд.

person Andrejs    schedule 04.05.2015
comment
JitPack довольно хорош, но заставляет вас менять каждый идентификатор группы, который у вас есть. Они говорят, что этого можно избежать, но для этого необходимо добавить запись в DNS вашей компании, что в большинстве случаев совершенно непрактично. Однажды я пробовал с JP, потом решил, что это слишком глупо, чтобы продолжать. - person zakmck; 22.09.2015
comment
Менять groupId ваших проектов не нужно. Вы по-прежнему можете установить эти проекты, используя groupId com.github.User. Но, возможно, ваш вариант использования другой. - person Andrejs; 22.09.2015
comment
Да, очень много. Потому что у меня уже есть десятки их в моей организации и внешних пользователей, и потому что я хочу, чтобы на них был мой собственный бренд. Как можно быть таким глупым, чтобы заставить меня вступить в свою группу? Это одна из причин, по которой я подумываю о смене карьеры. - person zakmck; 22.09.2015
comment
Более того, я не вижу реальной необходимости для парней из JP выдвигать мне такое требование (они могли бы просто перехватить запросы Maven из спецификации репозитория). - person zakmck; 22.09.2015
comment
Конечно, но тогда вы можете легко подделать groupId и притвориться другой организацией. GroupId нужно как-то проверить, и записи DNS - один из способов сделать это. Как бы вы с этим справились? - person Andrejs; 22.09.2015
comment
Но это можно решить другими способами, например добавление / user или / organization к URL-адресу репозитория. На самом деле это то, что уже было хорошо в Maven, я не вижу разумной причины вводить собственную систему координат, которую невозможно соблюдать в большинстве ситуаций. И обидно, потому что в остальном JP очень крутой. - person zakmck; 22.09.2015
comment
Что ж, звучит разумно. Может быть, открыть запрос функции? :) - person Andrejs; 23.09.2015
comment
Хорошая идея, у меня получилось: github.com/jitpack/jitpack.io/issues / 209, спасибо :-) - person zakmck; 23.09.2015
comment
Кроме того, Maven Central перестанет поддерживать com.github.* с апреля 2021 года, альтернативой является использование io.github.* central.sonatype.org/changelog/ - person julian-alarcon; 13.04.2021

С 2019 года вы можете использовать новую функциональность под названием Реестр пакетов Github.

В основном процесс:

  • создать новый токен личного доступа из настроек github
  • добавьте информацию о репозитории и токене в свой settings.xml
  • развернуть с помощью

    mvn deploy -Dregistry=https://maven.pkg.github.com/yourusername -Dtoken=yor_token  
    
person Ruslan López    schedule 29.09.2019
comment
По состоянию на 2019 год это лучший вариант. - person HRJ; 07.12.2019
comment
Но для использования его кем-то другим, похоже, ему / ей нужно настроить settings.xml с соответствующим URL-адресом и информацией об авторизации. - person hemu; 09.05.2020
comment
Очень странно ... Вы создаете свой общедоступный пакет, но другим людям нужна аутентификация перед его получением - person Amerousful; 12.05.2020
comment
Тем не менее, для частных репозиториев, после сертификации использования в месяц, цена становится очевидной. - person Lokeshwar Tailor; 12.06.2020
comment
Github Package Registry бесполезен для проектов с открытым исходным кодом, потому что клиенты не могут загружать артефакты без авторизации. - person expert; 03.02.2021

Другой альтернативой является использование любого веб-хостинга с поддержкой webdav. Конечно, вам понадобится место для этого где-то, но его легко настроить и он является хорошей альтернативой запуску полноценного сервера nexus.

добавьте это в свой раздел сборки

     <extensions>
        <extension>
        <artifactId>wagon-webdav-jackrabbit</artifactId>
        <groupId>org.apache.maven.wagon</groupId>
        <version>2.2</version>
        </extension>
    </extensions>

Добавьте что-то подобное в раздел управления дистрибутивом

<repository>
    <id>release.repo</id>
    <url>dav:http://repo.jillesvangurp.com/releases/</url>
</repository>

Наконец, не забудьте настроить доступ к репозиторию в вашем settings.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

person Jilles van Gurp    schedule 27.09.2013

В качестве альтернативы Bintray предоставляет бесплатный хостинг репозиториев maven. Вероятно, это хорошая альтернатива Sonatype OSS и Maven Central, если вы абсолютно не хотите переименовывать groupId. Но, пожалуйста, по крайней мере, постарайтесь интегрировать свои изменения в исходную версию или переименовать и опубликовать в Central. Это облегчает другим использование вашей вилки.

person Guillaume    schedule 24.08.2014
comment
Я не мог поверить в это, когда попробовал, но Bintray не поддерживает снимки. Бесполезный. - person zakmck; 22.09.2015
comment
Это больше не бесплатно. 150 долларов в месяц. - person AndroidDev; 06.10.2016
comment
Я думаю, что это плата за проекты программного обеспечения с открытым исходным кодом: jfrog.com/open-source - person iBiber; 09.09.2017
comment
JFrog закрывает Bintray и JCenter. jfrog.com/blog/ - person Joe Bowbeer; 05.04.2021

Если у вас есть только сам файл aar или jar или вы просто не хотите использовать плагины - я создал простой сценарий оболочки. С ним вы можете добиться того же - опубликовать свои артефакты на Github и использовать его в качестве общедоступного репозитория Maven.

person Orest Savchak    schedule 09.10.2018

Я хотел бы добавить еще одну альтернативу, плагин Gradle, над которым я работал в последнее время: magik.

В основном это позволяет публиковать непосредственно в репозитории github, выступающем в качестве репозитория maven.

person elect    schedule 26.05.2021