java -version não escreve para stdout?

2

Ou eu estou fazendo algo bobo ou a Sun é. Como é algo como:

java -version > version.txt

Ainda imprime para stdout e deixa o version.txt vazio? Estou verificando o código de saída, e ainda é 0, então não está escrevendo para stderr.

Eu preciso disso porque estou construindo uma ferramenta de ambiente de teste e quero verificar se a versão do Java é adequada, eu estava planejando capturar a saída dessa versão, mas agora estou presa.

Estou no OS X Leopard, Java versão 1.6.0_20.

Alguma idéia?

    
por Juan Delgado 20.05.2010 / 11:25

3 respostas

9
java -version &> version.txt

O código de saída não tem nada a ver com o local de saída.

    
por 20.05.2010 / 11:29
9

É uma espécie de recurso hoje em dia. ; -)

De um antigo relatório de erros :

We should think very, very carefully before ever fixing this bug. It's obviously the wrong thing to print version information to stderr, but since we've been doing that since the beginning of time it seems likely that we'll break existing systems built on top of Java if we change it now. If we do decide to change this then it must wait until the Tiger release so that adequate testing can be done.

    
por 20.05.2010 / 11:57
1

Apenas como um complemento à resposta de Ignacio:

A análise da saída de java -version é bastante complexa e propensa a erros (e a saída não é garantida para sempre ter o mesmo formato, especialmente com JVMs não-Sun).

Para verificar a versão java, você pode executar um pequeno programa java que verifica as propriedades apropriadas do sistema: veja Javadocs para getProperties () . Essa é a maneira oficial e documentada de obter informações sobre o ambiente Java. Você provavelmente quer verificar:

  • java.version (número exato da versão da instalação do Java, por exemplo, 1.6.0_15)
  • java.specification.version (a versão da plataforma Java, por exemplo, 1.5 ou 1.6)
por 17.08.2010 / 23:09