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