O pacote Java JDK disponibiliza diversos utilitários para desenvolvimento, gerenciamento e monitoração de aplicações Java. Muitos são programas de linha de comando, ou seja, não dispõe de uma interface visual gráfica para utilização, e são ótimas opções para criação de scripts de automatização de processos.

O foco deste trabalho serão os utilitários do pacote JDK voltados ao desenvolvimento de softwares, tais como javac, jdeps, java, jdb, javap, javadoc e jar.

Diretório de trabalho

Para demonstrar a utilização dos utilitários de desenvolvimento do Java JDK será necessário criar um diretório de trabalho.

A seguir mostraremos os comandos necessários para a criação do diretório de trabalho no sistema operacional Linux de qualquer distribuição:

  1. Estando no modo gráfico, abra um Terminal e vá ao diretório home digitando o comando a seguir:
      $ cd ~
  2. Digite os comandos a seguir para criar e acessar o diretório de trabalho, respectivamente:
      $ mkdir RecursosJdk
      $ cd RecursosJdk

Para criar o diretório de trabalho no sistema operacional Windows devemos executar os passos a seguir:

  1. Abra o prompt MS-DOS e digite o comando a seguir para criar o diretório:
      mkdir RecursosJdk
  2. Entre no diretório de trabalho com o comando a seguir:
      cd RecursosJdk

Compilando um programa Java

Compilar um programa é converter o código-fonte em código de máquina. Este processo é realizado com o utilitário javac, que é de linha de comando e possui diversas opções, dentre as quais destacamos as presentes na Tabela 1.

Opção

Descrição

-verbose

Exibe o que esta acontecendo durante o processo de compilação.

-classpath

Especifica o local onde procurar por bibliotecas e classes.

-sourcepath

Especifica o local onde estão os arquivos fontes.

-d <diretório>

Especifica o local onde os arquivos .class serão gerados.

-s <diretório>

Especifica o local onde os arquivos fontes serão gerados.

-version

Mostra a versão do utilitário javac.

Tabela 1. Principais opções do utilitário javac.

Para demonstrar a utilização do utilitário javac, primeiramente deve-se criar um arquivo chamado HelloWorld.java no diretório de trabalho contendo o conteúdo da Listagem 1.

Listagem 1. HelloWorld.java

public class HelloWorld
  {
    public static void main(String[] args)
    {
      System.out.println("Hello World!");
    }
  }

Para compilar o programa HelloWorld.java abra um Terminal (no Linux) ou o Prompt MS-DOS (no Windows) e execute o comando a seguir:

 javac –verbose HelloWorld.java

O comando javac produzirá um arquivo chamado HelloWorld.class. Um arquivo com a extensão .class contém o código de máquina, que no Java é chamado bytecode.

Verificando dependências

Um programa Java, por mais simples que seja, pode utilizar diversas bibliotecas da Linguagem Java e também bibliotecas de terceiros. O utilitário jdeps analisa uma determinada classe e gera um relatório contendo todas as dependências existentes para a classe. Este utilitário de linha de comando possui diversas opções e as principais estão relacionadas na Tabela 2.

Opção

Descrição

-dotoutput <dir>

Especifica o local onde será gerado o arquivo DOT

-summary

Mostra apenas o sumário do relatório

-verbose

Mostra todos os níveis de dependência

-classpath <dir>

Especifica o local onde estão as classes para a análise

-profile

Mostra qual profile as dependências dependem

-version

Mostra a versão do utilitário jdeps

Tabela 2. Principais opções do utilitário jdeps

Para analisar as dependências da classe HelloWorld.class abra um Terminal (no Linux) ou o Prompt MS-DOS (no Windows) e execute o comando a seguir:

 jdeps HelloWorld.class

O utilitário jdeps produzirá um relatório parecido com o da Figura 1, onde mostra que a única dependência da classe HelloWord.class é o arquivo rt.jar. Este arquivo contém todos os recursos base da Linguagem Java, tais como, tipos de dados e funções e entrada e saída

Figura 1. Resultado do comando jdeps.

Executando um programa Java

Para executar o programa HelloWorld executar os comandos abra um Terminal (no Linux) ou o Prompt MS-DOS (no Windows) e execute o comando:

  java HelloWorld

Debugando um programa Java

Debugar um programa é analisar linha a linha a execução do mesmo. Esse processo é muito fácil quando se utiliza uma IDE (Integrated Development Environment). Nas situações onde uma IDE não esta disponível, é possível debugar um programa Java utilizando o utilitário de linha de comando chamado jdb.

