Para que serve o String[] args em Java?
String[] args em Java
Acabei de terminar mais uma funcionalidade da minha aplicação e preciso testá-la. Porém a minha aplicação possui o ambiente de desenvolvimento, teste e produção:
public class Main {
public static void main(String[] args) {
String ambiente = "";
if(ambiente.equals("DEVELOPMENT")){
System.out.println("executando codigo de desenvolvimento");
} else if (ambiente.equals("TEST")){
System.out.println("executando codigo de teste");
} else if (ambiente.equals("PRODUCTION")){
System.out.println("executando codigo de producao");
}
}
}
Agora vou usar a classe Scanner e fazer a leitura pelo teclado para testar o meu código:
Scanner sc = new Scanner(System.in);
System.out.println("Informe o ambiente");
String ambiente = sc.nextLine();
Resultado:
Informe o ambiente DEVELOPMENT executando codigo de devesenvolvimento
Poxa vida...
Além de cansativo, existe a possibilidade de eu errar a opção e executar um ambiente por engano ou até mesmo não executar nenhum. Como eu posso fazer com que, ao executar o meu programa, ele já saiba que ambiente rodar? Pelo parâmetro args do método main
!
public static void main(String[] args) {
String ambiente = args[0]; //código }
Ué, aquela variável que não serve pra nada?
O parâmetro args é um array que recebe dados da command line (linha de comando), ou seja, no momento que executamos a nossa aplicação podemos enviar uma informação por meio dele.
Enviando o parâmetro args na execução
Vamos então fazer teste enviando o valor DEVELOPMENT durante a execução da classe Main
:
Ótimo! Agora não vou precisar ficar digitando o ambiente todas as vezes, mas... Ainda tenho que ficar escrevendo no command line...
Posso acabar errando o parâmetro em algum momento e fazer uma caca... Para resolver esse problema, basta criar arquivos .bat para cada um dos ambiente!
DEVELOPMENT.bat:
java Main DEVELOPMENT
PRODUCTION.bat:
java Main PRODUCTION
TEST.bat:
java Main TEST
Testando os ambientes:
Excelente! Agora eu posso testar a minha aplicação em vários ambientes sem nenhuma preocupação! E se eu precisar saber, por exemplo, saber qual versão do Java está sendo executada em cada ambiente?
Podemos utilizar as Properties da classe System
e pegar uma propriedade do ambiente por meio do método getProperty()
:
//código
if(ambiente.equals("DEVELOPMENT")){
System.out.println("Versao do Java: " + System.getProperty("java.version"));System.out.println("executando codigo de desenvolvimento");
}
//código
Testando o ambiente de desenvolvimento:
Excelente! Agora consigo verificar se o meu ambiente está sendo executado em uma versão esperada! Poderíamos coletar outras informações por meio do getProperty()
, como por exemplo usuário (user.name) ou o sistema operacional (os.name).
E aí, já passou por alguma situação em que precisava testar ambientes diferentes? O que achou dessa alternativa utilizando o String[] args
e as Properties da classe System
?