Recompilando (toda) a aplicação sem fazer Build All

Boa tarde!

Desculpem-me a demora mas antes tarde do que mais tarde, né?

Hoje quero falar um pouco sobre recompilação da aplicação, vamos lá… O Problema: Recentemente compilei uma aplicação *inteira* em .Net, só que utilizando o framework de 64 bits, e para piorar, utilizando a versão 4.0.

Como era uma versão de produção e alguns clientes podem não ter servidores 64 bits, resolvi então recompilar *toda* a aplicação novamente. Porém, se você for simplesmente no menu de execução do genexus (da versão 9.0 e anteriores, claro), selecionar o objeto e clicar “Compile” ou “Vai”, simplesmente não vai acontecer nada, pois o objeto *já* está compilado, certo?

E agora? Vou precisar fazer um Build All de mais de 5000 objetos (dos quais mais de 1000 são “main”) simplesmente para poder compilar em outra versão do Framework?

A resposta é não, você não precisa: O Genexus controla a necessidade de compilação através do timestamp do arquivo fonte, ou seja, se o timestamp do fonte for menor que o timestamp do arquivo compilado, não há necessidade de compilação. Ou seja, basta ter uma maneira de mudar o timestamp do(s) arquivo(s) fonte(s) necessário(s) para conseguirmos “marcar” determinados objetos como necessários (ou required na janela de compilação).

Para alcançar essa façanha, então, é necessário um utilitário chamado touch.exe ele está em qualquer diretório de modelo de aplicações geradas com java.

Copiar o utilitário para o diretório do modelo que você deseja “tocar”, aí então fazer o seguinte:

  1. Abra um prompt do DOS (Iniciar, executar, cmd.exe, ok);
  2. Posicione-se no drive e pasta do modelo onde foi estão os fontes a serem “tocados” (e onde deveria ter copiado o executável touch.exe). No meu caso foi:
    1. D:
    2. Cd \Modelos\KB20110727\DataNETSQLProducao
    3. touch hhome.cs
  3. Feito isso a webpanel home deverá aparecer novamente como “required” na lista de compilação, basta selecioná-la e clicar em “Agora Vai”, digo, “Compile”

Simples não?

Aposto que você deve estar se perguntando: “Tá, beleza, vou ter que fazer isso para cada um dos 1500 “mains” que tenho para serem recompilados?”

A resposta é novamente: “Não”: São poucas (acho) as pessoa que acompanharam a evolução do DOS, quem realmente acompanhou sabe que o Windows 95, 98 e o Millennium foram “construídos” em cima do DOS, ou seja, eles eram ambientes operacionais e não sistemas operacionais de fato (diferente da série NT: NT 3.5, NT 4.0, Windows 2000, Windows XP…). Bom estou lembrando isso pois o DOS continua por trás de *todas* essas versões, e um dos comandos DOS que pouca gente utiliza (ou conhece) é um pequeno comando de três letras chamado: FOR.

Esse comando faz exatamente o que faz nas linguagens de programação: Repetição… Repetição, 1499 mains a serem “tocados”… Parece ter algo a ver…

Pois bem, tem sim, e vamos a sintaxe  desse comando que resolve boa parte dos casos:

FOR <nome do conjunto> IN (<critérios de filtro>) DO <comando> [<nome do cojunto>]

Para o meu caso, executei (os nomes de conjuntos devem começar com ‘%’):

FOR %1 IN (*.cs) DO touch %1

Simples não? Também acho

Não achou simples? Tudo bem, você pode fazer o Build com Force Generation dos 1500 objetos mains que terá o mesmo resultado, só que vai levar um tempinho a mais… Só umas duas ou dez horinhas…

Um abraço, e até a próxima!

Anúncios