Publicando uma biblioteca com Java, Gradle e Github Package Registry

Eder Matos
Exactaworks
Published in
5 min readFeb 5, 2021

Neste artigo, veremos como realizar uma publicação de uma biblioteca criada em Java, utilizando o Github Package Registry.

Sabe aquele momento em que você precisa realizar algum tratamento no código, mas esse tratamento se repete em alguns lugares — por exemplo verificar se uma lista está vazia? Nesse caso específico, o que podemos fazer no código inicialmente é o seguinte:

List<String> myList = pegaLista();if (myList != null && !myList.isEmpty()) {
...
}

Imaginando um cenário em que temos diversos lugares que devemos fazer essa verificação, decidimos criar uma classe utilitária para deixar essa verificação em apenas um lugar.

public class ListUtils {public static boolean isEmpty(List<?> list) {
return list == null || list.isEmpty();
}
public static boolean isNotEmpty(List<?> list) {
return !isEmpty(list);
}
}

Então, agora, em qualquer lugar do código, podemos utilizar essa função.

List<String> myList = pegaLista();if (ListUtils.isNotEmpty(myList)) {
...
}
Gif com aplausos

Mas se você está trabalhando em outro projeto e precisa novamente criar essa classe com os métodos utilitários, imagine que você tenha diversas classes utilitárias. Acaba se tornando algo repetitivo.

Utilizando Github Package Registry

GitHub Package Registry é um serviço de hospedagem de pacotes de software que permite que você hospede os seus pacotes de software de forma privada ou pública e que você use os pacotes como dependências nos seus projetos.

Para utilizar esse serviço, basta apenas você ter uma conta no Github.

Então, inicialmente, vamos criar um repositório no Github para armazenar o código de nossa biblioteca.

Gif criando novo repositório no Github

Nesse repositório adicionaremos o código que desejamos publicar. Vamos, então, criar o nosso projeto.

Gif criando biblioteca no Intellij

Com nosso projeto criado, vamos criar nossas classes utilitárias.

Print da unica classe da biblioteca

Pronto, agora sim podemos partir para a publicação.

Primeiramente devemos adicionar o plugin “maven-publish” aos nossos plugins no arquivo build.gradle.

Plugin obrigatório na biblioteca

Após isso, devemos adicionar a configuração de publicação.

publishing {
repositories {
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/SEU-USUARIO/SEU-REPOSITORIO")
credentials {
username = project.findProperty("usernameCredentials") ?: System.getenv("usernameCredentials")
password = project.findProperty("passwordCredentials") ?: System.getenv("passwordCredentials")
}
}
}
publications {
gpr(MavenPublication) {
from(components.java)
}
}
}

Nessa configuração, utilizamos um repositório do tipo maven para fazer a publicação. Para esse repositório, adicionamos a url padrão do maven, seguido do nosso usuário do github e do nosso próprio repositório do github.

Após isso, adicionamos as credenciais de acesso ao repositório. Essas credenciais iremos criar em seguida. Ambas (“usernameCredentials” e “passwordCredentials”) devem estar contidas no arquivo gradle.properties, que, caso não exista no projeto, deve ser criado na raiz.

Credenciais de publicação da biblioteca

Caso essas variáveis não sejam encontradas nesse arquivo, as credenciais serão procuradas com o mesmo identificador nas variáveis de ambiente do sistema.

Agora para criar o nosso token de acesso devemos:

  • Ir nas configurações do nosso perfil do Github
  • Ir nas configurações de desenvolvores
  • Tokens de acesso pessoal
  • Criar um novo token
  • Dar acesso de leitura, escrita e exclusão ao token
Gif criando novo token no Github

Pronto, agora, com nosso token em mãos, podemos realizar a publicação da biblioteca.

No terminal, rodamos o seguinte comando para publicar.

./gradlew publish

Também podemos publicar passando as nossas credenciais no comando.

./gradlew publish -PusernameCredentials=USER -PpasswordCredentials=GITHUB_TOKEN
Gif publicando a biblioteca

Agora, então, podemos ver no github se nosso pacote foi publicado. Na página inicial do nosso usuário podemos clicar na aba “Packages” e conferir todos os pacotes publicados pelo nosso usuário.

Gif conferindo biblioteca no github

Também podemos ver os pacotes publicados dentro de um repositório específico. Adicionando “/packages” na url do repositório.

Gif conferindo biblioteca no repositório do github

Utilização da biblioteca

Agora que nossa biblioteca está devidamente publicada, vamos ver como podemos utilizá-la em outro projeto.

Primeiramente, vamos criar um novo projeto, também utilizando Java e Gradle.

Após criarmos o projeto, devemos adicionar no build.gradle a configuração do repositório onde nossa biblioteca foi publicada, assim como as credenciais e a dependência da nossa biblioteca.

Gif configurando consumidor da biblioteca

Dessa vez, estarei utilizando as variáveis de ambiente do meu sistema operacional, mas, assim como na publicação, podemos utilizar o arquivo gradle.properties para adicionar nossas credenciais.

Agora, então, baixamos as novas dependências do projeto e nossa biblioteca estará instalada no novo projeto.

Gif utilizando nossa biblioteca

Conclusão

Dessa forma, conseguimos realizar a publicação de uma biblioteca criada com Java no Github, de uma forma simples e rápida.

Um ponto importante é que, como esse meio de publicação precisa de credenciais para a utilização da biblioteca, é muito viável para ser utilizado em projetos privados, mas em projetos públicos acaba sendo inviável.

No próximo artigo veremos como automatizar a publicação da nossa biblioteca sempre que tivermos um novo commit na branch “main”. Para isso, vamos utilizar o Github Actions.

Para acessar o repositório da biblioteca criada neste artigo, acesse o meu Github:

https://github.com/ederfmatos/github-package-registry-example

Isso é tudo, por agora. Até mais!

--

--