【问题标题】:What does a properly configured CLASSPATH variable for JDBC use look like? [duplicate]为 JDBC 使用正确配置的 CLASSPATH 变量是什么样的? [复制]
【发布时间】:2019-03-01 21:25:42
【问题描述】:

我正在尝试设置 JDBC 以从我的 Linux 机器(特别是在 Chromebook 上侧载的 KDE)建立与 MySQL 数据库的连接。我看过一些帖子建议在/etc/bash.bashrc 中设置CLASSPATH 变量,有人说/etc/profile。哪个是标准?

如果我通过 bash 命令手动设置类路径:

export CLASSPATH=/home/username/JDK/mysql-connector-java-8.0.15.jar

它会编译得很好,但运行程序会产生Error: Could not find or load main class myTest。或者,如果我使用默认的类路径,编译并运行,我会得到一个 ClassNotFoundException 用于代码中使用 JDBC 内容的任何内容。

【问题讨论】:

  • 您也应该将找到您的类的目录(或 JAR 文件)添加到类路径中:例如CLASSPATH=.;/home/username/...CLASSPATH=/home/username/my.jar;/home/username/...(如果没有设置CLASSPATH,则默认为当前目录.
  • 那些刚开始的人(包括我自己,当时)经常在遇到CLASSPATH=.;/and/so/on“技巧”之前挣扎。
  • 几乎没有普通的 Java 应用程序使用 CLASSPATH 环境变量,因为如果在应用程序需要的依赖项之前加载了不同版本的依赖项,它可能会导致奇怪的行为和错误。此外,使用-jar 执行的应用程序(我猜这是其中的大多数)甚至会忽略该环境变量,并且只使用其清单中指定的类路径。最好忘记CLASSPATH环境变量的存在..

标签: java mysql linux jdbc


【解决方案1】:

类路径应包括 JVM 运行您的应用程序所需的所有类:所有依赖项您的应用程序类。

您可以为每个 java 调用传递类路径,例如

java -jar <jar file>

java -cp <your full classpath goes here> <your main class>

但是您也可以使用构建工具来构建带有依赖项和配置类路径的胖 jar,或者使用主 jar 构建 zip,依赖项是一个单独的文件夹,并且在您的 jar 中设置了预配置的类路径。

【讨论】:

  • 只是一个note:当使用-jar 时,我相信-cp 没有被使用,而是清单中的Class-Path 被使用。根据经验和documentation“使用-jar时,指定的JAR文件是所有用户类的来源,其他类路径设置被忽略。”
  • @CarlosHeuberger,谢谢。更正了我的答案
猜你喜欢
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多