java设置类路径
我刚刚在控制台中编译了一个java程序。现在我想运行它。我需要用于postgresql和mysql的jdbc驱动程序。因此,我需要包括相应的罐子 我做了以下事情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 -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程序变得不可能。