Запуск Java-программы из командной строки, что я делаю не так? - PullRequest
7 голосов
/ 30 января 2009

Примечание У меня запущены окна, путь просто выглядит как линус, потому что я набрал его вручную, и вот как я думаю о путях.

Я пытаюсь запустить Java-класс, созданный мной для диагностики моего соединения с базой данных, он ссылается на адаптер oracle jdbc.

Когда я просто запускаю его без пути к классу:

%> java DBDiagnostics <connectionString>

Я получаю исключение, когда оно достигает следующей строки кода:

Class.forName("oracle.jdbc.pool.OracleDataSource").newInstance();

со следующим исключением:

java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleDataSource
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at DBDiagnostics.GetConnection(DBDiagnostics.java:43)
        at DBDiagnostics.runDiagnostic(DBDiagnostics.java:29)
        at DBDiagnostics.main(DBDiagnostics.java:18)
Creating connection.
java.sql.SQLException: No suitable driver found for lskd
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at DBDiagnostics.GetConnection(DBDiagnostics.java:55)
        at DBDiagnostics.runDiagnostic(DBDiagnostics.java:29)
        at DBDiagnostics.main(DBDiagnostics.java:18)
Veryfying connectivity to Database
Exception in thread "main" java.lang.NullPointerException
        at DBDiagnostics.verifyTable(DBDiagnostics.java:86)
        at DBDiagnostics.verifyTable(DBDiagnostics.java:76)
        at DBDiagnostics.verifyDatabseConnectivity(DBDiagnostics.java:68)
        at DBDiagnostics.runDiagnostic(DBDiagnostics.java:36)
        at DBDiagnostics.main(DBDiagnostics.java:18)

Я предполагаю, что это потому, что мне нужно включить его в путь к классам.

Итак, я попытался добавить его в путь к классам так:

%> java -classpath .:ojdbc6.jar DBDiagnostics <connectionString>

ВМ просто говорит, что не может найти класс:

Exception in thread "main" java.lang.NoClassDefFoundError: DBDiagnostics
Caused by: java.lang.ClassNotFoundException: DBDiagnostics
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: DBDiagnostics.  Program will exit.

Я знаю, что это вопрос, на который я должен просто знать ответ, но что я делаю не так?

Ответы [ 5 ]

17 голосов
/ 30 января 2009

Замените двоеточие точкой с запятой:

java -classpath .;ojdbc6.jar DBDiagnostics <connectionString>
1 голос
/ 30 января 2009

Длинный выстрел, но это Unix или Windows? Если в Windows разделитель пути к классу должен быть точкой с запятой: -

%> java -classpath .;ojdbc6.jar DBDiagnostics <connectionString>

И, конечно, вам нужно иметь файл ojdbc6.jar в текущем каталоге, если вы не указали путь к нему. (И, возможно, это также зависимости ...)

1 голос
/ 30 января 2009

Ответ Майка Сиклера выглядит правильно для платформы Windows. Разделителем пути для Windows является «;», но «:» для Unix и Linux, поэтому всегда используйте правильный!

1 голос
/ 30 января 2009

Появляется ли файл DBDiagnostics.class в каталоге, из которого вы запускаете Java? Если нет, загрузчик классов не найдет его.

Есть ли у класса DBDiagnostics пакет? Если это так, вы должны обратиться к полностью разрешенному имени класса, и корень иерархии пакетов должен появиться в каталоге, из которого вы запускаете Java.

1 голос
/ 30 января 2009

есть опечатка:

%> java -classpath .:ojdbc6.jar DBDiagnostics <connectionString>

возможно, это сработает, если вы наберете следующее:

%> java -classpath ./ojdbc6.jar DBDiagnostics <connectionString>
...