Exemplos práticos: como compilar e executar uma aplicação Java (comandos javac e java)

Compilando uma aplicação:

 

Opções importantes para se lembrar do comando ‘javac’ nesta etapa:

  • -d (destiny – onde vão os *.class)
  • source (onde ficam os *.java)

 

  1. Escreve-se a classe em um determinado pacote:

     

    package com.pedroabs;

    public class MyClass {

    public static void main(String[] args){

    System.out.println(“hellow… i’m pedro!!!”);

    }

    }

     

  2. Salva a classe no diretório seguindo a ordem descrita no pacote (package) acima:

     

  3. Demonstra que no diretório de destino (-d) não há nada:

     

     

    Observa-se que a pasta ‘classes’ já é pré-criada caso contrário não poderíamos executar o comando abaixo com a opção ‘-d classes’.

     

  4. Executa o comando:

     

    C:\myProject>javac -d classes src/com/pedroabs/MyClass.java

     

    Explicando um detalhe importante:

    C:\myProject>javac -d classes
    src/com/pedroabs/MyClass.java

     

    A parte que está em laranja é a raiz do nosso projeto. A opção ‘-d’ (destiny) classes será a pasta em que o compilador javac irá compilar a classe baseado no seu package, ou seja, o caminho final fica ‘classes/com/pedroabs/’ MyClass.class (olhe o pacote da clase no passo1). O texto que se encontra em verde é o ‘source’ (origem) de onde se encontra a classe que deverá ser compilada.

     

    Falando de package:

    É importante ressaltar que se a classe possui a instrução de package, então a estrutura de diretório a qual ela está contida deve obedecer a mesma estrutura da instrução package, ou seja, para instrução ‘package com.pedroabs;’ a classe deverá se encontrar dentro da pasta ‘/com/pedroabs/MyClass.java’.

     

  5. Demonstra que a classe foi criada no diretório de destino

 

 

Executando a aplicação previamente compilada:

 

C:\myProject\classes>java com.pedroabs.MyClass

 

Repare que estamos dentro da pasta classes. Temos que passar o caminho inteiro (full qualified name) da classe.

 

A instrução abaixo não funciona pois ‘classes’ não faz parte da definição do pacote (package com.pedroabs;), ou seja, não faz parte do full qualified name.

 

C:\myProject>java classes.com.pedroabs.MyClass

 

Exception in thread “main” java.lang.NoClassDefFoundError: classes/com/pedroabs/MyClass (wrong

name: com/pedroabs/MyClass)

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:752)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:144)

at java.net.URLClassLoader.defineClass(URLClassLoader.java:379)

at java.net.URLClassLoader.access$100(URLClassLoader.java:75)

at java.net.URLClassLoader$1.run(URLClassLoader.java:294)

at java.net.URLClassLoader$1.run(URLClassLoader.java:288)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:287)

at java.lang.ClassLoader.loadClass(ClassLoader.java:392)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:334)

at java.lang.ClassLoader.loadClass(ClassLoader.java:332)

at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:195)

 

Podemos também, executar da seguinte forma, não esquecendo de atribuir o classpath:

 

Caminho relativo: myProject/classes

 

C:\>java -classpath myProject/classes com.pedroabs.MyClass

hellow… i’m pedro!!!

 

É interessante notarmos que:

  1. Estamos no diretório raiz: c:\
  2. A instrução ‘-classpath myProject/classes’ atribui momentaneamente um classpath de pesquisa para a classe que se deseja executar.
  3. O “fully qualified name” da classe é ‘com.pedroabs.MyClass

 

 

Caminho absoluto: c:/myProject/classes

 

C:\>java -classpath c:/myProject/classes com.pedroabs.MyClass

hellow… i’m pedro!!!

 

Outros caminhos relativos:

 

C:\myProject\classes\com\pedroabs> java -cp ../../ com.pedroabs.MyClass

hellow… i’m pedro!!!

 

C:\myProject> java -cp classes com.pedroabs.MyClass

hellow… i’m pedro!!!

 

 

 

Esta entrada foi publicada em Compilação e distribuição, Java com as etiquetas . ligação permanente.

2 respostas a Exemplos práticos: como compilar e executar uma aplicação Java (comandos javac e java)

  1. Cléuber José diz:

    Poxa cara, muito interessante, bem explicado

    Queria saber como é que eu faço para executar 2 classes de uma só vez, sendo que elas estejam em pacotes diferentes.

    Obrigado!

    Gostar

    • pedroabs diz:

      Olá Cléuber!
      Primeiramente obrigado por ter lido, gostado e elogiado o “post” que coloquei em meu blog.

      Toda aplicação Java tem como ponto de entrada para execução da mesma o método “public static void main (String[] args)” em uma classe qualquer. Ou seja, se você desenvolveu uma aplicação que tenha uma “porrada” de classes em uma “porrada” de packages, alguma destas classes terá de possuir o método ‘main’ (acima descrito) para poder ser chamada externamente (pelo usuário) através do comando de console “java”.

      Procurando na documentação e observando as aplicações existentes, eu nunca vi como executar duas classes ao mesmo tempo em uma única chamada ao comando de prompt “java” mesmo que elas estejam no mesmo pacote (package).

      De qualquer forma, deixo aqui, o link para consulta do comando de prompt “java” (em inglês) caso você queira dar uma olhada:
      http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/java.html

      Se você não se sentir confortável, outra possibilidade seria postar sua dúvida no GUJ:
      http://guj.com.br/

      Mais uma vez, agradeço seu interesse e espero, de alguma forma, ter te ajudado.

      Pedro Abs !

      Gostar

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s