Digamos que eu queira obter o conteúdo java.runtime.version
do shell do Linux.
Não quero java -version
fazer nenhum tipo de busca/envio, pois já usamos essa abordagem no passado e ela se mostrou instável.
➜ java -version
openjdk version "21" 2023-09-19 LTS
OpenJDK Runtime Environment Temurin-21+35 (build 21+35-LTS)
OpenJDK 64-Bit Server VM Temurin-21+35 (build 21+35-LTS, mixed mode)
Este exemplo contém muita saída que muda de versão para versão e também de fornecedor para fornecedor.
O que eu já tentei foi usar jshell:
Mas a saída ainda contém todos os comentários de comando que não posso desabilitar (pelo menos não sei:
➜ printf $'System.out.println(java.lang.System.getProperty("java.runtime.version"));\n/exit\n' | jshell -s
-> System.out.println(java.lang.System.getProperty("java.runtime.version"))21+35-LTS
-> %
O que eu quero neste exemplo é apenas a 21+35-LTS
parte de uma forma confiável e à prova do futuro.
Estou aberto a usar ferramentas disponíveis em uma imagem base do Ubuntu Slim ou no recente Java JDK.
EDIT: Não sou contra grep/sed em geral, desde que a solução seja à prova de futuro e funcione com diferentes fornecedores Java.
Você pode visualizar todas as propriedades do sistema com -XshowSettings, então algo assim deve funcionar:
Não acho que seja possível diretamente sem algum grep/sedding da saída, mas você pode fazer isso por meio de um arquivo intermediário, como este:
jshell &>/dev/null
garantirá que o jshell não produza nenhuma saída;Runtime.version()
é possivelmente uma alternativa mais direta paraSystem.getProperty("java.runtime.version")
.Você pode tentar usar
--list-modules
. A maneira como uma versão de módulo é gerada parece ser mais estática (<module-name>@<version>
). Peça a versão de um módulo que implementa a Java Language SE Specification e você obtém a versão do runtime (por exemplo,java.base
).saídas:
Adicionar um corte
e você obtém:
NB. esta versão não incluirá nenhuma informação de construção ou adições de fornecedores à versão. por exemplo. No meu sistema
java.runtime.version
está21.0.5+11-Ubuntu-1ubuntu122.04
Isso requer Java 9 ou superior, e o formato de saída não parece ter mudado desde o Java 9.