Classpath, entendendo o que é e para que serve

Transcrição

Classpath, entendendo o que é e para que serve
Home
Login
Registre-se
Classpath, entendendo o que é e para que
serve
Rafael Steil
Aprendendo como usar o classpath, e o porquê de sua existência.
Fórum
Anúncios Google
Tópicos Recentes
Anuncie neste site
Cursos de Java da Eteg
Formação completa: Java, JSP, Struts, Hibernate, Spring e
outros
Notícias
www.eteg.com.br
Artigos / Tutoriais
IP*Works! ZIP Component
.NET and Java Components for file Compression: ZIP, TAR, JAR,
& GZIP
Busca
www.nsoftware.com
Sobre o GUJ
Hospedagem de Sites R$25
50GB de transferência / 500MB disco 20GB de E-mail. Ligue:
4003-1001
Apoio
www.plugin.com.br
PERC: go where Java can't
Reliable, predictable VM, tools for real-time and embedded
applications
www.aonix.com
Introdu ção
Neste tutorial vamos mostrar o que de fato é e para que serve o
famoso CLASSPATH, essa variável de ambiente que tanto causa
problemas (principalmente para os principiantes em Java) na hora
de compilar os programas. Aqui você irá aprender como
configurar, quais são os erros que acontecem se é mal
configurado e, logicamente, como resolver tais problemas.
O CLASSPATH (ou "a" CLASSPATH, se preferirem) é uma das 3
variáveis de ambiente importantes do Java. Essa variável é
importante tanto para compilar quanto para executar o seu
programa, já que especifica onde estão armazenados os arquivos
e bibliotecas necessários, tanto para a compilação, quanto para a
execução.
E porqu ê essa variável existe? A gente podia muito bem copiar
tudo que é necess ário para o diretório da nossa aplicação! Isso
contradiz um dos principais benefícios do java, que é o
Artigos em Destaque
Introduçã o ao RMI
Conheça a arquitetura e
desenvolva a sua
primeira aplicaçã o
distribuída.
Adicionando Caixas de
Verificaçã o no seu
Programa Java
Neste tutorial iremos
falar sobre os aspectos
básicos de uma caixa de
verificaçã o: quais os
tipos, quando e como
utiliza-las, como fazer
verificaçã o de eventos,
entre outros.
Introduçã o ao JDBC
Como utilizar o java para
fazer uma conexão com
um banco de dados,
detalhando como isto
realmente acontece e
qual é o papel do Driver.
Introduçã o ao
sincronismo e monitores
Como funciona a
sincroniza ção de threads,
e o uso de monitores.
Sun Tech Days 2002
Comentários, fotos,
opiniões e muito mais
sobre este mega evento
que a SUN realizou no
Brasil. James Gosling
estava lá, assim como o
GUJ!
Introduçã o a
programação gráfica em
Java com Swing
Querendo fazer
programas gráficos em
Java? Veja aqui como
começar
reaproveitamento de código. Sem contar que seria uma terrível
perda de espaço, e criaria uma dificuldade para atualizar as
versões das bibliotecas (como acontece quando você tem a
mesma .dll em vários diretórios).
Para entender isso, vamos analizar o que acontece desde o
momento da instalação do JDK até o momento da compilação de
um programa. Logo ap ós o ambiente de desenvolvimento Java ter
sido instalado no computador, a CLASSPATH não contém valor
algum, ou seja, seu conteúdo é vazio. Ao tentar compilar algum
programa, o javac (java compiler, compilador java) verifica o seu
conteúdo, e se não tiver valor algum, ele irá usar apenas as
bibliotecas padrões, as quais est ão localizadas dentro do diretório
de instalação do JDK. O mesmo processo é realizado na hora de
executar o programa, porém desta vez pela JVM.
Caso a CLASSPATH contenha algum valor, no caso nomes de
diretórios ou arquivos .jar, os valores contidos serão utilizados
como base para tentar encontrar as classes necessárias para o
programa. O que muitas vezes acontece é que, devido a uma m á
configuração dessa variável, tanto o compilador quanto o
interpretador não conseguem encontrar os arquivos necessários,
terminando com uma mensagem de erro.
A situação mais comum é quando alguns diretórios necessários
estão faltando no CLASSPATH, ou quando apontam para lugares
inválidos ou incompletos. Vale lembrar que a CLASSPATH em si
não se altera sozinha, e muitos menos o compilador ou
interpretador a alteram (a menos que especificado na linha de
comando). Quem faz isso é sempre o usu ário, seja alterando os
valores manualmente ou devido a alguma ação tomada, como por
exemplo a instalação de um programa, o qual pode modificar a
variável sem lhe perguntar se pode ou n ão.
Antes de passarmos para a parte de explicação e solução dos
problemas que possam vir a ocorrer, vejamos como deve ser feita
a correta manutenção e configuração da CLASSPATH.
Caso, em algum momento seja necessário a alteração desta
diretiva, é muito importante cuidar os seguintes detalhes:
l
Diretórios e arquivos de classes são separados pelo caracter
dois-pontos ( : ) em ambiente UNIX, ou pelo caracter ponto-evírgula ( ; ) em ambiente Windows.
l
Sempre, mas sempre mesmo, inclua o diretório atual na
configuração. Isso é especificado pelo caracter ponto ( . ). Isto
indica que o compilador (e a JVM) tamb ém devem considerar o
diretório atual para procurarem as classes.
l
Digamos que você tenha criado um pacote ( package )
chamado com.meu.pacote , que esta localizado na estrutura de
diretório /home/fulano/java/com/meu/pacote. Nesse caso,
CLASSPATH deverá apontar para /home/fulano/java, e não para o
caminho completo ( /home/fulano/java/com/meu/pacote ). Eis
aqui a razão disso: ao rodar ou compilar seu programa, o Java irá
verificar as entradas em CLASSPATH, e procurar pelo diretório
com/meu/pacote em cada entrada. Se for incluído o caminho
completo os arquivos n ào serão encontrados, pois o caminho
procurado irá
ser /home/fulano/java/com/meu/pacote/com/meu/pacote. Note
que o nome do pacote é acresentado ao final do nome do
diretório.
l
Caso o seu pacote tenha sido colocado dentro de um
arquivo .jar, o CLASSPATH deverá conter o caminho completo até
o arquivo .jar, incluindo o nome do mesmo. Por exemplo, se foi
criado um arquivo chamado meupacote.jar, deverá haver uma
entrada no CLASSPATH na
forma /diretorio/para/o/pacote/meupacote.jar. Note que neste
caso incluímos o nome completo, e nao apenas o diretório base.
JAR significa Java ARchive, e é simplesmente um arquivo ZIP
normal, com uma extensão diferente apenas (sim, você pode usar
o WinZIP, unzip, pkzip e similar es para descompactar os .jar).
Estes arquivos são usados para facilitar a distribuição de pacotes
e manter a simplicidade na hora de configurar os ambientes de
desnvolvimento, uma vez que é possível colocar todos seus
pacotes ( conjunto de classes ) dentro de um único arquivo JAR.
Os arquivos JAR devem conter a estrutura exata do seu pacote,
caso contrário o Java não irá encontrar as bibliotecas. Por
exemplo, usando como exemplo o pacote com/meu/pacote ( o
qual, obviamente, se chama com.meu.pacote ), podemos criar um
arquivo JAR chamado meupacote.jar usando o comando
jar cvf meupacote.jar com/
. Note que voce precisa estar um diretório abaixo de "com/" para
dar o comando. Para maiores informações, apenas digite jar na
linha de comando para ver as op ções existentes.
Um arquivo JAR pode guardar outro tipo de informações, como
seals e qual a classe principal que deve ser executada deste jar.
Não entraremos nestes assuntos aqui.
Ok, vamos ver agora algumas situações de configuração do
CLASSPATH, tanto como os possíveis problemas que possam vir a
ocorrer.
l
Configuração inicial:
Bom, caso o CLASSPATH esteja vazio, sem valor algum, o Java irá
procurar as bibliotecas básicas no diretório de instalação do JDK,
porém é recomendável que você altere o valor para incluir ao
menos o ponto ( . ), pois há a possibilidade de algum outro
programa, externo, alterar essa diretiva e não incluir o ponto pra
você, portando vamos nos certificar que ele estará lá.
Para isso, em ambiente UNIX rodando o Bash, utilize o comando :
export CLASSPATH=.:$CLASSPATH
(note que é recomendável colocar isso em /etc/profile ou
~/.bash_profile para não precisar redigitar o comando toda hora
que relogar no sistema ).
No Windows, até a versão 98, edite o autoexec.bat e inclua
SET CLASSPATH=.;%CLASSPATH%
Nas versões mais recentes do Windows é necessário adicionar via
painel de controle ( para maiores informações, veja o tutorial
"Instalando e configurando o JDK no Windows", aqui no GUJ
mesmo ).
l
Para adicionar novas entradas no CLASSPATH, simplesmente
use o separador de campos ( dois-pontos em UNIX, ponto -evírgula no windows ) e coloque o novo valor. Por exemplo,
digamos que queremos adionar o arquivo meupacote.jar ao
CLASSPATH. Para isso, usando o meio de configuração relativo ao
seu sistema operacional ( como descrito no item anterior ), o
CLASSPATH ficará assim no UNIX:
CLASSPATH=.:$CLASSPATH:/diretorio/onde/esta/o/meupacote.jar
e no Windows:
CLASSPATH=.;%
CLASSPATH%;c:\diretorio\onde\esta\o\meupacote.jar
l
Caso queira apontar para um diretório o funcionamento é o
mesmo, ou seja, especifique o caminho completo até o diretório
que deseja incluir na configuração, não esquecendo de separar
cada um por dois-pontos ou ponto-e-vírgula ( em UNIX ou
Windows, respectivamente ).
Aqui est ão listados os problemas mais comuns que talvez você
venha a encontrar.
l
Ao compilar um programa, o erro "MeuPrograma.java: package
com.meu.pacote does not exist".
Isso acontece por que o arquivo MeuPrograma.java contém uma
chamada a import com.meu.pacote.*; , porém este pacote não
esta no CLASSPATH. Para resolver isso, inclua o caminho
completo ate o arquivo .jar ou o diretório base desse pacote,
conforme mostrado na secão anterior.
l
Ao tentar rodar um programa, o erro "Exception in thread
"main" java.lang.NoClassDefFoundError: MeuPrograma" ocorre.
Nesse caso a falta do diretório atual (especificado pelo caracter de
ponto) não esta configurado no CLASSPATH. Para resolver,
simplesmente o adicione conforme exemplificado na seção
anterior, ou pelos tutoriais "Instalando e Configurado o JDK no
Windows" e "Instalando e configurando o JDK no Linux",
disponíveis aqui no GUJ.
Vimos aqui o que é e para que serve a variável de ambiente
CLASSPATH, o que são arquivos JAR, como confiugurar o
CLASSPATH e alguns possíveis erros que possam vir a ocorrer.
Apesar de parecer complicado, a idéia por trás do CLASSPATH é
bastante simples e simples de ser alterado seus valores,
facilitando assim o desenvolvimento. Uma última dica é: cuide
para não "sobrecarregar" o CLASSPATH com milhares de
diretórios e arquivos, pois o Java pode reclamar que a variável
esta muito grande.
Caso tenha alguma dúvida ou sugestão, não hesite em postá-la no
fórum, ficaremos muito felizes em lhe ajudar.
Existem outras maneiras de você utilizar o classpath, que é
utilizar -classpath path tanto na hora de compilar quanto na hora
de executar.
Abraços e até a próxima!
Copyright © 2002-2006 GUJ | Todas as marcas e marcas registradas que aparecem no GUJ são de propriedade de seus respectivos
donos