Para conceder acesso à sua biblioteca, escolha um repositório. Nesta página, você vai conferir as considerações relacionadas à escolha de um tipo de repositório e aprender a criar uma publicação usando o plug-in Maven Publish.
Antes de fazer upload, confira se você preparou a biblioteca para lançamento e configurou todas as variantes de publicação ou recursos de teste necessários.
Escolher um tipo de repositório
As bibliotecas são publicadas como arquivos AAR. Esses arquivos contêm o código compilado como bytecode e bibliotecas nativas, um manifesto do Android e recursos. O pacote não declara nenhuma identidade, versão ou dependência em outras bibliotecas.
Fornecer AARs por meio de um repositório geralmente é a prática recomendada, em vez
de distribuir o AAR diretamente. Isso
ajuda os usuários a entender melhor a origem da biblioteca,
em vez de lidar com um arquivo name.aar
sem detalhes importantes,
como a versão. Ao fazer upgrade para uma versão mais recente de uma biblioteca, use um
repositório para garantir que apenas as dependências necessárias sejam adicionadas
para que os usuários não precisem atualizá-las manualmente.
Há vários benefícios no uso de um repositório para publicar a biblioteca:
- O Gradle pode adicionar automaticamente as dependências da biblioteca ao gráfico de dependências.
- O Gradle pode garantir que uma única versão da biblioteca esteja no gráfico de dependências, resolvendo conflitos caso a biblioteca seja incluída mais de uma vez com versões diferentes.
- O Plug-in do Android para Gradle (AGP, na sigla em inglês) pode fazer uma simplificação mais eficiente se sua biblioteca usar recursos da linguagem Java 8 ou versões mais recentes, reduzindo o tempo de compilação para os usuários.
- Sua biblioteca pode usar a publicação de variantes e incluir recursos como opções de teste.
A distribuição direta do AAR não fornece ao usuário informações sobre a identidade, versão ou dependência da biblioteca. Ao ser publicada em um repositório, a biblioteca é processada por um arquivo separado, parte do mecanismo de repositório. Em repositórios Maven, esse é o arquivo POM. Portanto, é altamente recomendável publicar bibliotecas usando repositórios em vez de distribuir os arquivos AAR manualmente.
Tipos de repositório
Há três tipos de repositório:
- Com os repositórios on-line sem custo financeiro, como o Maven Central, qualquer pessoa pode fazer upload e download de bibliotecas.
- Nos repositórios particulares com acesso via login, é possível controlar a distribuição de bibliotecas particulares.
- Já os repositórios locais baseados em pasta permitem a distribuição de bibliotecas por download manual.
O uso de repositórios locais baseados em pasta é muito semelhante ao fornecimento do AAR por link de download manual ou e-mail. A principal diferença é que você não está enviando apenas o AAR, mas também as informações sobre identidade, versão e dependências.
Distribua um arquivo ZIP do repositório baseado em pasta que contém seu AAR e os metadados. Seus usuários podem extrair o conteúdo do arquivo, adicionar o conteúdo ao projeto e apontar o Gradle para ele. Desse momento em diante, os usuários podem declarar uma dependência na biblioteca usando coordenadas Maven, como se a biblioteca estivesse em um repositório on-line, e aproveitar todas as vantagens mencionadas anteriormente.
Criar a publicação
Publicar usando o plug-in Maven Publish do Gradle. O plug-in Maven Publish permite declarar publicações e
repositórios e criar tarefas para publicá-las nos
repositórios. Essas publicações consomem uma instância de SoftwareComponent
criada pelo
plug-in que gera o build, que pode ser o AGP ou o
plug-in java-library
.
Observe que, ao executar o plug-in Maven Publish com o AGP, os componentes
do software não são criados diretamente após a aplicação. Em vez disso,
criados durante o
afterEvaluate()
para a etapa de callback. Portanto, a publicação que seleciona o componente do software
também precisa ser configurada durante a etapa afterEvaluate()
.
O snippet de código a seguir do arquivo build.gradle
no módulo cria uma
publicação para uma determinada variante criada com singleVariant()
ou
multipleVariants()
:
Groovy
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"]) } } } }
No exemplo anterior, o nome do componente (components.release
) é baseado
no nome que foi dado a singleVariant()
ou multipleVariants()
.
Após declarar uma publicação, crie um repositório de destino.
Publicar em um repositório local
A publicação em um repositório local é muito semelhante à publicação em um repositório remoto, exceto na declaração do repositório. Leia a seção anterior para aprender a publicar em um repositório remoto e criar uma publicação com as variantes desejadas. Em seguida, crie um repositório local:
Groovy
publishing { publications { release(MavenPublication) { ... } } repositories { maven { name = 'myrepo' url = layout.buildDirectory.dir("repo") } } }
Kotlin
publishing { publications { register<MavenPublication>("release") { ... } } repositories { maven { name = "myrepo" url = uri(layout.buildDirectory.dir("repo")) } } }
Isso cria uma tarefa chamada
publishReleaseToMyRepoRepository
, que consiste no
nome da publicação e do repositório. Execute esta tarefa
para gerar o repositório no local fornecido. Neste exemplo, o
repositório é gerado dentro da pasta
de build do projeto, em um diretório repo
.
Se você quiser gerar automaticamente um arquivo ZIP do repositório, use o seguinte código:
Groovy
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") }
Esse código cria uma tarefa Zip
chamada generateRepo
, que consome o conteúdo
da tarefa de publicação e a compacta, garantindo, ao mesmo tempo, que as entradas ZIP estejam em uma
pasta de nível superior chamada mylibrary
. A saída está localizada em
build/distributions
.