Buildar Hibernate 3.6.x a partir do fonte e versionar na sua infra.

Ambiente onde esse passo a passo foi realizado: Fedora 29

Opcional: testar esse passo a passo em um docker: docker run -t -i fedora bash

Instalar dependências e clonar repositório

# instalar algumas dependências necessárias e úteis
dnf install git bash-completion iputils coreutils findutils which libnsl xmlstarlet wget vim

# clona o repositório oficial
git clone https://github.com/hibernate/hibernate-orm.git

# listar as branches remotas
git branch -r

# alternar para branch "3.6"
git checkout 3.6

Verificar versão no pom.xml

Provavelmente a versão seja 3.6.11-SNAPSHOT

Instalar JDK

Necessário jdk 5 e 6, mas com a 6 não funcionou, no lugar da jdk 6 usar a jdk 7

  • baixar jdk 5: jdk-1_5_0_22-linux-amd64.bin
  • baixar jdk 7: jdk-7u80-linux-x64.rpm
# instalar jdk 7
rpm -Uvh jdk-7u80-linux-x64.rpm
# verificar versão
java -version

# instalar jdk 5
./jdk-1_5_0_22-linux-amd64.bin
# verificar versão
~/jdk1.5.0_22/bin/java -version

Gerar release

Poderia ser pelo plugin maven-release-plugin do maven, mas em razão da estrutura do projeto do hibernate essa abordagem não funciona. Vamos gerar então com um script shell disponibilizado dentro da pasta do próprio projeto.

# entrar na pasta do hibernate
cd hibernate-orm

# criar uma nova branch
git checkout -b 3.6.SEFIN 3.6

# configurar user e email dos commits
git config --local user.name "mhagnumdw" && git config --local user.email "mhagnumdw@gmail.com"

# gerar release: ao final o script pede pra fazer o push,
# mas como estamos fazendo no repositório do Hibernate do
# GitHub não temos acesso, bas então cancelar: ctrl + c.
# Se estiver usando um repositório seu, aceite o push.
# -r : versão da release
# -d : próxima versão de desenvolvimento
./tagRelease.sh -r 3.6.11.SEFINv2 -d 3.6.11.SEFINv3-SNAPSHOT

# ver a tag criada
git tag | grep -P '^3.6.'

# ver a diferença entre a branch 3.6 e a branch 3.6.SEFIN
# (essa última é a que estamos trabalhando)
git log --oneline origin/3.6..HEAD

Baixar o Maven compatível com jdk 5

Tabela de compatibilidade: https://maven.apache.org/docs/history.html

# baixar
wget https://archive.apache.org/dist/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
# descompactar
tar -xvzf apache-maven-3.1.1-bin.tar.gz

Compilar / Empacotar / Deploy

Usar um settings.xml apropriado, que tenha os repositórios maven do JBoss e que tenha acesso ao Nexus caso seja feito deploy. Você pode usar a versão disponibilizada aqui ou pegar a versão disponibilizada no item 4 na seção referências.

Abaixo três opções

Apenas empacotar (package)

Não vai gerar o source pois o maven-source-plugin está definido para rodar no fase verify, ver pom.xml.

# executar
JAVA_HOME="/root/jdk1.5.0_22" \
  /root/apache-maven-3.1.1/bin/mvn -B -V \
  -gs /root/settings.xml \
  -DskipTests=true -Dmaven.test.skip=true \
  clean package \
  -DdisableDistribution=true \
  -Djdk16_home=/usr/java/jdk1.7.0_80
# verificar os jars gerados
find | grep -P -i '\.jar$'

Instalar (install)

# executar
JAVA_HOME="/root/jdk1.5.0_22" \
  /root/apache-maven-3.1.1/bin/mvn -B -V \
  -gs /root/settings.xml \
  -DskipTests=true -Dmaven.test.skip=true \
  clean install \
  -DdisableDistribution=true \
  -Djdk16_home=/usr/java/jdk1.7.0_80
# verificar os jars gerados
find /root/.m2/repository/org/hibernate/ | grep -P -i '\.jar$'

Deploy no Nexus

Necessário mudar o <distributionManagement> no ./hibernate-parent/pom.xml. O settings.xml tem que ter as credenciais para escrever no Nexus.

# executar
JAVA_HOME="/root/jdk1.5.0_22" \
  /root/apache-maven-3.1.1/bin/mvn -B -V \
  -gs /root/settings.xml \
  -DskipTests=true -Dmaven.test.skip=true \
  clean deploy \
  -DdisableDistribution=true \
  -Djdk16_home=/usr/java/jdk1.7.0_80

Bom… é isso.

Referências