Desenvolvi uma aplicação Swing que acessa uma base SQL Server 2000. Acontece que quando rodo a aplicação no Eclipse blz. Depois de criado o JAR, não roda nem a pau!!!. Já tou a dois dias (incluindo o feriado) revirando o classpath, o código, os foruns, os manuais e NADA!!! A Aplicação carrega mas não acha os drivers do SQL. O classpath está certinho, os .jar estão no lugar e a bagaça não rola… :evil:
Se você tem certeza de que fez tudo de acordo com as instruções de instalação, de que seu driver corresponde à versão do SQL Server e que o o seu script de execução está com parâmetro -cp correto, então passo uma sugestão só para funcionar:
Coloque o jar do driver no diretório %JAVA_HOME%\jre\lib\ext
Numa ultima e desesperada tentativa, tentei rodar a linha de comando que o Eclipse gera e… pimba.
Acontece que o parametro -cp da linha de comando é exatamente igual ao CLASSPATH da minha maquina !!!. O que será que acontece :?:
De qualquer maneira fica a solução para a galera que tiver o mesmo problema!!!
E não sei o que faz esta variável CLASSPATH dentre as suas variáveis de ambiente. Desde o j2sdk 1.2 que isto não é mais necessário. O correto é usar -cp no arquivo .bat ou no build.xml do ant que executa cada aplicação, nunca esquecendo de incluir o atual diretório ( .;\qqdir;\outrodir ). Ou será que na sua máquina só roda uma única aplicação Java?
O problema é que tou meio que chegando agora no JAVA, e até agora, para mim o CLASSPATH era algo que obrigatório…
Estou postando o conteudo p/ vc dar um look.
CLASSPATH=.;C:J2SDKin;c:/Arquivos de programas/SQL 2000 JDBC/lib/msbase.jar;c
:/Arquivos de programas/SQL 2000 JDBC/lib/msutil.jar;c:/Arquivos de programas/SQ
L 2000 JDBC/lib/mssqlserver.jar;
Olhando bem rápido, acho que diretórios com espaços nos nomes devem estar dentro de aspas ("c:/Arquivos de programas/SQL 2000 JDBC/lib/msbase.jar") fora que no Windows as barras devem ser invertidas (“c:[b][/b]Arquivos de programas[b][/b]SQL 2000 JDBC[b][/b]lib[b][/b]msbase.jar”)
Repito a dica, não use a variável de ambiente CLASSPATH. Estude como o Java localiza as classes e crie para cada programa um script de execução. Veja exemplos nos arquivos .bat do diretório bin do tomcat.
No classpath ou com o parâmetro -cp tanto faz usar / ou \ . O grande problema é a gente se perder com os nomes de diretórios muito grandes e com espaços, que requerem sempre as aspas, nem sempre em lugares muito evidentes.
Por exemplo, você tem de usar algo como
java -cp "c:\Arquivos de programas\SQL 2000 JDBC\lib\msbase.jar; etc..." etc. etc. etc
ou
java -cp "c:/Arquivos de programas/SQL 2000 JDBC/lib/msbase.jar; etc..." etc. etc. etc
mas setar o CLASSPATH via linha de comando é muito sutil porque o comando certo NÃO É
set CLASSPATH="c:\Arquivos de Programas\bla bla bla"MAS SIM
set "CLASSPATH=c:\Arquivos de Programas\bla bla bla"OU
set CLASSPATH=c:\Arquivos de Programas\bla bla bla
Como se vê, eu realmente não gosto da variável de ambiente CLASSPATH por causa dessas sutilezas. Prefiro usar java -classpath ou java -cp.
Como eu sou muito muito muito preguiçoso, normalmente eu copio todos esses JARs que preciso para um único diretório C:JARS, e faço tudo a partir de lá.
Se houver algum problema com versão, então crio algum subdiretório em C:\JARS, mas novamente sem espaços (tal como C:\JARS\Oracle9i )
Dica: quando alguma coisa foi criada no Unix, como é o caso do Java, normalmente alguma ferramenta que se usa com ele pode ter problemas com espaços em nomes de arquivos e diretórios. O Java.exe e o Javac.exe não têm problemas com espaços (se você não esquecer de pôr direitinho as aspas), mas não é bom “dar sorte pro azar”, como se diz por aí.