Prześlij swoją bibliotekę

Aby przyznać dostęp do swojej biblioteki, musisz wybrać repozytorium. Na tej stronie znajdziesz informacje dotyczące wyboru typu repozytorium oraz instrukcje tworzenia publikacji za pomocą wtyczki Maven Publish.

Zanim prześlesz bibliotekę, przygotuj ją do publikacji i skonfiguruj wszystkie niezbędne warianty publikacji lub oprawy testowe.

Wybierz typ repozytorium

Biblioteki są publikowane jako pliki AAR. Pliki te zawierają skompilowany kod w postaci kodu bajtowego i bibliotek natywnych, pliku manifestu Androida oraz zasobów. Sam pakiet nie określa żadnych tożsamości, wersji ani zależności od innych bibliotek.

Sprawdzoną metodą jest udostępnianie AAR w repozytorium zamiast bezpośredniego dystrybucji AAR. Dzięki temu użytkownicy wiedzą, skąd pochodzi biblioteka, zamiast zajmować się plikiem name.aar bez ważnych informacji, takich jak wersja. Przy uaktualnianiu biblioteki do nowszej wersji skorzystaj z repozytorium, aby mieć pewność, że dodane zostaną tylko wymagane zależności nowszej wersji. Dzięki temu użytkownicy nie będą musieli ręcznie aktualizować zależności.

Korzystanie z repozytorium do publikowania biblioteki ma wiele zalet:

  • Gradle może automatycznie dodać zależności biblioteki do wykresu zależności.
  • Gradle może zapewnić, że na wykresie zależności pojawi się tylko jedna wersja biblioteki, rozwiązując konflikty, jeśli biblioteka jest przechodnie dołączana więcej niż raz do różnych wersji.
  • Wtyczka Androida do obsługi Gradle (AGP) na Androidzie może sprawniej odciążać witrynę, jeśli Twoja biblioteka korzysta z funkcji języka Java 8 lub nowszego, co skraca czas kompilacji.
  • Twoja biblioteka może korzystać z publikowania wariantów i zawierać takie funkcje jak poprawki testowe.

Bezpośrednia dystrybucja AAR nie zapewnia użytkownikowi żadnych informacji o tożsamości, wersji czy zależnościach Twojej biblioteki. W przypadku publikowania w repozytorium dystrybucja odbywa się za pomocą osobnego pliku, który jest częścią mechanizmu repozytorium. W przypadku repozytoriów Maven jest to plik POM. Dlatego zdecydowanie zalecamy publikowanie bibliotek za pomocą repozytoriów, a nie ręczne rozpowszechnianie plików AAR.

Typy repozytoriów

Istnieją 3 typy repozytoriów:

  • Bezpłatne repozytoria online, takie jak Maven Central, pozwalają każdemu przesyłać i pobierać biblioteki.
  • Prywatne repozytoria, do których można uzyskać dostęp przez logowanie, umożliwiają kontrolę nad dystrybucją bibliotek prywatnych.
  • Lokalne repozytoria oparte na folderach umożliwiają rozpowszechnianie bibliotek przez pobieranie ręczne.

Korzystanie z lokalnych repozytoriów opartych na folderach przypomina udostępnianie użytkownikom ręcznego linku do pobrania dokumentu AAR lub wysyłanie AAR e-mailem. Główna różnica polega na tym, że wysyłasz nie tylko informacje o AAR, ale też dodatkowe informacje o tożsamości, wersji i zależnościach.

Rozprowadzasz plik ZIP repozytorium opartego na folderach, które zawiera AAR oraz metadane. Użytkownicy mogą następnie wyodrębnić zawartość pliku, dodać ją do swojego projektu i wskazać Gradle. Od tej pory użytkownicy mogą zadeklarować zależność od biblioteki, korzystając ze współrzędnych Maven, jak gdyby biblioteka znajdowała się w repozytorium online, i korzystać ze wszystkich wspomnianych wcześniej korzyści.

Tworzenie publikacji

Publikowanie za pomocą wtyczki Gradle Maven Publish. Wtyczka Maven Publish umożliwia deklarowanie publikacji i repozytoriów oraz tworzenie zadań do publikowania tych publikacji w repozytoriach. Te publikacje wykorzystują instancję SoftwareComponent, którą tworzy wtyczka, która napędza kompilację, czyli AGP lub java-library.

Pamiętaj, że w przypadku używania wtyczki Maven Publish w języku AGP komponenty oprogramowania nie są tworzone bezpośrednio po jej zastosowaniu. Są one tworzone w kroku wywołania zwrotnego afterEvaluate(). Dlatego publikację, która wybiera komponent oprogramowania, trzeba też skonfigurować w kroku afterEvaluate().

Ten fragment kodu w pliku build.gradle na poziomie modułu tworzy publikację dla danego wariantu utworzonej za pomocą funkcji singleVariant() lub multipleVariants():

Odlotowy

publishing {
  publications {
    release(MavenPublication) {
      groupId = 'com.my-company'
      artifactId = 'my-library'
      version = '1.0'

      afterEvaluate {
        from components.release
      }
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      groupId = "com.my-company"
      artifactId = "my-library"
      version = "1.0"

      afterEvaluate {
        from(components["release"])
      }
    }
  }
}

W poprzednim przykładzie nazwa komponentu (components.release) jest oparta na nazwie nadanej komponentowi singleVariant() lub multipleVariants().

Po zadeklarowaniu publikacji musisz utworzyć repozytorium docelowe.

Opublikuj w lokalnym repozytorium

Publikowanie w repozytorium lokalnym jest bardzo podobne do publikowania w repozytorium zdalnym, z wyjątkiem deklaracji repozytorium. Przeczytaj poprzednią sekcję, aby dowiedzieć się, jak publikować w repozytorium zdalnym, aby utworzyć publikację publikującą odpowiedni wariant lub warianty. Następnie utwórz lokalne repozytorium:

Odlotowy

publishing {
  publications {
    release(MavenPublication) {
      ...
    }
  }
  repositories {
    maven {
      name = 'myrepo'
      url = "${project.buildDir}/repo"
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      ...
    }
  }
  repositories {
    maven {
      name = "myrepo"
      url = uri("${project.buildDir}/repo")
    }
  }
}

Spowoduje to utworzenie zadania o nazwie publishReleaseToMyRepoRepository, które składa się z nazwy publikacji i nazwy repozytorium. Uruchom to zadanie, aby wygenerować repozytorium w podanej lokalizacji. W tym przykładzie repozytorium jest generowane w folderze kompilacji projektu w katalogu repo.

Jeśli chcesz automatycznie wygenerować plik ZIP repozytorium, użyj tego kodu:

Odlotowy

tasks.register('generateRepo', Zip) {
  def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository')
  from publishTask.map { it.getRepository().getUrl() }
  into 'mylibrary'
  archiveFileName.set('mylibrary.zip')
}

Kotlin

tasks.register<Zip>("generateRepo") {
  val publishTask = tasks.named(
    "publishReleasePublicationToMyrepoRepository",
    PublishToMavenRepository::class.java)
  from(publishTask.map { it.repository.url })
  into("mylibrary")
  archiveFileName.set("mylibrary.zip")
}

Ten kod tworzy zadanie Zip o nazwie generateRepo, które przetwarza treść zadania publikowania i kompresuje ją, jednocześnie zapewniając, że wpisy pocztowe znajdują się w folderze najwyższego poziomu o nazwie mylibrary. Dane wyjściowe znajdują się w sekcji build/distributions.