Compilar por linha de comando

17 respostas Resolvido
P

Como se compila por linha de comando um código que possui vários pacotes?

Por exemplo

com.pacote1.Principal.java
com.pacote2.Auxiliar.java
com.pacote3.Utilitarios.java

Supondo que a classe principal tenha imports das classes Auxiliar e Utilitários, como compilar e executar essa estrutura por linha de comando?

Obs: Não encontrei resposta na internet nem na documentação.

17 Respostas

Jederson_Andre

Se vc importou os pacotes, blz, é so compilar a classe que contem

public static void main(String args[]){

}

digite o comando no pront MS-DOS

javac suaClasse.java
P

Consegui compilar.

Criei as três classes::
com.pacote1.Principal.java
com.pacote2.Auxiliar.java
com.pacote3.Utilitarios.java

e compilei com “javac ./com/pacote1/Principal.java”.

Isso gerou um .class em cada um dos diretórios. Após isso tentei executar com “java ./com/pacote1/Principal”, mas ocorre a mensagem: “Error: Could not find or load main Class …com.pacote1.Principal”.

package com.pacote1;

import com.pacote2.Auxiliar;
import com.pacote3.Utilitarios;

public class Principal {


	public static void main(String... args){

		Auxiliar aux = new Auxiliar();
		Utilitarios util = new Utilitarios();

   		aux.falar();
		util.falar();
	}

}

.

package com.pacote2;

public class Auxiliar {

	public void falar(){
		System.out.println("Oi, eu sou a classe Auxiliar");
	}
}

.

package com.pacote3;

public class Utilitarios {

	public void falar(){
		System.out.println("Oi, eu sou a classe Utilitarios");
	}
}
Jederson_Andre

esses pontos estão no seu codigo?? (String… args)??

dpois que vc compilou é so fazer

java suaClasse
P

Sim, os pontos estão no código, isso está correto, se chama varargs, você passa uma quantidade de parâmetros que ainda não sabe, é a mesma coisa que String[] args.

Acessei o caminho “com/pacote1”, e digitei “java Principal” e deu o mesmo erro.

Apenas para testar alterei o “String… args” por “String[] args” mas não adiantou…como falei, é a mesma coisa.

Tem alguma indicação?

Jederson_Andre

É “String args[]”

public static void main(String args[]){ }
P

Não cara, String[] args, String…args e String args[] são a mesma coisa. : |

Faça um Hello world com cada umas das três e veja.

staroski
Solucao aceita

java -classpath . com.pacote1.Principal

staroski

Os três pontos indicam que os parâmetros são opcionais.
Isto é, o método main pode ser invocado sem parâmetro nenhum ou com uma ou mais Strings passadas por parâmetro.
Dentro do método você manipula esse tipo de parâmetro como se fosse um array.

P

Obrigado, funcionou.

java -classpath . com.pacote1.Principal

Pode me explicar o que aconteceu aqui? Porque foi colocado um ponto e depois o caminho do pacote com a classe principal. Porque foi chamado somente o parâmetro -classpath e nada mais?

staroski

O -classpath é para você adicionar diretórios e/ou arquivos ao classpath da aplicação.
O ponto indica o diretório onde você está no momento.
O com.pacote1.Principal é o nome do pacote e classe que você deseja executar.

P

Ok, obrigado. Mas os diretório do class path não deveriam ser separados por ponto e vírgula(wimdows) ou dois pontos(linux)?

.;com.pacote1.Principal;
staroski

Sim, mas no exemplo o único diretório incluso é o diretório corrente indicado por ponto: .

Depois vem o nome da classe a ser executada: com.pacote1.Principal

O nome do pacote faz parte do nome da classe.

D

Inseri essa linha no cmd mas o mesmo erro se repetiu:

could not find or load main class
staroski

O comando java é para executar sua aplicação (arquivos .class ou .jar).
O comando javac é para compilar o código fonte (arquivos .java)

Tem certeza de que compilou a classe antes de tentar executá-la?
Como fez para compilar?

D

Sim sim, eu compilei usando javac pastaDoArquivo/Arquivo.java

D

error-java

D

Descobri o erro, era na classe, não tinha inserido o nome do pacote nela (vacilo).

Foi mal aí irmão.

Valeu.

Criado 18 de dezembro de 2017
Ultima resposta 22 de ago. de 2019
Respostas 17
Participantes 4