Brigando com o Ubuntu, Java, Eclipse, Tomcat e variáveis de ambiente

terça-feira, maio 13, 2008 – 2:23 am

Depois de postar sobre como configurar o Java no Ubuntu 8.04, e como resolver o problema (bug?) do Java 6, eis que meu ambiente de desenvolvimento se rebelou.

Primeiro gostaria de pedir desculpas caso alguém tenha tentado usar o método da variável JAVA_OPTS no /etc/environment e não tenha funcionado (funcionava muito bem no meu antigo Ubuntu 7.10). Caso você tenha conseguido configurar tudo certo por este método, fico feliz, pois é muito mais simples.

Vamos lá. A parte da configuração do JAVA_HOME funciona perfeitamente, o Java roda legal, o sistema usa a variável configurada no /etc/environment sem problemas mas, quando digo, mando, forço o sistema a usar o JAVA_OPTS, também no /etc/environment, simplesmente não funciona. O erro de [Ljava.lang.String continua aparecendo, mesmo com a varíavel setada (usei echo #JAVA_OPTS no console para verificar a variável e apareceu corretamente).

Solução? Colocar o parâmetro do JAVA_OPTS no arquivo de inicialização do Eclipse, o eclipse.ini, localizado na raiz do programa.

Ok, e funciona? A resposta é, pelo menos aqui no meu sistema, não. Tudo bem, sem pânico, vamos ver se pelo menos o Tomcat está iniciando sem problemas.

Inicio o Tomcat, e vejo que minha aplicação não foi “startada”. Vejo no log e o erro (bug) do Java 6 está lá, tirando sarro da minha cara, comprando briga.

Pra infelicidade do Tomcat e do Java 6, pesquisando no tio google (oráculo, segundo o Marco Aurélio), consegui resolver o problema. Segue a solução, e não adianta me chamar de “pogger”, o importante é que funciona:

Abra o arquivo catalina.sh, localizado na pasta bin no diretório de instalação do seu Tomcat. Exemplo:

  • sudo gedit /opt/apache-tomcat-6.0.16/bin/catalina.sh

No início do arquivo, depois de alguns trechos cometados por #, insira as variáveis JAVA_HOME, de acordo com a localização do seu Java e JAVA_OPTS com o parâmetro indicado. Exemplo:

  • JAVA_HOME=”/opt/jdk1.6.0_06″ #coloque aqui o seu diretório do Java
  • JAVA_OPTS=”-Dsun.lang.ClassLoader.allowArraySyntax=true” #aqui, mantenha como está

Feito isso, o Tomcat abaixa a cabeça e funciona perfeitamente. Nada de bug de [Ljava.lang.String.

Certo, mas quando executo o código descrito neste post pelo Eclipse, ainda continua dando erro. Bom, como disse, você pode tentar inserir o valor -Dsun.lang.ClassLoader.allowArraySyntax=true no arquivo de inicialização do Eclipse, porém isso não funcionou pra mim. O que tive que fazer é, pelo menos por enquanto, executar minhas classes de teste com o parâmetro indicado diretamente nas opções de execução das classes.

Para fazer isso, vá até o botão do Run do Eclipse e escolha a opção “Open Run Dialog”

Em seguida, selecione a aba “Arguments” e insira o parâmetro -Dsun.lang.ClassLoader.allowArraySyntax=true na parte “VM arguments”

Pronto, agora a classe “roda” sem lançar exception. Problema solucionado no Tomcat e no Eclipse (acredito que para o Eclipse deve haver uma maneira mais inteligente de contornar o problema).

Bom, pra finalizar, caso você tente usar o java pelo console, também irá ocorrer o mesmo erro. Pelo menos por enquanto, a solução é executar o código da seguinte maneira:

  • java -Dsun.lang.ClassLoader.allowArraySyntax=true BugJava6

Pois é, esse tal de -Dsun.lang.ClassLoader.allowArraySyntax=true já encheu o saco! Isso que era só colocá-lo no /etc/environment…

Realmente, não sei porque estes problemas de configuração vivem acontecendo. Antes de instalar o Ubuntu 8.04 por cima do 7.10, a configuração do JAVA_OPTS no /etc/environment funcionava perfeitamente para o Eclipse, o Console e o Tomcat, não precisava configurar um por um. Se alguém souber de algo em relação a variável JAVA_OPTS, seja no /etc/environment ou em qualquer outro lugar que funcione, por favor, mande informações.

PS: O autor das classes mostradas na figura é o Antonio.

É isso, valeu!

Post a Comment