Exercicio do livro de certificação

Boa tarde.

Estou estudando para a certificação e resolvi fazer tudo usando o DOS (linha de comando) e de cara estou com problemas.

Estou tentando fazer o primeiro exemplo do livro de certificação SCJP (pg. 11). Criei a classe abstrata Fruit no diretório c:\br\com\dominio\food e a classe Apple no c:\br\com\dominio\default.

A classe Fruit compilou sem problema mas a classe Apple da erro dizendo que não pode acessar a classe Fruit.

Isso é configuração de classpath?

Já tentei colocar as duas classes no mesmo diretório, mas foi em vão.

Tem alguma dica?

Segue as classes:

package br.com.rmello.food;

public abstract class Fruit{

	public abstract void saborFruit();
    
}
import food.Fruit;

public class Apple extends Fruit {

	public void saborFruit(){
		System.out.println("teste");	
	}

} 

Grato,
Renato

acho que o import precisa ser assim:import br.com.rmello.food.Fruit;

Já tentei fazer isso e aparece uma mensagem dizendo que o pacote não existe “package br.com.rmello.food does nor exist”

Já tirei até o extends da classe deixando apenas o import mas não encontra a classe.

Acho é falta eu fazer alguma configuração para trabalhar em Dos, mas não teio idéia do que, pois até onde entendo mau classpath e p java_home estão ok.

Qual comando está usando para compilar ?
E quando manda compilar uma classe com pacotes, tens de informar o pacote dela. A classe ‘Fruit’ não é ‘Fruit’, é pacote.Fruit.

Nel,

Eu entrei no diretório onde se encontra cada uma das classes (c:\br\com\rmello\food no caso de Fruit e c:\br\com\rmello\default no da de Apple) e compilei com o comendo javac nomeDaClasse.java.

No caso da Fruit compilou e gerou o .class já no casso da Apple de erro ao tentar encontrar Fruit (import).

Tentrei fazer da forma que voce falou. Fui no diretorio rmello e tentei compital com o comando javac food.Fruit.java para deu um erro dizendo que não encontrou Fruit.java (file not found: food.Fruit.java) e passou a sintexe do comando javac (Usage: javac

tem ídéia o pq?

[quote=rmello]Nel,

Eu entrei no diretório onde se encontra cada uma das classes (c:\br\com\rmello\food no caso de Fruit e c:\br\com\rmello\default no da de Apple) e compilei com o comendo javac nomeDaClasse.java.

No caso da Fruit compilou e gerou o .class já no casso da Apple de erro ao tentar encontrar Fruit (import).

Tentrei fazer da forma que voce falou. Fui no diretorio rmello e tentei compital com o comando javac food.Fruit.java para deu um erro dizendo que não encontrou Fruit.java (file not found: food.Fruit.java) e passou a sintexe do comando javac (Usage: javac

tem ídéia o pq?
[/quote]

Dá uma lida aqui: http://docs.oracle.com/javase/1.3/docs/tooldocs/win32/javac.html
Tenta assim: javac -cp . food.Fruit.java

Estou supondo que o package completo seja somente o food.

Voce acha que não tem nada a ver com classpath ou coisa assim?

Vou ler esse doc.

[quote=rmello]Voce acha que não tem nada a ver com classpath ou coisa assim?

Vou ler esse doc.[/quote]

O comando que lhe passei, não funcionou ? E esse seu código em um Eclipse da vida, funciona certinho, né? Porque nem me atentei a ele, pois imagino que seja erro de compilação apenas, por não estar indicando o classpath.

Tentei fazer da forma que voce passou mas diz que não encontra o arquivo (no source file).

Se eu fizer sem o -cp (javac food.Fruit.java) da file not found.

Para ter certeza que não é problema de codigo acabei de fazer o código no eclipse com executar sem problema.

Segue o código abaixo:

package br.com.rmello.food;

public abstract class Fruit{

	public abstract void saborFruit();
    	
}
package br.com.rmello.default;

import br.com.rmello.food.Fruit;

public class Apple extends Fruit {
	
	public static void main(String[] args) {
		
		Apple ap = new Apple();
		
		ap.saborFruit();
	}

	@Override
	public void saborFruit() {
		System.out.println("Maça");
		
	}

}

Assim, não funcionou ?

java -cp . br.com.rmello.food.Fruit.java
java -cp . br.com.rmello.default.Apple.java

E troca esse .default, é palavra reservada.
Isso deve ser executado na raiz do projeto, digamos assim:

C:\Mello\projeto\br…

Seria executar esse comando estando no diretório ‘projeto’.

Nel ai que deve estár o problema…

Eu não criei esse projeto…

Como faço isso?? No eclipse isso é feito sozinho.

Não Mello, não é isso. Eu me referi que os comandos que passei logo acima devem ser executados naquela ordem e na raiz do seu projeto. Você pode adicionar onde quiser, por exemplo:

C:\Filmes\Teste\br\com…

Nesse caso, a “raiz” é Teste, pois abaixo é o seu projeto, entende ? Então tu estaria na pasta “Teste” e executaria os comandos acima. Obviamente, o nome da pasta “projeto” é muito mais condizente do que “Filmes\Teste”, concorda? :slight_smile:

Fiz o seguinte…

Criei uma pasta java e coloquei o br.com… dentro da pasta java.

alterei o nome da pasta default para generico e dentro de fonte também.

Compilei conforme voce pediu e também tentei compilar sem o -cp mas não funcionou.

Veja as mensagens:

com o -cp deu no source files

sem o -cp apareceu:
error : Class names, ‘br.com.rmello.food.Fruit.Java’, are only accepted is annotation processing is explicitly requested.

O que é isso?

Desculpe, estou “destreinado”, acostumado com IDE. Troque os ‘.’ do package por ‘’ e depois ‘/’. Sim, veja como eu fiz:

javac -cp . br\com\guj\food\Fruit.java

javac -cp . br\com\guj\foods\Apple.java

// para rodar

java br/com/guj/foods/Apple

Funcionou perfeitamente, lembrando dois detalhes:

1 - Alterei o nome do package, mas não influência em nada, a ideia é exatamente a mesma.

2 - Ambiente Windows

Yes!!! Isso ai Nel valeu!!

Obrigado.