Problemas ao compilar com javac

8 respostas
Ravnus

Bom, pessoal, meu problema é simples: Quando eu vou compilar minhas classes, ela dá um erro como se não estivesse achando a outra classe envolvida no processo.

Segue o código:

package com.example.model;

import java.util.*;

public class TestaBeerExpert {

	public static void main(String[] args) {

		BeerExpert be = new BeerExpert();

		List list = be.getBrands("amber");

		Iterator it = list.iterator();
	 
		while(it.hasNext()) {
			System.out.println("Try : " + it.next());
		}

	}
}
package com.example.model;

import java.util.*;

public class BeerExpert {

	public List getBrands(String color) {

		List brands = new ArrayList();
		
		if(color.equals("amber")) {
			brands.add("Jack Amber");
			brands.add("Red Moose");
		}
		else {
			brands.add("Jail Pale Ale");
			brands.add("Gout Stout");
		}

	return (brands);
	
	}
}

Quando eu tiro a identificação do package e compilo a classe TestaBeerExpert, o programa roda normalmente, mas quando eu coloco “package com.example.model;”, a classe não compila, dá cannot find symbol, mas não entendo porquê.

Estou usando o javac para compilar e eu compilo da seguinte forma:

javac TestaBeerExpert.java

Quando eu coloco os pacotes, eu preciso de alguma informação a mais no javac?

Alguém tem algum tutorial explicando bem sobre o javac?

8 Respostas

zerokelvin

Vc tá compilando no prompt certo?

nesse caso, vc executa o javac com todo o caminho, do diretorio mais geral… suponhamos q sua pasta “com” ou seu pacote esteja em desktop. vc vai fazer entrar pela prompt em desktop e vai bater
javac com.example.model.TestaBeerExpert.java

Mas verifique se este pacote está “encontrável”, lá em na variávies de ambiente… classpath, paths… etc.

Utilize uma ide pra facilitar… ah, dá uma olhada em artigos, aki no guj mesmo

Ravnus

Eu quero usar o javac justamente para abrir mão das facilidades da IDE.

Está tudo configurado sim, eu já testei no Eclipse e funcionou. O meu problema é quando eu coloco o package, ele dá cannot find symbol na chamada do objeto de BeerExpert.

Ravnus

Não achei nenhum artigo no GUJ sobre isso.

Hebert_Coelho

No prompt vc está de dentro da pasta raiz?
O diretório das pastas está igual ao declarado no package?

zerokelvin

tá certo, tem q começar no sistema bruto e simples, que nem painel de jipe!

Primeiro vc cria as pastas com o mesmo nome do pacote. No seu caso, vc cria uma pasta “com”, dentro dela uma pasta “example”, e dentro desta a pasta “model”. Dentro da model vc coloca a sua classe que precisa ser compilada.

Então vc precisa fazer a maquina java enxergar essa sua pasta “com”. Pra isso vc precisa coloca-la numa pasta que esteja no path (http://www.guj.com.br/article.show.logic?id=108)

Suponhamos q sua “com” esteja no desktop, então a pasta desktop precisa ser colocada no path, como no link q passei ae em cima.

Ravnus

É isso ai mesmo! xD

zerokelvin:
Então vc precisa fazer a maquina java enxergar essa sua pasta “com”. Pra isso vc precisa coloca-la numa pasta que esteja no path (http://www.guj.com.br/article.show.logic?id=108)

Suponhamos q sua “com” esteja no desktop, então a pasta desktop precisa ser colocada no path, como no link q passei ae em cima.

Vou ler o link agora.

===============================================================

Eu estava tentando compilar a partir da pasta principal do meu projeto, fazendo:

javac src/com/example/model/Testa.java

Isso não estava funcionando, daí eu tentei compilar de dentro da minha pasta src, com o comando:

javac com/example/model/Testa.java

E deu certo, mas não entendi porque a partir da pasta principal não deu certo.

Minha estrutura de diretórios está assim:

beerv1/src/com/example/model

Ravnus

jakefrog:
No prompt vc está de dentro da pasta raiz?
O diretório das pastas está igual ao declarado no package?

No prompt, eu estava na pasta principal do projeto.

O diretório estava igual, mas eu estava compilando “de fora”, uma pasta antes do diretório do package, tipo assim:

Meu package estava declarado como com.example.model e quando eu ia compilar no javac, eu digitava: javac src/com/example/model.

Eu deletei tudo e tentei refazer, até agora está dando certo, mas ainda não cheguei na parte onde deu o erro. Eu estou refazendo e quando conseguir compreender o erro do meu programa / diretórios ou etc, postarei a solução. Eu achei algumas coisas sobre o javac e fui lendo para entender o que cada parte do comando faz.

Abraços.

=============================================

Editando:

Eu refiz o projetinho para ver aonde poderia estar o erro, mas pelo o que eu notei, no projeto em si não existem erros, mas o problema é quando eu uso a minha classe de teste dentro do mesmo pacote que a classe que eu quero testar. Nesse caso, eu já postei, no primeiro post, as classes. Voltando ao problema, quando eu coloco a notação dos pacotes

package com.example.model;

nas duas classes e depois tento compilar com:

javac -d classes src\com\example\model\TestaBeerExpert.java

Ele dá erro na parte do código onde eu faço isso:

BeerExpert be = new BeerExpert();

Mas, se eu não colocar a notação de package e compilar de dentro do diretório onde estão os arquivos, o programa compila, gera os .class normal e roda normalmente.

Agora, eu pergunto:

Existe algum macete ou alguma coisa diferente quando se tem que compilar classes que estão no mesmo pacote, usando o javac?

Ravnus

Pessoal, o meu problema ainda continua. Eu não consigo compilar as classes quando estão no mesmo pacote.

Conforme eu disse acima.

Ajudem-me, por favor. Eu não consegui entender essa. Quando elas estão em pacotes diferentes, o programa compila, mas quando eu coloco todas no mesmo pacote, não roda.

Lembrando que eu sempre coloco as informações dos pacotes e etc.

Criado 16 de dezembro de 2010
Ultima resposta 24 de dez. de 2010
Respostas 8
Participantes 3