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.

Figura 1: Lista de opções que complementam o javac

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:

Listagem 1: Sintaxe para compilação de uma classe

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.

Figura 2: Pasta commandLine antes da execução da linha de comando

As figuras 3 e 4 mostram a execução do comando pasta commandLine após ela.

Figura 3: Execução do comando javac -d bin HelloWorld.java

Figura 4: Pasta commandLine após a execução do comando

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.

Figura 5: Lista de opções do comando java

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:

Listagem 2: Sintaxe do comando classpah

-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.

Figura 6: Utilizando o comando -cp junto com javac e java para executar HelloWorld.java

Listagem 3: Código da classe 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!

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados