Dúvidas na utilização de arquivos JAR

Galera tenho tres classe: GravaLog.class, ConnectionPool.class e DataSet.class dentro de um diretório d:api_pmbjava. Criei meu jar:
jar cvf pmbjava.jar GravaLog.class ConnectionPool.class DataSet.c
lass
Após criar adicionei o pmbjava.jar no meu classpath e dentro, também, do JAVA_HOMEjrelib, mas quando tento compilar uma arquivo .java que esta dentro de CATALINA_HOMEwebappscontraweb-infclasses ele não consegue encontrar nenhuma das classes. Alguém sabe o que pode estar acontecendo ?? Olha o erro aí abaixo:

UsuarioDAO.java:14: cannot resolve symbol
symbol : class DataSet
location: class classe.bt.contra.UsuarioDAO
private DataSet dataset = null;

Se você fez exatamente isso então o erro é porque não existe o caminho das classes no JAR … a package mesmo.

Leia o artigo sobre JAR aqui no GUJ.

Você deve criar o jar a partir do diretório onde estão os subdiretórios “classetcontra”

A minha classe UsuarioDAO está dentro do diretório ‘classes’ e são geradas dentro do pacote ‘classe.bt.contra’, resultando em classe.bt.contra.UsuarioDAO. Você disse, então que devo conservar as classes DataSet, GravaLog e ConnectionPool dentro desse diretório também e a partir dele gerar meu .jar, é isso? Devo compilar as classes também com pacote ‘classe.bt.contra’? Após criado o .jar e colocá-lo no meu classpath, posso tirar as classes de lá, não é mesmo? Pois a intenção do arquivo .jar, entre outras, é reutilizar classes não é?

eita … você leu o artigo?

Lá explica o seguinte:
:arrow: Se você tem uma classe A na package com.xyz significa que sua estrutura de diretórios (compilado) é assim: c:meuprojetoincomxyzA.class (o source seria c:meuprojetosrccomxyzA.java :wink: )
(lembrando que c:meuprojeto é a raiz do projeto).

Pra criar o jar entre em c:meuprojetoin e crie o danado do jar jar cvf pmbjava.jar *.class

Execute o comando jar tf pmbjava.jar no seu arquivo atual e veja que não deve ter o caminho certo da classe (classetcontraUsuarioDAO) e no novo JAR deve ter.

Desculpe a ignorância, mas então vou ter que ter um pmbjava.jar pra cada aplicação? Pelo que entendi, se é que entendi, fico na dependência de diretórios. Não tem como concentrar essas minhas classes que pretendo utilizar em todas as aplicações em um único lugar, criar o .jar e usar em qualquer lugar que eu queira?

Não, você não fica dependendo de diretórios … somente na criação é que você precisa porque o arquivo JAR armazena sua classe com essa informação.

Depois de criado o JAR as informações de diretórios ficam dentro do arquivo.

Além do artigo sobre JAR leia o artigo sobre CLASSPATH, ele explica como funciona o classloader que irá procurar as classes do seu sistema.

gerei o meu .jar dentro do dirtório ‘classes’ e olha como ele ficou:
META-INF/
META-INF/MANIFEST.MF
GravaLog.class
ConnectionPool.class
DataSet.class
Lembrando que as demais classes, como a UsuarioDAO estão em CATALINA_HOME\webapps\contra\web-inf\classes se colocar pacote dentro da classe UsuarioDAO ele não compila, só passa se eu gerar o .class dentro do diretorio classes, é isso mesmo, meu Tomcat irá enxergar as classes? Sendo que ele no arquivo .jar ele não guardou referência a diretorio se eu criar um outra aplicação em
CATALINA_HOME\webapps\avancado\web-inf\classes, ou seja, fora do contexto ‘contra’ as classes devem ser enxergadas também, ok??

Mas uma vez desculpe pela amolação e insistência !!! :cry: