<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gilliard Macedo</title>
    <description>The latest articles on DEV Community by Gilliard Macedo (@gilliardmacedo).</description>
    <link>https://dev.to/gilliardmacedo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F780907%2F549ade05-eddd-4280-a062-6546402ea397.jpeg</url>
      <title>DEV Community: Gilliard Macedo</title>
      <link>https://dev.to/gilliardmacedo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gilliardmacedo"/>
    <language>en</language>
    <item>
      <title>Publicar um artefato Java no Maven Central utilizando o maven local</title>
      <dc:creator>Gilliard Macedo</dc:creator>
      <pubDate>Sun, 26 Dec 2021 16:49:51 +0000</pubDate>
      <link>https://dev.to/gilliardmacedo/publicar-um-artefato-java-no-maven-central-utilizando-o-maven-local-4cmb</link>
      <guid>https://dev.to/gilliardmacedo/publicar-um-artefato-java-no-maven-central-utilizando-o-maven-local-4cmb</guid>
      <description>&lt;p&gt;Um tempo atrás precisei publicar a nova versão de uma biblioteca open source no Maven Central e o processo não foi tão trivial quanto eu esperava. Pela descentralização do processo, a documentação é distribuída. Assim, resolvi escrever os passos da jornada que, à época, considerei ser o menor caminho. Por questões corporativas eu não era administrador do repositório git, e não poderia considerar fazer isso por CI/CD. Se você está já está certo do que quer fazer, no ponto de publicar e não precisa de contextualização, pode pular os dois próximos parágrafos.&lt;/p&gt;

&lt;p&gt;Para a maior parte das pessoas que trabalha no mercado corporativo tradicional essa é uma necessidade que nunca irá surgir. Empresas geralmente possuem seu próprio repositório de artefatos em instâncias do &lt;a href="https://jfrog.com/artifactory/"&gt;JFrog Artifactory&lt;/a&gt; ou &lt;a href="https://www.sonatype.com/products/repository-pro"&gt;Nexus&lt;/a&gt; em sua Intranet. De fato, não interessa que suas regras de negócio estejam acessíveis para qualquer pessoa do mundo. &lt;/p&gt;

&lt;p&gt;A coisa muda quando se trabalha em uma empresa em que TI é atividade fim, ou mesmo quando corporações tradicionais resolvem investir tempo em &lt;em&gt;open source&lt;/em&gt;. Então, para que qualquer pessoa possa utilizar sua biblioteca ou &lt;em&gt;framework&lt;/em&gt;, é necessário que ela esteja em algum repositório Maven público. E para que as pessoas consigam encontrá-lo sem precisar adicionar um novo repositório em seus arquivos settings.xml, o melhor caminho é torná-lo visível no &lt;a href="https://search.maven.org/"&gt;Maven Central&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;O Maven Central faz espelhamento de um conjunto de repositórios. Utilizaremos o &lt;a href="https://central.sonatype.org/"&gt;Sonatype Central&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Cadastrando o artefato 
&lt;/h2&gt;

&lt;p&gt;Os primeiros passos são manuais e revisados por humanos, apenas para a primeira implantação. Crie uma conta no &lt;a href="https://issues.sonatype.org/"&gt;JIRA&lt;/a&gt; da organização e, depois de logado, abra um ticket de criação de projeto. &lt;a href="https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&amp;amp;pid=10134"&gt;Este link&lt;/a&gt; leva ao formulário com o template já escolhido. Nesse momento você vai inserir as informações do seu projeto, das quais as mais importantes são o groupId e o artifactId, que obviamente não podem ter sido previamente utilizados no Maven Central. A documentação oficial desses passos está &lt;a href="https://central.sonatype.org/publish/publish-guide/"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  E se o projeto já tiver versões publicadas?
&lt;/h2&gt;

&lt;p&gt;O ticket de criação do projeto não se aplica. Abra um ticket no JIRA solicitando permissão no projeto que deseja publicar e peça para que um usuário que já tem permissão comente na issue autorizando seu acesso. Em situações comuns, isso é suficiente.&lt;/p&gt;

&lt;p&gt;De uma forma ou de outra, em até dois dias(mas normalmente horas) o processo estará revisado e você será um publicador reconhecido daquele pacote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chave GPG
&lt;/h2&gt;

&lt;p&gt;Para fazer o deploy a partir do seu Maven local, você precisa de um &lt;a href="https://www.gnupg.org/"&gt;GPG&lt;/a&gt; &lt;em&gt;client&lt;/em&gt; funcionando via linha de comando e de uma chave. Isso é pré-requisito de funcionamento do &lt;a href="https://maven.apache.org/plugins/maven-gpg-plugin/"&gt;Maven GPG Plugin&lt;/a&gt;. Na &lt;a href="https://gnupg.org/download/"&gt;página de downloads&lt;/a&gt; do projeto você encontra o adequado para o seu SO na seção "GnuPG binary releases". Depois de baixar, verifique o funcionamento digitando em seu terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gpg -h
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crie sua chave com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gpg --gen-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As opções &lt;em&gt;default&lt;/em&gt; são adequadas. Mais detalhes em &lt;a href="https://help.ubuntu.com/community/GnuPrivacyGuardHowto"&gt;https://help.ubuntu.com/community/GnuPrivacyGuardHowto&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configurado o GPG, é hora de configurar o Maven.&lt;/p&gt;

