quarta-feira, 18 de julho de 2007

Problema ao gerar Jar com suas dependencias

Bah... eu não sou nem um pouco bom para fazer esses títulos ;)

Mas é o seguinte, esses dias estava em um projeto com um colega de trabalho, e estava desenvolvendo uma aplicaçãozinha que iria ficar rodando num servidor verificando alguns erros, e interagindo com uma outra aplicação. Fizemos a app e pusemos ela rodar no servidor, maravilha!

Rodamos ela fez o que tinha que fazer e beleza. Depois fomos testar ela novamente e misteriosamente não rodava mais! Nem a que estava na minha máquina de desenvolvimento resolvou não rodar mais. Dava um monte de erro de NoClassDefFoundError e NullPointerException.

Depois de algum tempo verificamos que tinha um monte de dependencias faltando, os xalan-xerxes da vida e todas aquelas dependências. Maravilha colocamos a app rodar e foi =) Problemas resolvidos, correto?!

Errado! Começou a gerar outros erros de .properties faltando! Fui procurar no build.xml e na hora que ele fazia o unjar dos .jar de dependencias do projeto, para depois jogar tudo dentro de um jar só no final, ele tinha uma propriedade que só pegava os .class dos jars e excluia tudo o resto. Ok, retirei a linha de restrição, e tudo passou a funcionar normalmente.

Pergunta: Porque funcionou da primeira vez?!

Agora uma outra historinha. Sabe o projeto de onde copiei o build? Então, este projeto está em produção a mais de 1 ano! Exatamente (pasme). Ele foi uma das heranças dadas a mim assim que entrei na empresa.

Coincidentemente uma semana após eu ter arrumado este erro no primeiro projeto, aquele que já estava em produção pipocou! Não rodou mais, começou a dar falhas, e não fazia mais o que tinha que fazer, foi um desesperto geral ontem aqui, pq era um problema seríssimo. Fui então correr atrás da causa, e me lembrei do ocorrido na semana passada, verifiquei que alguns erros que geravam era por causa de .properties que estavam faltando no .jar do projeto que roda la no servidor.

Guardamos arquivos de logs diários, dos ultimos 3 meses, e fui verificar os logs, este erro era recorrente. Sempre aconteceu, mas resolveu que de uma hora pra outra resolveu parar. O mais estranho, é que dei um kill no processo la no servidor, e então levantei o processo novamente, e tudo voltou a funcionar normalmente.

Pergunta: "Como pode uma porra dessa bátima?!"

Alguém já passou por isso? Alguém já viu algo parecido? Eu achei estranhíssimo! Por que o negócio sempre rodou, já faz mais de 1 ano, e agora resolveu pipocar de uma hora pra outra. E era uma coisa que estava faltando que deveria afetar sempre!

Por favor, alguém tem uma explicação racional para isso?! Agradeço se puder postar aqui.
-------------
ps: vou fazer um post sobre como gerar um build.xml descompactando os .jars e colocando tudo em um .jar só. Mas eu ainda acho mais correto exportar o Classpath colocando tudo em um diretório .lib as dependências. Muito mais "seguro" =)

Nenhum comentário: