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

Lista de opções que complementam o javac

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.

Pasta commandLine antes da execução da linha de comando

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.

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

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

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

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.

Lista de opções do comando java

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.

Utilizando o comando -cp junto com javac e java para executar 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!