Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Duvida como compilar pelo terminal duas classes em java

Seria a classe Servidor e ThreadSockets;

Agradeço a Ajuda

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

4 respostas

Olá,

Resposta curta:

no diretório dos .java execute:

$ javac *.java

Resposta longa:

vamos imaginar a seguinte estrutura de diretório:

miscelania/
├── bin
└── src
    ├── A.java
    └── Program.java

Ou seja, vc está no dir miscelania/ e dentro dele existe dois subdiretorios,

  • bin/: destinado aos .class gerados

  • e src/: destinado aos .java, sendo eles:

  • Program.java

    public class Program {
      public static void main(String[] args){
          A a = new A();
          a.printaFrase("Hello World");        
      }
    }
  • A.java

    public class A {
      void printaFrase(String frase) {
          System.out.println(frase);
      }
    }

Nesse caso, vc executaria:

 $ javac -cp . -sourcepath src/ src/*.java -d bin/

Sendo que os .class seriam gerados na pasta bin/.

A nova estrutura do diretorio ficaria assim:

 miscelania/
├── bin
│   ├── A.class
│   └── Program.class
└── src
    ├── A.java
    └── Program.java

Veja que apareceram os .class no diretório bin/

Para executar utilize:

$ java -cp bin/ Program 

Essa segunda maneira, ficaria bem mais organizado seus códigos. É claro, seria melhor se usássemos pacotes.

Nossa Muito Obrigado Ajudou muito. Outra Duvida. Quando no arquivo da classe fiz diversos imports tipo import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList;

Compila do mesmo jeito?

solução!

Sim. Para classes do Java, ou seja, que já estão no classpath é tranquilo.

Mas o parâmetro -cp é pra isso mesmo, indicar classpaths adicionais.

Assim, caso tenha classes em locais diferentes e deseje carrega-las, vc deve informar o caminho da busca separando com dois pontos, exemplo.

.../miscelania$ javac -cp libs/javafaker/*:bin/:. -sourcepath src/ src/main/Program.java -d bin/

O comando acima, compila a classe Program,

  • Classe Program.java
package main;

import java.util.Locale;
import model.RandomNumber;

public class Program {
    public static void main(String[] args){

        int i = RandomNumber.getIntNumber(1, 150);
        System.out.printf("%d\n", i);
        }
}

existente no pacote main, informando como classpath adicionais os diretórios libs/javafaker e o diretório bin/. Veja a estrutura do diretório:

miscelania/
├── bin
│   ├── main
│   │   └── Program.class
│   └── model
│       └── RandomNumber.class
├── libs
│   └── javafaker
│       ├── commons-lang3-3.5.jar
│       ├── generex-1.0.2.jar
│       ├── javafaker-1.0.2.jar
│       └── snakeyaml-1.23-android.jar
└── src
    ├── main
    │   └── Program.java
    └── model

Perceba que dentro do pacote model, não existe arquivo algum. A classe RandomNumber está localizada dentro de bin/, por isso o diretório foi informado no classpath durante a compilação.

Para rodar o .class, execute:

$ java -cp libs/javafaker/*:bin/:. main.Program

Muito Obrigado Ajudou Bastante