Entendendo os comandos Java e Javac
Veja neste artigo todas as informações necessárias para um bom entendimento dos comandos javac e java para compilação e execução de programas desenvolvidos na linguagem Java.
É fato que os desenvolvedores que começam a programar na linguagem Java, muitas vezes não sabem nem que existem formas de compilar, e rodar, a aplicação através de linha de comando. Isto, para quem está começando, acaba se tornando um vício, onde o programador só saberá criar e executar a sua aplicação através de um IDE que faça todo o trabalho “manual”. O resultado disto são desenvolvedores que não sabem lidar com situações onde não existe nenhum IDE disponível, obrigando-o a ter de fazer o download de IDE para que possa iniciar o seu trabalho.
Para a certificação OCJP 6, o candidato precisa conhecer bem alguns desses comandos. Iremos abordar, neste artigo, os comandos javac e java que podem ser executados através de um Terminal (Mac OS), Console (Linux) ou CMD (Windows).
Atenção: Para poder executar estes comandos, é necessário ter o Java instalado no seu sistema operacional.
Compilando com javac
O javac é utilizado para compilar as classes em Java. Use-o antes de executar uma classe para que seja gerado um arquivo .class da classe em questão.
Existem várias opções que podem ser utilizadas junto com o comando javac, como mostra a Figura 1.
Para entendermos melhor como funcionam esses complementos, primeiro precisamos entender a estrutura deste comando, que é: javac [opções] [arquivos-fontes].
Quando for necessário utilizar mais de uma opção e/ou arquivo-fonte, é necessário que os separem por espaço.
Sabendo disto, estamos prontos para estudar mais detalhadamente as duas opções que serão importantes para os candidatos à OCJP 6: -d e -classpath.
Compilando com -d
É imprescindível, principalmente para projetos de grande porte, que os arquivos .class fiquem separados dos arquivos .java, por questões de organização, segurança, controle de versões, depuramento e etc. Sendo assim, ao compilarmos uma classe e, consequentemente, gerarmos um .class da classe .java em questão, precisaremos usar a opção -d para informar ao compilador que insira o arquivo .class em um local determinado.
Digamos que estamos compilando uma classe chamada HelloWorld.java, dentro do pacote commandLine, e queremos que a HelloWorld.class fique em no diretório commandLine/bin. A sintaxe ficaria deste jeito:
javac -d bin HelloWorld.java
A figura 2 mostra como estavam as pastas commandLine e commandLine/bin antes da execução da linha de comando anterior.
As figuras 3 e 4 mostram a execução do comando pasta commandLine após ela.
Como podemos ver, o compilador gerou o HelloWorld.class na pasta /bin/commandLine/, criando a hierarquia de diretórios automaticamente. Ou seja, no nosso exemplo, a nossa classe java estava inserida na pasta commandLine, o que fez o compilador criar a pasta /bin/commandLine/. Caso a nossa classe estivesse dentro de commandLine/test/, seriam criadas, pelo compilador, as pastas /bin/commandLin/test/.
O comando -d nada mais é do que a indicação do destino de onde o .class será gerado, já que -d significa destiny.
Iniciando aplicativos em Java
Utiliza-se o comando java para chamar a JVM. Assim como javac, existem diversas opções que podem ser utilizadas junto ao java. Através do comando java -help, teremos a lista de opções mostradas na figura 5.
A sintaxe é muito similar da do javac: java [opções] classe [argumentos].
Quando for necessário adicionar múltiplas opções e/ou argumentos, separá-los com espaço. Quanto a classe, o comando java assume que você está se referindo a um .class. Sendo assim, não é necessário digitar .class após o nome do arquivo.
Declarando e usando Classpaths
Classpaths são variáveis de localização de um diretório que podem conter as classes que serão necessárias para a execução do sistema. Em sua declaração, eles são separados por delimitadores.
Quando estamos utilizado um SO baseado no Unix, as barras normais são utilizadas pra construir a localização de diretórios. Porém, quando estamos no Windows, a barra invertida que é usada. No exame para a OCJP 6, serão utilizados exemplos com barras normais.
A sintaxe do comando -classpath, ou -cp, é a seguinte:
-classpath /src/teste/dir1:/src/teste
No exemplo anterior, será feita uma busca nos diretórios /src/teste/dir1 e /src/teste para procurar as classes necessárias para a execução do comando.
Observação: Quando se especifica um subdiretório, não são inclusos na busca os diretórios acima dele! Ou seja, no exemplo anterior, o diretório teste não será utilizado na busca.
Algo que frequentemente ocorre quando os desenvolvedores compilam e rodam a aplicação pela linha de comando, é se deparar com um erro de Classe não encontrada. Isto geralmente é resolvido quando adicionamos o diretório atual na busca. Desta forma, o javac ou java irá procurar em todas os subdiretórios da pasta atual. Para fazer isto, é necessário adicionar o ponto “.” em um dos diretórios definidos após o comando -cp. Exemplo: -classpath /src/teste/dir1:.
Digamos que o programador esteja dentro do pacote src. Neste caso, todos os subdiretórios de src serão inclusos na busca. Então, ../teste/, e seus subdiretórios, serão inclusos na busca. Além disto, é importante saber que a busca é feita da esquerda para a direita. Sendo assim, caso existam classes com nomes duplicados, a primeira a ser encontrada no diretório da esquerda, será utilizada. Então, preste atenção na hora de definir a ordem de procura!
A figura 6 mostrará a utilização de javac e java com o comando -cp para compilar e executar o HelloWorld.java.
package commandLine;
public class HelloWorld{
public static void main(String[] args)
{
System.out.println("Hello,World!");
}
}
Conclusão
Neste artigo foram abordados alguns pontos importantes relacionados a javac, java e classpath.
Espero ter ajudado na compreensão do assunto e ter motivado os programadores Java em dar uma maior importância aos comandos que foram apresentados.
Forte Abraço!
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo