A JVM não pode executar diretamente o código que você escreve. Ele só sabe executar programas escritos em bytecode. Bytecode é uma linguagem de baixo nível que se aproxima do código de máquina.

Para Java, a compilação é a tradução de um programa (de alto nível) escrito em Java para o mesmo programa escrito em bytecode.

Seu código é passado em um arquivo .java para o compilador. Se o compilador não encontrar erros no código, você receberá um novo arquivo de bytecode. Este arquivo terá o mesmo nome, mas uma extensão diferente: .class . Se houver erros no código, o compilador informará "o programa não compilou". Então você precisa ler cada mensagem de erro e corrigir os erros.

Você usa o comando javac para invocar o compilador, que faz parte do JDK (Java Development Kit). Isso significa que se você instalar apenas o JRE (Java Runtime Environment), não terá o compilador! Você terá apenas a JVM, que só pode executar bytecode. Assim, instalamos o JDK e passamos nosso arquivo .java para o compilador.

Por exemplo, vamos pegar um programa simples com alguma saída de console:


class MySolution {
   public static void main(String[] args) {
      System.out.println("Hi, command line!");
   }
}

Vamos salvar este código no arquivo D:/temp/MySolution.java .

Vamos compilar nosso código usando o comando


D:\temp>javac MySolution.java

Se não houver erros de compilação no código, um arquivo MySolution.class aparecerá na pasta temporária . Além do mais, o arquivo MySolution.java contendo seu código não vai a lugar nenhum. Permanece exatamente onde estava. Mas agora MySolution.class contém bytecode e está pronto para ser executado diretamente pela JVM.

Nosso exemplo é o mais simples possível, mas mesmo os projetos maiores e mais complexos usam o comando javac . Então será muito útil para você saber como funciona.

Você pode compilar mais de uma classe por vez. Por exemplo, suponha que haja outro arquivo Cat.java na pasta temporária :


D:\temp>javac MySolution.java Cat.java

ou isto:


D:\temp>javac *.java

Depois de compilados, os arquivos .class podem ser compactados em um arquivo jar , que pode ser convenientemente movido para diferentes computadores e executado neles. Aqui está um exemplo de como criar um arquivo jar :


D:\temp>jar cvfe myjar.jar MySolution MySolution.class Cat.class

onde:

  • jar é o comando para criar arquivos .jar , incluso no JDK

  • cvfe são opções de linha de comando com os seguintes significados:

    • c – cria um novo arquivo jar

    • v – exibir informações detalhadas

    • f – indica que queremos que a saída da ferramenta seja colocada em um arquivo ( myjar.jar )

    • e – indica o ponto de entrada ( MySolution ), ou seja, a classe que contém o método principal

  • MySolution.java Cat.class – nomes separados por espaço dos arquivos que serão compactados no arquivo jar .

Veja como executamos o arquivo jar resultante:


D:\temp>java -jar myjar.jar
Para informações mais detalhadas:
As ferramentas javac e jar possuem ajuda integrada. Para exibi-lo, execute o seguinte na linha de comando:
  • javac --ajuda
  • jar --ajuda