Já procurei sobre o assunto no fórum e não encontrei uma resposta clara. Sei que pacotes são usados para organizar as classes de um sistema até para não confrontar classes com o mesmo nome mas de desenvolvedores diferentes.
Gostaria de saber passo a passo como criar pacotes pois tentei e não consegui. Veja o que eu fiz.
Tenho uma classe chamada Links:
[code]package br.clbterere;
public class Links
{
…
}[/code]
pelo que eu sei criei uma classe chamada Link que pertence ao pacote br.clbterere. Se fosse chamá-la em outra classe uso:
[code]package br.clbterere;
public class Jogo
{
Links vlink = new Links;
…
}[/code]
não precisei importar o pacote br.clbterere.Link pois a classe Jogo pertence ao mesmo pacote!
Certo? não! aparece o erro de que a classe Link não foi encontrada! O que será? Tenho que criar a estrutura de diretórios brclbterere ou algo assim?
Gostaria de uma explicação passo a passo , desde a criação no arquivo fonte até na hora de compilar como um mini tutorial para servir para mim e outros usuários do fórum. Até o tutorial da Sun é muito vago.
3- compilei a classe Validacao (Ok, nenhum problema)
4- no arquivo Jogo escrevi
[code] package br.clbterere;
import br.clbterere.Validacao;
public class Jogo
{
public static void consulta() throws Validacao
{
}
...
} [/code]
5- compilei e aparece um erro:
symbol: class Validacao
location : package clbterere
import br.clbterere.Validacao;
symbol: class Validacao
location : class br.clbterere.Jogo
ClassNotFoundException para o método consulta() da classe Jogo
6 - se tiro o import aparece só o erro:
symbol: class Validacao
location : class br.clbterere.Jogo
ClassNotFoundException para o método consulta() da classe Jogo
o que será que estou fazendo de errado? Já esperimentei colocar Validacao() e não funcionou. O mesmo erro acontece para objetos da classe Validacao.
Voce nao pode importar br.clbterere.Validacao no arquivo Jogo.java, ja que ambos estao no mesmo pacote. O erro acontece que o java nao encontra do diretorio br.clbterere ( vc JA esta dentro dele ).
Se mesmo assim voce quiser importar, precisa ir no diretorio ANTES do “br” para compilar, assim funciona ( tipo, vc compila usando
javac br/clbterere/Jogo.java nesse caso, mas como ja estao no memso pacote, o lance eh nao dar o import e compilar dentro do diretorio certo ja )
Outra coisa: a indentacao que vc esta fazendo eh meio ruim…
Bom, no exemplo anterior pelo menos nao era. O ideal seria tambel chamar de ValidacaoException ao inves de apenas Validacao, pois isso facilita a identificacao do proposito.
Em relacao ao problema, por partes seria ter o diretorio “br/clbterere”. Entao nesse diretorio vc coloca o “Validacao.Java” e os outros arquivos que pertecam ao mesmo pacote. Em cada um destes arquivos deste pacote, coloque logo no inicio a declaracao
package br.clbterere;
Por exemplo, se vc tiver os arquivos “Validacao.java”, “Links.java” e “Jogo.java”, sendo que todos devam fazer parte do pacote “br.clbterere”, vc adiciona a clausua “package br.clbterere;” em cada um dos arquivos.
Lembre-se que todos devem ficar no mesmo diretorio ( br/clbterere ).
Apos, nao eh necessario dar “import br.clbterere.AlgumaClasse” se vc estiver no diretorio “br/clbterere”, pois o javac entendera.
Dai eh so compilar normal… tipo,
javac *.java
Na hora de rodar, voce precisa sair do diretorio “br/clbterere” ( cd …/…/ ), pois como vc esta usando arquivos deste pacote, na hora de rodar vc precisa estar na hierarquia deles… entao eh soh executar
java br.clbterere.ProgramaPrincipal
onde “ProgramaPrincipal” eh o contem o “public static void main”. Se voce preferir, pode adicionar o path completo para “br/clbterere” no CLASSPATH ( por exemplo, export CLASSPATH=.:$CLASSPATH:/home/fulano/java/br/clbterere )… assim voce pode executar de qualquer lugar.
Desde o começo estava fazendo tudo certo mais sempre dava o erro [color=“red”]Cannot Resolve Symbol[/color] quando eu compilava usando o comando javac links.java. Tentei compilar usando javac *.java como dito na resposta acima e tudo deu certo e compilou certinho. Seré que é um bug do java 1.4.1 ou algo que eu desconheça?
PS. quando eu compilava usando javac links.java já tinha compilado as classes ValidacaoExcecao.java e Jogo.java sem o menor problema.
PS2. quem estiver com dúvidas não esqueça de colocar os diretórios no Classpath
Muito obrigado pela ajuda e espero que esta conversa ajude outros usuários com o mesmo problema.
Isto faz com o pacote seja gerado no mesmo diretório que vc está. Você não precisa criar cada diretório na mão.
java -cp . SuaClasse
Instancia (é esse o termo correto?) a classe com base no seu diretório atual, ou seja, busca os imports utilizando seu diretório atual, também, como caminho de classes.
Bom, pelo menos no DOS compilando com letra maiúscula ou minúscula não tem problema.
Se eu comprimir meu pacote usando o JAR, há algum problema de reconhecimento das classes ou tenho que usar a opção 0 (zero) para apenas agrupar os arquivos sem compactação?