Как опубликовать обычную библиотеку Java, отличную от Android, чтобы она стала доступной для включения в проекты Java через скрипты сборки Maven и Gradle?

Недавно я создал стороннюю библиотеку для Java. В настоящее время я распространяю библиотеку через Github и собственный веб-сайт, на котором я могу загрузить файл JAR. Я хочу сделать так, чтобы разработчики могли использовать Gradle и Maven (и, возможно, другие инструменты автоматизации сборки), чтобы легко включать мою стороннюю библиотеку в свои проекты.

Я новичок в Maven, Gradle, Bintray, JCenter, MavenCentral, Ivy и т. Д. Однако у меня есть опыт работы с Ant, Java и Linux.

Я пытался узнать, как опубликовать свою стороннюю библиотеку, используя указанные выше инструменты / платформы, но я запутался.

  • Судя по тому, что я читал, Gradle, Maven и Ant - конкурирующие технологии. Итак, почему же тогда, в контексте реальных сценариев использования, Gradle, похоже, так тесно переплетен с Maven?
  • Bintray рекламирует себя как платформу для публикации и распространения программного обеспечения. Итак, почему возникла необходимость создавать JCenter как нечто отличное от остальной части Bintray? Что может JCenter, чего не может Bintray?
  • Я создал тестовый пакет и версию на Bintray и загрузил в эту версию файл JAR. Можно ли написать сценарий Gradle, который сможет включить этот файл JAR в качестве зависимости в проект Java? Или пакет нужно «связать» с JCenter?

В принципе, может ли кто-нибудь сказать мне, что происходит со всеми вышеперечисленными технологиями? Не считайте себя обязанным давать ответы на все предложения в этом посте, оканчивающиеся вопросительным знаком. Эти вопросы в первую очередь предназначены для демонстрации моего текущего уровня понимания. Было бы здорово сделать простой обзор того, как технологии работают вместе, и, если возможно, ответ на вопрос в заголовке этого поста.


person lostinthecloud    schedule 24.02.2016    source источник


Ответы (2)


Постараюсь ответить на все предложения, заканчивающиеся вопросительными знаками :)

Судя по тому, что я читал, Gradle, Maven и Ant - конкурирующие технологии. Итак, почему же тогда, в контексте реальных сценариев использования, Gradle, похоже, так тесно переплетен с Maven?

Помимо инструмента сборки и диспетчера зависимостей (в котором Maven конкурирует с Gradle), Maven представил стандартный дескриптор артефакта (файл POM), стандартный макет проекта (src / main / java и т. Д.) И стандартный макет артефакта (groupId/version/artifactId-version.ext) что из-за популярности Maven де-факто стал стандартом в отрасли. Они не особо плохие, поэтому пока застряли, и Gradle с ними тоже работает.

Кроме того, Gradle появился, когда Maven уже был исключительно популярен. Чтобы обогнать такую ​​популярную технологию, Gradle должен был предоставить чистый и простой путь миграции, что означает поддержку проектов со структурой Maven, локальных кешей со структурой Maven и т. Д.

Bintray рекламирует себя как платформу для публикации и распространения программного обеспечения. Итак, почему возникла необходимость создавать JCenter как нечто отличное от остальной части Bintray? Что может JCenter, чего не может Bintray?

JCenter не является чем-то отличным от Bintray. JCenter - это репозиторий внутри Bintray. Этот репозиторий особенный (мы называем этот тип репозитория "Центральным репозиторием" ), поскольку он поддерживается самой командой Bintray и включает (или связывает) самую большую коллекцию библиотек Java в мире. Для многих разработчиков Java (или Android, если на то пошло), которые не собираются публиковать свои работы через Bintray и не заботятся о личных репозиториях других людей, единственное, что представляет интерес в Bintray - это JCenter. Таким образом, люди относятся к JCenter как к отдельной вещи.

Я создал тестовый пакет и версию на Bintray и загрузил в эту версию файл JAR. Можно ли написать сценарий Gradle, который сможет включить этот файл JAR в качестве зависимости в проект Java?

Абсолютно. Кнопка «Настроить» открывает окно, в котором вы найдете инструкции о том, как добавить свой личный репозиторий в Gradle. После этого артефакты из вашего репозитория будут доступны для разрешения в вашем проекте Gradle.

Или пакет нужно «связать» с JCenter?

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

Надеюсь, это помогло.


Я работаю в JFrog, компании, стоящей за Bintray и [artifactory], см. мой профиль для получения дополнительных сведений и ссылок.

person JBaruch    schedule 25.02.2016

На самом деле сложно (почти невозможно) дать ответ, потому что вы задаете несколько вопросов (я насчитал 5 вопросительных знаков), плюс вам нужно объяснение того, как все упомянутые технологии работают вместе (или нет). Это действительно выходит за рамки возможностей и полезности stackexchange.

Однако, если это maven, с которым вы могли бы жить, то, вероятно, вам нужно:

1) разверните свой артефакт в центральном репозитории maven ==> см. https://maven.apache.org/guides/mini/guide-central-repository-upload.html

2) развернуть на каком-либо другом известном публичном репозитории maven (например, sonatype)

3) разместите свое собственное общедоступное репозиторий maven (которое может использоваться другими) и загрузите туда, все еще сохраняя «рекламу» через веб-страницы и страницы github.

person bitrecycling    schedule 25.02.2016
comment
Поскольку существует слишком много вопросов, вы решили ответить на один, который не задавали? :) - person JBaruch; 25.02.2016
comment
@JBaruch: На самом деле я ответил на вопрос 1: как опубликовать обычную библиотеку Java, отличную от Android, чтобы она стала доступной для включения в проекты Java через скрипты сборки Maven и Gradle? из заголовка. Однако я забыл сосчитать этот вопросительный знак. Спасибо за полезный отзыв! - person bitrecycling; 26.02.2016