Para demonstrar a utilização do utilitário jdb deve-se criar um arquivo chamado DebugSample.java no diretório de trabalho chamado RecursosJdk contendo o conteúdo da Listagem 2.

Listagem 2. DebugSample

public class DebugSample
  {
    public static void main(String[] args) {
      
      System.out.println("Debug Sample...");
   
      int a = 10;
      System.out.println("Value of 'a': " + a);
   
      int b = 20;
      System.out.println("Value of 'b': " + b);
     
      int c = a * b;
      System.out.println("a x b is....: " + c);
    }
  }

É necessário que o programa esteja compilado para que possa ser debugado. Para compilar o programa DebugSample execute o comando javac DebugSample.java na linha de comando do Terminal (Linux) ou do Prompt MS-DOS (Windows).

Para iniciar o processo de depuração do programa DebugSample, execute o comando jdb DebugSample. A execução do comando produzirá um resultado semelhante ao da Figura 2.

Figura 2. Resultado do comando jdb.

Antes de iniciar o processo de debug é necessário dizer ao jdb para ele parar no início do programa. Isto é feito digitando o comando stop in DebugSample.main no prompt do jdb.

O comando produzirá uma saída semelhante ao da Figura 3.

Figura 3. Comando stop in.

Para iniciar o processo do debug efetivamente, digite o comando run no prompt do jdb. A Figura 4 ilustra o resultado do comando run.

Figura 4. Resultado do comando run.

A qualquer momento do processo de depuração do programa é possível visualizar um trecho do código fonte referente ao ponto onde o debug se encontra. Para isso basta digitar o comando list no prompt do jdb. A Figura 5 exibe o resultado do comando list.

Figura 5. Resultado do comando list.

A figura mostra que o processo de debug esta parado na linha 5. Isto é sinalizado pelo conjunto de caracteres "=>" logo após o número 5.

Para avançar para a próxima linha de execução basta digitar o comando next no prompt do jdb. A Figura 6 mostra o resultado do comando next.

Figura 6. Resultado do comando next.

Pela Figura 6 pode-se verificar que o processo de debug avançou para a linha 7. É possível definir um novo ponto de parada digitando o comando a seguir:

stop at DebugSample:10

O comando produzirá uma saída semelhando ao da Figura 7.

Figura 7. Resultado do comando stop.

Para avançar até o novo ponto de parada basta digitar o comando cont no prompt do jdb.

Com esta sequencia de comandos é possível debugar todo um programa Java por linha de comando. Para finalizar o processo de debug digite novamente o comando cont no prompt do gdb.

Desmontando um programa Java

Desmontar um programa significa reverter o código de máquina em código fonte e para isto deve-se utilizar o programa javap. Este utilitário de linha de comando possui diversas opções e as principais estão relacionadas na Tabela 3.

Opção

Descrição

-version

Mostra a versão do utilitário javap

-verbose

Exibe o que esta acontecendo durante o processo de desmontagem.

-l

Mostra o número da linha e o local da tabela de variáveis.

-pulbic

Mostra apenas classes e membros públicos.

-protected

Mostra apenas classes e membros protegidos e públicos.

-private

Mostra todas as classes e membros.

-c

Desmonta a classe.

-s

Mostra assinaturas de tipos internos.

-sysinfo

Mostra informações de sistema (path, tamanho, data, MD5 Hash)

-constants

Mostra constantes.

Tabela 3. Principais opções do comando javap.

Para desmontar a classe HelloWorld.class digite o seguinte comando:

 javap -c HelloWorld.class

Observação. O processo de desmontagem nunca conseguirá gerar um resultado idêntico ao código fonte original. O processo serve apenas para resgatar alguma parte do código fonte original e dar uma ideia de como o código foi construído.

Gerando documentação

Todo programa Java deve ter algum tipo de documentação. Uma opção é acrescentar comentários no próprio código fonte do programa. A Linguagem Java dispõe de um conjunto de recursos para adicionar comentários no programa chamado comentários Javadoc.

Os principais recursos para comentários Javadoc estão relacionados na Tabela 4.

Opção

Descrição

/** ... */

Define o início e o término de um comentário Javadoc.

@author

Utilizado apenas para classes e interfaces. Indica o autor.

@version

Utilizado apenas para classes e interfaces. Indica a versão.