&lt;p&gt;No pom.xml do seu projeto, inclua a seção &lt;code&gt;distributionManagement&lt;/code&gt;, como a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;distributionManagement&amp;gt;
  &amp;lt;snapshotRepository&amp;gt;
    &amp;lt;id&amp;gt;ossrh&amp;lt;/id&amp;gt;
    &amp;lt;url&amp;gt;https://s01.oss.sonatype.org/content/repositories/snapshots&amp;lt;/url&amp;gt;
  &amp;lt;/snapshotRepository&amp;gt;
  &amp;lt;repository&amp;gt;
    &amp;lt;id&amp;gt;ossrh&amp;lt;/id&amp;gt;
    &amp;lt;url&amp;gt;https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/&amp;lt;/url&amp;gt;
  &amp;lt;/repository&amp;gt;
&amp;lt;/distributionManagement&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note que o endereço do Nexus mudou em março de 2021. Assim, projetos criados antes devem ser apontados para &lt;a href="https://oss.sonatype.org/"&gt;https://oss.sonatype.org/&lt;/a&gt;.&lt;br&gt;
Adicionalmente, na seção de &lt;code&gt;build&lt;/code&gt;, inclua o plugin &lt;code&gt;nexus-staging-maven-plugin&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;build&amp;gt;
  &amp;lt;plugins&amp;gt;
    &amp;lt;plugin&amp;gt;
      &amp;lt;groupId&amp;gt;org.sonatype.plugins&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;nexus-staging-maven-plugin&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;1.6.7&amp;lt;/version&amp;gt;
      &amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;
      &amp;lt;configuration&amp;gt;
        &amp;lt;serverId&amp;gt;ossrh&amp;lt;/serverId&amp;gt;
        &amp;lt;nexusUrl&amp;gt;https://s01.oss.sonatype.org/&amp;lt;/nexusUrl&amp;gt;
        &amp;lt;autoReleaseAfterClose&amp;gt;true&amp;lt;/autoReleaseAfterClose&amp;gt;
      &amp;lt;/configuration&amp;gt;
    &amp;lt;/plugin&amp;gt;
    ...
  &amp;lt;/plugins&amp;gt;
&amp;lt;/build&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A parte &lt;code&gt;&amp;lt;serverId&amp;gt;ossrh&amp;lt;/serverId&amp;gt;&lt;/code&gt; vai procurar um repositório com esse id cadastrado no seu arquivo de settings. Normalmente esse arquivo fica dentro da pasta .m2 com o nome de settings.xml. Nele, inclua as informações do servidor(observe o texto a substituir entre parênteses):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;servers&amp;gt;
    &amp;lt;server&amp;gt;
      &amp;lt;id&amp;gt;ossrh&amp;lt;/id&amp;gt;
      &amp;lt;username&amp;gt;(Seu usuário do JIRA)&amp;lt;/username&amp;gt;
      &amp;lt;password&amp;gt;(Sua senha)&amp;lt;/password&amp;gt;
    &amp;lt;/server&amp;gt;
  &amp;lt;/servers&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa é a configuração mínima. Na publicação de um projeto open source também é importante observar outras seções do pom.xml para controlar a publicação de licença, código fonte e javadoc junto com o binário. Seguimos com a publicação.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;nexus-staging-maven-plugin&lt;/code&gt; utiliza o &lt;code&gt;maven-gpg-plugin&lt;/code&gt;, que por sua vez utiliza a linha de comando gpg que você instalou. Dependendo do sistema operacional e da quantidade de chaves GPG que você possui, pode ser preciso personalizar alguns parâmetros da execução do plugin. Esses detalhes podem ser vistos &lt;a href="https://central.sonatype.org/publish/publish-maven/#gpg-signed-components"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para manter consistência das versões no seu deploy, recomendo utilizar o plugin &lt;a href="https://maven.apache.org/maven-release/maven-release-plugin/examples/prepare-release.html"&gt;maven-release&lt;/a&gt;. Eu utilizo da seguinte forma(supondo que seus pom.xml estejam com uma versão SNAPSHOT. Observe o texto a substituir entre parênteses):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mvn clean release:prepare -Dresume=false -DautoVersionSubmodules=true
git checkout tags/(tag que foi criada)
mvn deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Maven Release Plugin fará algumas perguntas a respeito da versão fechada e da nova versão &lt;em&gt;snapshot&lt;/em&gt; que será iniciada. Assim automatizamos a gestão das versões e garantimos que o artefato fechado reflete a tag criada no repositório.&lt;br&gt;
O Maven Deploy plugin pedirá a senha da sua chave GPG.&lt;/p&gt;

&lt;p&gt;Se o processo ocorrer sem erros, seu artefato terá o upload concluído, restando a sua liberação para que de fato se torne público.&lt;br&gt;
Acesse &lt;a href="https://oss.sonatype.org/#stagingRepositories"&gt;https://oss.sonatype.org/#stagingRepositories&lt;/a&gt; e encontre o repositório que acabou de criar com seu upload. Caso as informações estejam corretas, selecione-o, feche-o("Close") e quando for concluído o fechamento, escolha "Release".&lt;br&gt;
Seu artefato imediatamente estará disponível no Sonatype Central e levará entre algumas horas e um dia para estar disponível no Maven Central.&lt;/p&gt;

&lt;p&gt;E aí, deu certo? Precisou fazer algo diferente? Seu feedback será ótimo para melhorarmos esse guia.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
