Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java设置类路径_Java_Jar_Classpath - Fatal编程技术网

java设置类路径

java设置类路径,java,jar,classpath,Java,Jar,Classpath,我刚刚在控制台中编译了一个java程序。现在我想运行它。我需要用于postgresql和mysql的jdbc驱动程序。因此,我需要包括相应的罐子 我做了以下事情 java -Xmx512m -cp ".;/path/to/sql/jars" main.Main rc 执行此操作时,我得到以下错误: Exception in thread "main" java.lang.NoClassDefFoundError: main/Main Caused by: java.lang.ClassNotF

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

我做了以下事情

java -Xmx512m -cp ".;/path/to/sql/jars" main.Main rc
执行此操作时,我得到以下错误:

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.
当像这样忽略classpath选项时

java -Xmx512m  main.Main rc
我得到如下错误

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)

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

类路径条目的分隔符是
和Linux上的
。根据路径,您似乎在Linux上。

类路径条目的分隔符是
和Linux上的
。根据路径,您似乎在Linux上

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

java -Xmx512m -cp '.:/path/to/sql/jars/*' main.Main rc
java
命令将类路径中的
path/*
视为等同于
path/some jar.jar:path/other jar.jar
枚举目录中的所有jar文件,但必须保护
*
不被shell扩展(因此使用单引号)

如果您使用的是Windows,那么同样的技巧也可以使用,但要使用分号、反斜杠和双引号:

java -Xmx512m -cp ".;C:\path\to\sql\jars\*" main.Main rc
首先,路径分隔符仅为
在Windows上,在其他平台上是
。其次,如果
/path/to/sql/jars
是包含JAR文件的目录,则需要在末尾添加
/*
,并使用单引号而不是双引号:

java -Xmx512m -cp '.:/path/to/sql/jars/*' main.Main rc
java
命令将类路径中的
path/*
视为等同于
path/some jar.jar:path/other jar.jar
枚举目录中的所有jar文件,但必须保护
*
不被shell扩展(因此使用单引号)

如果您使用的是Windows,那么同样的技巧也可以使用,但要使用分号、反斜杠和双引号:

java -Xmx512m -cp ".;C:\path\to\sql\jars\*" main.Main rc

只需将PostgreSQL和MySQL连接器JAR复制到 jdk.x.x_xx\jre\lib\ext 和 jre7\lib\ext 文件夹(您可以在PostgreSQL和MySQL的安装目录中找到它们


ex:-对于MySQL,connector.jar位于MySQL\MySQL connector J文件夹中)

只需将PostgreSQL和MySQL连接器jar复制到 jdk.x.x_xx\jre\lib\ext 和 jre7\lib\ext 文件夹(您可以在PostgreSQL和MySQL的安装目录中找到它们


ex:-对于MySQL,connector.jar位于MySQL\MySQL connector J文件夹中)

不建议这样做,
lib/ext
用于需要对给定JRE上的所有Java进程可用的扩展,而不是一个特定程序所需的库。如果将JAR放入
ext
中,您可能会陷入可怕的类加载器混乱,而JAR不是为在那里工作而设计的,这使得两个不同的Java程序不可能使用同一库的不同版本。不建议这样做,
lib/ext
用于需要对给定JRE上的所有Java进程可用的扩展,而不是用于特定程序所需的库。如果将JAR放入
ext
中,您可能会陷入可怕的类加载器混乱,因为JAR不是为在那里工作而设计的,这使得使用同一库的不同版本的两个不同Java程序变得不可能。