terça-feira, 19 de julho de 2011

Diferenças entre compilador do Eclipse e o da Sun

Aqui na INFOX utilizamos o Eclipse como IDE Java e gosto muito dele. Acho o Eclipse imbatível para escrita de código e só utilizo o Netbeans quando preciso criar alguma tela Swing ;p

Uma das grandes vantagens do Eclipse é seu compilador que é bastante rápido e muito bem integrado a ferramenta. O compilador do Eclipse possui outras vantagens, mas vou deixar este assunto apar outro post e vou focar aqui nas diferenças e nos problemas que elas podem trazer.

Nosso deploy é feito nos servidores por meio de um script que baixa do SVN o projeto, faz algumas mudanças em arquivos de configuração e compila as classes utilizando o JDK da Sun.

Algumas vezes ocorreram problemas de compilação na hora do deploy em classes que compilavam corretamente na IDE com o compilador do Eclipse.

Tomando certo cuidado na hora de desenvolver é possível evitar essas problemas pois eles ocorrem em poucas situações e aqui vou mostrar 3 situações

Segue abaixo imagens com código fonte no Eclipse e no Netbeans :

[1] e [2] Comportamento correto nos dois compiladores, não é possível dar cast de um Object para um boolean (Tipo primitivo) mas sim para um Boolean(Objeto)

[3] Aqui há diferença e onde um dia desses ocorreu um problema, o cast está sendo feito pelo método genérico e o compilador do Eclipse permite que este método faça um cast de Object para boolean, coisa que o da Sun não permite.


[4] Neste caso o eclipse não esta acusando erro ao utilizar a constante privada NAME na anotação @Name e compila normal caso que não ocorre com o compilador da Sun.


[5] Esse é o caso mais gritante onde o compilador do eclipse deveria acusar erro, mas relaxa e compila sem problemas. Dentro de anotações nos parâmetros que recebem vetores o compilador permite esta virgula no final.

Para não dizer que o problema é sempre do compilador do Eclipse, eu já vi um caso de ocorrer um problema que parecia ser um bug no compilador da Sun. Pelo que eu lembre foi algo bem parecido com isto aqui: http://stackoverflow.com/questions/314572/bug-in-eclipse-compiler-or-in-javac

Caso eu encontre outras diferenças/problemas vou continuar a alimentar este post aqui :D

[]'s