Criando libs no Gradle com Android – Parte 3

Posted by rlecheta on janeiro 15, 2015
Android, Tutorial

No terceiro e último post sobre como fazer libs com gradle e Android Studio, vamos aprender a publicar um projeto no servidor do Maven Central.

1) O que é o Maven Central?

O Maven Central é um repositório de código utilizado por diversos projetos mundialmente, e foi criado pelo pessoal da Sonatype.

Ao desenvolver um projeto Android as dependências são declaradas no arquivo build.gradle. Um exemplo disso é a declaração da biblioteca de compatibilidade v7 do Google.

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
}

Mas ao declarar esta dependência de qual repositório ela é buscada?

Por padrão todas as bibliotecas são buscadas no Maven Central. Se você quiser é possível declarar o repositório mavenCentral(), mas não é preciso, pois por padrão o Gradle já o utiliza.

repositories {
    mavenCentral();
}

Então se você precisa disponibilizar uma biblioteca open-source para a comunidade você precisa disponibilizá-la no Mavel Central.

2) O site http://search.maven.org

O repositório do Maven Central está nesse link:

https://repo1.maven.org/maven2/

Mas para visualizar o conteúdo você deve buscar a biblioteca no site http://search.maven.org/.

Screenshot from 2015-01-15 14:06:37

3) Criando uma conta no JIRA da Sonatype

Chega de teoria, vamos para a parte prática. Para publicar um projeto no Maven Central você vai precisar de um login e senha que precisa ser criado no servidor Nexus da Sonatype.

Para fazer o registro é utilizado o JIRA.

1) Acesse esse link e crie uma Issue para configurar o seu projeto.

Essa Issue serve para solicitar ao pessoal do Sonatype para criar o projeto no Maven Central.

https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

Para criar uma Issue antes você precisará fazer um cadastro e obter seu login.

Na Issue você deve descrever o seu projeto, e preencher os campos como o groupId, project URL, SCM URL (ex: URL do github), etc.

Depois de criar a Issue aguarde, pois pode levar 2 dias úteis para ela ser aprovada. Você receberá as respostas pelo próprio sistema do JIRA, basta acompanhar a issue que você criou.

4) Fazendo o deploy no Nexus da Sonatype

Uma vez que a issue com a solicitação para criar o projeto foi aprovada, você receberá um e-mail com várias informações, portanto leia tudo.

Agora estamos prontos para fazer o deploy no Maven Central, mas não podemos fazer isso diretamente. É necessário antes fazer o deploy no repositório staging do Nexus da Sonatype, pois eles vão validar se o pacote está OK antes de fazer o deploy no Maven Central.

A URL deste repositório é:

https://oss.sonatype.org/service/local/staging/deploy/maven2/

E a URL para enviar snapshots é:

https://oss.sonatype.org/content/repositories/snapshots/

Para fazer o deploy no repositório do Sonatype é preciso informar alguns parâmetros sobre o controle de versão SCM, licença do código, nome do desenvolvedor, etc, e portanto eu gosto de utilizar um script criado por Chris Banes do Google.

Segue o script que faz o deploy no Maven Central.

https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle

Para utilizar este script basta adicioná-lo na última linha do seu arquivo build.gradle.

 

apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'

task install(dependsOn: uploadArchives)

 

O script vai fazer o deploy no Repositório do Nexus da Sonatype, você só precisa informar alguns parâmetros. Para isso preencha o arquivo app/gradle.properties com as variáveis que o script precisa.

POM_NAME=LivroAndroidUtils
POM_PACKAGING=aar

VERSION_NAME=0.0.4
VERSION_CODE=1
GROUP=br.com.livroandroid
POM_ARTIFACT_ID=android-utils

POM_DESCRIPTION=Library used in the samples of Livro Android Book
POM_URL=https://github.com/rlecheta/LivroAndroidUtils
POM_SCM_URL=https://github.com/rlecheta/LivroAndroidUtils
POM_SCM_CONNECTION=scm:git@github.com:rlecheta/LivroAndroidUtils.git
POM_SCM_DEV_CONNECTION=scm:git@github.com:rlecheta/LivroAndroidUtils.git
POM_LICENCE_NAME=The Apache Software License, Version 2.0
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo
POM_DEVELOPER_ID=rlecheta
POM_DEVELOPER_NAME=Ricardo Lecheta

Pronto está quase, agora você só precisa informar seu usuário e senha para fazer o deploy no Nexus da Sonatype, e também o arquivo gpg para assinar o build.

Screenshot from 2015-01-15 14:39:41

Este arquivo gradle.properties deve ser criado na pasta do usuário, portanto no meu caso o caminho é: /home/ricardo/.gradle/gradle.properties.

NEXUS_USERNAME=your_sonatype_nexus_user
NEXUS_PASSWORD=your_sonatype_nexus_password

signing.keyId=your_gpg_key
signing.password=your_gpg_password
signing.secretKeyRingFile=/home/ricardo/.gradle/your_gpg_file.gpg

Este arquivo não precisa ser colocado no controle de versão, e justamente por isso ele deve ficar na pasta do seu usuário. O gradle vai automaticamente ler esse arquivo ao fazer o build.

Note que você precisa preencher o usuário e senha do Nexus, e também precisa criar o arquivo gpg.

5) Criando o arquivo gpg para assinar o build

Para criar suas chaves abra um terminal e digite:

 gpg –gen-key

Screenshot from 2015-01-15 14:50:16

Depois execute o seguinte comando para listar suas chave:
gpg --list-keys

A primeira parte da linha da sua chave possui o padrão “pub XXXXX/YYYYYYYY <date>”.

O que você precisa é a parte YYYYYYYY, pois essa é a sua chave do arquivo gpg.

Screenshot from 2015-01-15 14:51:08

Por último você precisa enviar suas chaves para o servidor, portanto utilize o seguinte comando.

 gpg --keyserver hkp://keyserver.ubuntu.com --send-keys YYYYYYYY
 $ gpg --keyserver hkp://pgp.mit.edu --send-keys YYYYYYYY
 

6) Criando o arquivo gpg (No Windows)

Caso você utilize o Windows, você pode criar as chaves gpg utilizando o software Kleopatra (https://www.kde.org/applications/utilities/kleopatra/).

Ele é fácil de utilizar, basta ir no menu File > New Certificate. Depois de criar o certificado você pode exportá-lo para os servidores clicando na chave com o botão direito e utilizando a opção > Export Certificates to Server.

kleopatra

7) Executando o gradle install para publicar o build

Uma vez que tudo está configurado, execute o gradle install pelo Android Studio.

Lembre-se que fiz o gradle install depender do uploadArchives.

“task install(dependsOn: uploadArchives)”

Screenshot from 2015-01-15 14:54:31

Resultado.

Screenshot from 2015-01-15 14:54:42

8) Fazendo Close e Release do artefato

Depois de publicar seu artefato no Nexus, você precisa ir até o repositório staging e clicar em Close ou em Drop.

https://oss.sonatype.org/#stagingRepositories

O Drop é utilizado caso você viu que tem algo errado com um build e queira descartá-lo.

Ao fazer Close o servidor vai validar se você informou todos os parâmetros corretamente, mas se você seguiu este tutorial e utilizou o script do Chris Banes não deve ter problema.

Então selecione o seu projeto na lista e clique em Close. Depois de clicar em Close a validação vai começar, e se tudo estiver Ok, você verá na tab Activity a mensagem Repository Closed.

Screenshot from 2015-01-15 14:56:56

Depois de fechar o projeto ele está validado e pronto para ser publicado no Maven Central. Para isso selecione seu artefato e clique em Release.

Screenshot from 2015-01-15 14:57:22

Depois de alguns minutos você receberá um e-mail falando que o release foi efetuado, e agora seu projeto encontra-se disponível no repositório de release da Sonatype.

https://oss.sonatype.org/content/repositories/releases/

Mas para aparecer no site http://search.maven.org/ leva geralmente 1 dia útil.

Pronto, chegamos ao fim.

Agora que publiquei uma nova versão posso declarar a dependência no arquivo build.gradle de qualquer projeto, e pronto!

dependencies {

    . . .
    compile 'br.com.livroandroid:android-utils:0.0.4'
}

Obs: A biblioteca “br.com.livroandroid:android-utils” é simples e o objetivo é apenas auxiliar nas explicações do livro Google Android 4ª edição.

E para mostrar que a biblioteca está mesmo instalada no Maven Central, basta uma busca no site http://search.maven.org/. A biblioteca pode levar até 1 dia para aparecer ser encontrada aqui.

Screenshot from 2015-01-15 14:06:59

Atenção: Se for o seu primeiro release, você precisar entrar na Issue do Jira que você criou, e fazer um comentário indicando que você fez a release. Assim o time da Sonatype vai validar e habilitar o release automático para o Maven Central. Você só precisa fazer isso na primeira vez.

Para maiores informações, segue a documentação oficial.

4 Comments to Criando libs no Gradle com Android – Parte 3