Compilação na linha de comando não identifica classes instanciadas do mesmo pacote?

7 respostas Resolvido
java
suellenbelfort

Compilo um código simples na ide, quatro classes, incluindo a principal. Porém, quando tento compilá-lo em linha de comando, ele não reconhece as classes instanciadas. Quero salientar que as quatro classes encontram-se no mesmo pacote.

O erro que aparece:

javac conta.java

conta.java:9: error: cannot find symbol

Cliente titular;

^

symbol:   class Cliente

location: class Conta

conta.java:10: error: cannot find symbol

Data dataAbertura;

^

symbol:   class Data

location: class Conta

conta.java:18: error: cannot find symbol

titular = new Cliente(nomeCliente, sobrenomeCliente, cpfCliente);

^

symbol:   class Cliente

location: class Conta

conta.java:19: error: cannot find symbol

dataAbertura = new Data();

^

symbol:   class Data

location: class Conta

4 errors

Segue o código da classe que não está compilando:

package caelum;

public class Conta{

	int numero;
	String nomeConta, sobrenomeConta, cpfConta;
	String agencia;
	double saldo;
	Cliente titular;
	Data dataAbertura;
	
		
	Conta(String nomeCliente, String sobrenomeCliente, String cpfCliente){
			
		nomeConta = nomeCliente;
		sobrenomeConta = sobrenomeCliente;
		cpfConta = cpfCliente;			
		titular = new Cliente(nomeCliente, sobrenomeCliente, cpfCliente);
		dataAbertura = new Data();
		
	}
		
	void saca(double vrSaque){
		saldo -= vrSaque;
	}

	void deposita(double vrDeposito){
		saldo += vrDeposito;
	}
	
	double calculaRendimento(){
		double rendimento = saldo * 0.1;
		return rendimento;
	}
	
	void transfere (Conta destino, double valor){
		this.saldo -= valor;
		destino.saldo += valor;
	}
	
	String recuperarDadosParaImpressao(){
		String dados = titular.getDadosCliente();
		dados += "\nConta: " + numero;
		dados += "\nAgência: " + agencia;
		dados += "\nO saldo da conta é: R$" + saldo;
		dados += "\nCliente desde: " + dataAbertura.formataData(dataAbertura.dia, dataAbertura.mes, dataAbertura.ano);
		return dados;
	}

}

7 Respostas

L

Você está executando o comando a partir de qual diretório? O mesmo das classes ou o que contém o package “caelum”?

suellenbelfort

O mesmo das classes.

suellenbelfort

O estranho é que se retiro a primeira linha do código, compila normalmente na linha de comando. Daí, tenho o problema inverso na ide, que não compila sem a declaração do package.

L
Solucao aceita

A declaração do package faz diferença total no processo de compilação.
Volte um nível (cd …) e então execute

javac caelum/conta.java

Obs.: Em java, o nome das classes e dos arquivos começam, sempre, com letra Maiúscula.

suellenbelfort

Então, sempre que declarar um package, compilo a app no diretório anterior ao dele. Eu uso as iniciais maiúsculas, só o comando javac que não é case sensitive, rs. Muito obrigada!

L

Quase isso. Você vai executar o comando do diretório raiz.
Exemplos: para o arquivo Teste.java, no package br.com.aplicacoes, você executa o comando com o prompt no mesmo diretório que br.

javac br/com/aplicacoes/Teste.java

Para o arquivo Teste.java, no package com.study.program, executa no mesmo diretório que o com

javac com/study/program/Teste.java

Por experiência, posso dizer que é difícil ter de compilar utilizando o javac. O mais comum é o uso de uma IDE como Eclipse ou Netbeans.

suellenbelfort

Eu estou seguindo uma apostila da Caelum aqui, para ter uma orientação sobre a sequência de conteúdos a estudar e estou testando tanto em linha de comando quanto no Eclipse. Imagino que em aplicações robustas seja quase impossível trabalhar com linha de comando. Mais uma vez, muito obrigada Luis!

Criado 29 de março de 2017
Ultima resposta 29 de mar. de 2017
Respostas 7
Participantes 2