@param

Utilizado apenas para métodos e construtores. Indica os parâmetros recebidos.

@return

Utilizado apenas para métodos. Indica o valor retornado.

@exception

Utilizado apenas para métodos. Indica o tipo da exceção retornada.

Tabela 4. Recursos para comentários Javadoc.

A Listagem 3 mostra um programa Java com os comentários Javadoc.

Listagem 3. Programa Java com comentários JavaDoc.

/**
   * Programa Java para demonstrar a utilização do utilitário javadoc.
   *  
   * @author Eros Vitor Bornatowski
   * @version 1.0.0
   *
   */
  public class JavadocSample
  {
    public static void main(String[] args) {
      System.out.println("Hello Java Language!!!");
    }
   
    /**
    * Calcular juros simples.
    *
    * @params c Capital
    * @params i Taxa
    * @params n Período
    * @returns  Juros calculado 
    */
    private double calcularJurosSimples(double c, float i, int n)
    {
      return c * (i/100) * n;
    }
  }

A geração da documentação é feita pelo utilitário de linha de comando chamado javadoc. Este utilitário de linha de comando possui diversas opções, dentre as quais podemos destacar -d <dir>, que especifica o local onde a documentação será gerada.

Para gerar a documentação do programa JavadocSample.java basta executar o comando a seguir num Terminal Linux ou no Prompt MS-DOS:

  javadoc –d c:\DocumentacaoJavadoc JavadocSample.java

O comando irá gerar uma série de arquivos HTML referente a documentação do programa JavadocSample.java. O diretório DocumentacaoJavadoc será criado caso ele ainda não exista.

É possível personalizar a documentação gerada pelo utilitário javadoc, mas isto está fora do escopo desse artigo. A Figura 8 mostra a página inicial da documentação HTML gerada pelo comando javadoc.

Figura 8. Página inicial da documentação gerada pelo Javadoc.

Distribuindo o programa Java

Distribuir um programa é o último passo do ciclo básico do desenvolvimento de uma aplicação. Na linhagem Java a distribuição é o processo de reunir todos os arquivos da aplicação num único arquivo. Isto é realizado pelo utilitário jar. Este utilitário de linha de comando possui diversas opções e as principais estão relacionadas na Tabela 5.

Opção

Descrição

-c

Cria um novo arquivo jar

-t

Lista o conteúdo do arquivo jar

-x

Extrai arquivos do arquivo jar

-u

Atualiza arquivos existentes

-v

Mostra os procedimentos realizados pelo programa.

-f

Especifica o nome do arquivo

-m

Inclui informação do manifesto do arquivo de manifesto especificado

-e

Especifica o ponto de entrada da aplicação para aplicação stand-alone empacotada num arquivo jar executável.

-O

Apenas empacota sem utilizar a compressão

-M

Não cria um arquivo de manifesto

-i

Gera um índice de informação para os arquivos especificados no jar

-C

Mudar para o diretório especificado e inclue o seguinte arquivo.

Tabela 5. Principais opções do programa jar.

Para empacotar e distribuir o programa HelloWorld, num Terminal Linux ou no Prompt MS-DOS (Windows), execute o comando a seguir:

  jar cvfe HW.jar HelloWorld HelloWorld.class

Uma vez gerado o arquivo JAR, este pode ser distribuído e executado em qualquer sistema operacional que tenha o Java Runtime Environment (JRE) instalado.

Para executar o arquivo HW.jar gerado pelo comando anterior, execute o comando java –jar HW.jar na linha de comando do Terminal Linux ou no Prompt MS-DOS.

Os utilitários apresentados neste artigo estão presentes em qualquer versão do pacote Java JDK. A perfeita compreensão e utilização dos utilitários de linha de comando são fundamentais para a criação de processos de automação de tarefas. Muitos utilitários são utilizados por outros programas, tal como o Eclipse, que é uma ferramenta de desenvolvimento Java que integra vários recursos, tais como edição, compilação e depuração de um programa Java.

Links

Oracle, Java SE 6 Documentation, JDK Tools and Utilities.
http://docs.oracle.com/javase/6/docs/technotes/tools/

Oracle, Java SE 7 Documentation, JDK Tools and Utilities.
http://docs.oracle.com/javase/7/docs/technotes/tools

Oracle, Java SE 8 Documentation, JDK Tools and Utilities.
https://docs.oracle.com/javase/8/docs/technotes/tools/