Pesquisar este blog

quarta-feira, 6 de janeiro de 2010

Dor de cabeça com -classpath com apenas 1 biblioteca

Hoje me deparei com uma situação interessante que pode ser uma dor de cabeça para quem está informando as bibliotecas na opção de linha de comando -classpath ou -cp da máquina virtual Java.

Acontece que precisei informar apenas uma biblioteca para meu aplicativo e o seguinte erro estava ocorrendo: Error: Could not find main class MeuAplicativo

Percebi que ao informar um ; no final da string dos caminhos o erro não acontecia. Veja abaixo as linhas de comando com erro e sem erro:

  • Este comando não executa:
  • C:\>java -classpath "c:\Arquivos de programas\java\jdk1.7.0\jdbc\ojdbc6.jar" MeuAplicativo
    Error: Could not find main class MeuaAplicativo
    Exception in thread "main" java.lang.NoClassDefFoundError: MeuaAplicativo
            at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:198)
    Caused by: java.lang.ClassNotFoundException: MeuaAplicativo
            at java.net.URLClassLoader$1.run(URLClassLoader.java:299)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:288)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:287)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:422)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:355)
            at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:195)
    
    
  • Este comando executa corretamente porque informei o ";" no final da string do caminho:
  • C:\>java -classpath "c:\Arquivos de programas\java\jdk1.7.0\jdbc\ojdbc6.jar"; MeuAplicativo
    
  • Este comando também funciona:
  • C:\>java -classpath "c:\Arquivos de programas\java\jdk1.7.0\jdbc\ojdbc6.jar";. MeuAplicativo
    

Ainda bem que logo ao tentar executar o comando pela segunda vez coloquei o ";". Isso poderia ser uma dor de cabeça sem tamanho, você sabe que a sintaxe do comando está certo mas a máquina virtual não consegue executar o aplicativo. Talvez isso seja o fato do parser do programa java.exe não saber tratar bem o -classpath com apenas uma biblioteca.

Um comentário:

  1. Santo cara... você é um santo.

    Fazem mais de 2 horas que estou brigando com esse erro, mas graças ao teu post consegui..

    obrigado

    ResponderExcluir