Compilar por linha de comando

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.

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

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");
	}
}

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

dpois que vc compilou é so fazer

java suaClasse

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?

É “String args[]”

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

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.

java -classpath . com.pacote1.Principal

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.

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?

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.

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;

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.

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

could not find or load main class

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?

1 curtida

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

error-java

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

Foi mal aí irmão.

Valeu.