Problemas com package ... CLASSPATH

8 respostas
A

Eu nao sei se eh meu CLASSPATH que esta configurado errado mas o que acontece eh o seguinte
eu tenho um

package XXX;

e eu so consigo da

import XXX;

so consigo da import se o package XXX for um subdiretorio de onde estou importando.

como faco para criar um package e pode da import nele sempre q eu quiser?

estou usando jdk1.4.2
e nao estou utilizando IDE

8 Respostas

Bani

Coloque-o no classpath :slight_smile:

Não existe uma fórmula geral de classpath para ele achar qualquer package… se você precisa procurar em algum diretório novo, esse novo diretório precisa estar no classpath. Mas note que é o diretório que contém o package que precisa estar no classpath, não o diretório das suas classes (que estão dentro do subdiretório do package)!
Então você pode ter por exemplo um diretório “C:\packages” e lá dentro ir criando os subdiretórios que correspondem aos packages em si (ex.: C:\packages\XXX; C:\packages\YYY, etc). Aí o que você coloca no Classpath é só .;C:\packages

A

Blz…
isso eu entendi…
so que tah acontecendo o seguinte.
eu tenho um pacote mais ou menos assim.

Interpretador -> q tem uns class:
dentro de interpretador tem outra pasta comandos-> q tem uns class

ae acontece o seguinte:
eu consigo no Interpretador da import Comandos.*;

mas o q eu estava precisando e acessar um objeto q esta na class interpretador numa dos class de comando.
eu digito
import Interpretador.*;
e nao funciona…

e obrigado ae pela ajuda!

A

“Bani”:
Coloque-o no classpath :slight_smile:

Não existe uma fórmula geral de classpath para ele achar qualquer package… se você precisa procurar em algum diretório novo, esse novo diretório precisa estar no classpath. Mas note que é o diretório que contém o package que precisa estar no classpath, não o diretório das suas classes (que estão dentro do subdiretório do package)!
Então você pode ter por exemplo um diretório “C:packages” e lá dentro ir criando os subdiretórios que correspondem aos packages em si (ex.: C:packagesXXX; C:packagesYYY, etc). Aí o que você coloca no Classpath é só .;C:packages

Tem como voce me explicar direito como fazer isso?
eu sou novo em java, desculpa a ignorancia… mas eh o seguinte
eu criei um Diretorio c:pkg
e la colokei as classes que quero importa
e so eu entrar no direito e escrever SET CLASSPATH=. ???
e nas minha classes eu coloco
package pkg;

tem mais alguma coisa???
vlws a bani

Bani

E você colocou o diretório que contém o diretório Interpretador no classpath?
Por ex., se for C:\Interpretador, você tem que colocar C:\ no classpath.

Bani

Funciona assim:

  1. Valores do classpath:
  • para enxergar as classes do diretório atual, o valor é . (ponto)
  • para enxergar as classes de um determinado diretório, sem package, é o nome do diretório
  • para enxergar um package, é o diretório “anterior” ao package
  • os valores devem ser separados por ; (no caso do Windows)
  1. Configurando o classpath:
  • Você pode configurá-lo como uma variável de ambiente “permanente”, deixar válida apenas para uma sessão (janela de DOS) ou utilizá-la na hora de dar o comando java ou javac
  • Se você quer deixar válida naquela janela do DOS, o comando é SET CLASSPATH=valores onde valores seria .;diretorio1;diretorio2;arquivo1.jar;arquivo2.jar etc
  • Se você quer usar só para executar o compilador, voc pode fazer javac -classpath valores Arquivo.java

No seu caso, se você criou a seguinte estrutura de diretórios:

C: |-- pkg |-- Interpretador |--Comandos
e você quer acessar uma classe de Interpretador dentro de uma classe de Comandos, você tem que ter classpath=.;C:\pkg e fazer import de Interpretador.*

A

“Bani”:
E você colocou o diretório que contém o diretório Interpretador no classpath?
Por ex., se for C:Interpretador, você tem que colocar C: no classpath.

para fazer isso eh so eu estar no c:
e escrever
SET CLASSPATH=.;
nao eh?
se for isso eu fiz…
mas uma pergunta
se eu tiver um arquivo no c:InterpretadorMem.java
nesse Mem.java
eu comeco ele com
package Interpretador; nao eh??

e se eu tiver um arquivo:
C:InterpretadorComandosComandowriteVar.java
esse meu arquivo eu escrevo
package Interpretador.Comandos;

eh assim???
Obrigado ao bani e a todos q tiverem paciencia ae…
hehehe…

Bani

Na verdade se você quer colocar o C:\ no classpath deveria colocar SET CLASSPATH=.;C:\

Você estando no próprio C: pode até funcionar só colocando o ponto, mas vai que por algum motivo você resolve entrar dentro de algum outro diretório… aí o ponto deixa de ser o C:. Por isso é melhor declará-lo explicitamente neste caso.

A sintaxe do package é essa mesma, mas só um detalhe: por convenção, os nomes de packages devem ser inteiros em letras minúsculas (e conseqüentemente dos diretórios que os contém também).

A

Custei mais consegui…
hehe vlw ae Bani…

Criado 10 de setembro de 2003
Ultima resposta 10 de set. de 2003
Respostas 8
Participantes 2