java设置classpath

too*_*oom 0 java jar classpath

我刚刚在控制台中编译了一个java程序.现在我想运行它.我需要postgresql和mysql的jdbc驱动程序.因此我需要包括相应的罐子.

我做了以下

java -Xmx512m -cp ".;/path/to/sql/jars" main.Main rc
Run Code Online (Sandbox Code Playgroud)

这样做时,我得到了以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: main/Main
Caused by: java.lang.ClassNotFoundException: main.Main
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: main.Main. Program will exit.
Run Code Online (Sandbox Code Playgroud)

忽略这样的classpath选项时

java -Xmx512m  main.Main rc
Run Code Online (Sandbox Code Playgroud)

我得到了以下错误

java.lang.ClassNotFoundException: org.postgresql.Driver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at database.PostgresQL.getConnection(Unknown Source)
    at database.PostgresQL.loadIndexFromDatabase(Unknown Source)
    at main.Main.readDataFromDatabase(Unknown Source)
    at main.Main.main(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

因此,程序可以正确运行.我的问题:如何告诉程序在控制台中正确查找jar?

Ian*_*rts 6

java -Xmx512m -cp ".;/path/to/sql/jars" main.Main rc
Run Code Online (Sandbox Code Playgroud)

首先,路径分隔符仅;在Windows上,它:在其他平台上.其次,如果/path/to/sql/jars是包含JAR文件的目录,则需要/*在末尾添加一个并使用单引号而不是双引号:

java -Xmx512m -cp '.:/path/to/sql/jars/*' main.Main rc
Run Code Online (Sandbox Code Playgroud)

java命令将path/*类路径视为path/some-jar.jar:path/another-jar.jar枚举目录中的所有JAR文件,但您必须保护*shell的扩展(因此单引号).

如果你在Windows下,那么同样的伎俩工作,但用分号,反斜线和双引号:

java -Xmx512m -cp ".;C:\path\to\sql\jars\*" main.Main rc
Run Code Online (Sandbox Code Playgroud)