Fiz um programinha em Java que acesso o banco Oracle, ele funciona normalmente, mas para poder distriui-lo criei um .JAR, e quando tento executa-ló, ele motra o erro: Exception in thread “main” java.lang.NoClassDefFoundError: oracle/jdbc/pool/Orac
leOCIConnectionPool.
A variável CLASSPATH esta correta, mesmo pq, este erro tb aparece na minha maquina, que é onde o sistema foi desenvolvido.
<path-jdbc-oracle> deve ser o caminho+nome do arquivo JAR que contém o driver JDBC do Oracle.
<seu-jar> deve ser… o seu Jar
Rafael_Steil
O que vc colocou no .jar? toda a aplicacao mais o .jar do Oracle? Se sim, nao aninhem os .jars… coloque cada um explicitamente no classpath.
Rafael
E
eversonpiza
Dango, eu vou ter que colocar “-cp” para todos os JAR’s? tem um diretório com varios .JAR’s, que esta na CLASSPATH, e desta forma eu fico preso ao diretório não tem outra solução?
E
eversonpiza
Rafael,
no .jar, eu coloquei apenas a minha aplicação, eu posso colocar tb os .jar do oracle? posso colocar todos de uma vez, por exemplo: “diretorio*.jar”?
Grinvon
Coloque o JAR do driver na jre/lib/ext, ele vai rodar sem reclamar da CLASSPATH.
Rafael_Steil
“eversonpiza”:
Rafael,
no .jar, eu coloquei apenas a minha aplicação, eu posso colocar tb os .jar do oracle? posso colocar todos de uma vez, por exemplo: “diretorio*.jar”?
Voce deve colocar
Ah, e nao coloque no diretorio de libs da jre/jdk… mah pratica isso, pois pode haver maquinas onde voce nao tem direito de gravacao em tal diretorio, tao bem como dar conflito com outras libs de outros projetos, caso utilizem versoes diferentes de uma mesma lib, por exemplo.
Rafael
E
eversonpiza
Criei o meu JAR da seguinte forma:
jar cmf manifesto.txt VerificaBd.jar .class C:oracleora92jdbclib.jar
O arquivo ficou gigantesco com 12Mb, e mesmo assim não funcionou, o que estou fazendo de errado?
Rafael_Steil
Como eu tinha dito no outro post, nao coloque todos os jars em um unico. Declare-os no classpath separadamente. E coloque um-por-um, ao inves de apontar para o diretorio com todos os jars
Rafael
D
dango
Olha, eu não sei exatamente como vc quer montar isso. Eu costumo fazer assim:
Dai eu faço referência a cada um dos JARs no atributo Class-Path do manifesto da minha aplicação… t-ta!
D
dango
Af… parece que eu tô com preguiça de digitar hoje (descurpa)…
Seguinte… você vai ter uma pasta onde o seu JAR (da sua aplicação) vai ficar. Nesta pasta você terá uma outra pasta chamada lib (pode ser “xiquinha” se vc quiser, não importa)…
É na pasta lib que vão ficar os JARs que a sua aplicação precisa.
O atributo Class-Path do manifesto da sua aplicação deve ficar assim:
Manjou?! Easy!
[editado]: êita! o mecanismo do fórum tira as minhas barras… :evil:
E
eversonpiza
Galera,
Desculpem a minha ignorancia no assunto, mas ainda não consegui fazer funcionar.
Já tentei colocar no as bibliotecas no mesmo JAR, no CLASSPATH, e no manifesto, mas sempre dá o mesmo erro, diz que não pode encontrar a classe de conexão com o banco “OracleOCIConnectionPool”.
Estou com a impressão que mesmo colocando neste locais a biblioteca, ele não esta conseguindo achar esta classe dentro da PATH, oraclejdbcpool, mas tb já tentei copiar o .JAR que possui a classe para o mesmo diretório e tb não funcionou.
Alguem pode me ajudar, de mais alguma forma, ou posso dar como caso perdido?
Everson
D
dango
Olha, se vc fez do jeito que eu falei acima, com o teu jar separado dos jars que a aplicação precisa e no esquema que eu falei, não tem erro é pra funcionar (minhas apps funcionam assim).
Começa a desconfiar desse JAR… verifica se o nome da classe que vc esta tentando instanciar é esse mesmo (isso acontece bastante, vc tem um jar mais recente com um nome de classe ligeiramente diferente do que diz o manual ou o artigo/tutorial).
Dá uma conferida nesses lances…
Na pior das hipóteses, desmonta o JAR num diretório qualquer ai e verifica se o caminho/classe existe nele.
E
eversonpiza
Galera,
Muito obrigado pelas dicas, vcs me ajudaram bastante, espero um dia ter condições de retribuir esta ajuda.