java - 如何使用类路径正确编译Java类?

标签 java jakarta-ee classpath javac

我有一个使用外部 .jar 库的 Java Main 类。

所以我尝试编译它,将此 .jar 文件放入类路径中,执行以下操作:

C:\Projects\edi-sta\src>javac -cp ojdbc6.jar:. Main.java

所以我认为我应该编译 Main.Java 类,“导入”由 ojdbc6.jar 表示的类路径。

它没有给我错误消息并编译它,但问题是当我尝试执行编译的 Main 类时,我收到此错误消息:

C:\Projects\edi-sta\src>java Main
Hello World !!!
0
java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at Main.main(Main.java:21)

C:\Projects\edi-sta\src>

它看不到在编译时用作类路径的 ojdbc6.jar 中定义的 oracle.jdbc.OracleDriver 类。

为什么我会遇到这个问题?我缺少什么?我该如何修复它?

编辑1:

我将 Main.java 类移至名为 ma​​inPkg 的包中。

因此,我遇到了以下情况,其中我还放入了 ojdbc6.jar 文件:

C:\Projects\edi-sta\src\mainPkg>dir
 Il volume nell'unità C è OS
 Numero di serie del volume: 9414-E1F8

 Directory di C:\Projects\edi-sta\src\mainPkg

12/02/2015  14:18    <DIR>          .
12/02/2015  14:18    <DIR>          ..
12/02/2015  14:13             1.337 Main.class
12/02/2015  14:05             1.285 Main.java
11/02/2015  11:01         3.692.096 ojdbc6.jar
               3 File      3.694.718 byte
               2 Directory   4.861.566.976 byte disponibili

执行以下命令会创建 Main.class 文件:

javac -cp ojdbc6.jar;. Main.java

我在这里还使用了 ; 分隔符,因为我在 Windows 下。

现在我已经创建了 Main.class 文件,我尝试执行此操作:

java -cp ojdbc6.jar;. Main

但我仍然收到“无法找到或加载主类”错误消息:

C:\Projects\edi-sta\src\mainPkg>javac -cp ojdbc6.jar;. Main.java

C:\Projects\edi-sta\src\mainPkg>java -cp ojdbc6.jar;. Main
Errore: impossibile trovare o caricare la classe principale Main

C:\Projects\edi-sta\src\mainPkg>

我错过了什么?怎么了?

Tnx

最佳答案

运行时您还需要类路径中的 jar:

java -cp ojdbc6.jar:. Main

否则,很明显,JVM 无法从 jar 文件加载类:它会在哪里找到它们?

请注意,您永远不应该使用默认包。养成为所有类定义包的好习惯。

关于java - 如何使用类路径正确编译Java类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28478084/

相关文章:

java - 暂停/恢复线程中的任意计算

用于流式多部分文件上传的 Java Swagger (Springfox) 注释

java - 使用 NumberFormat 将美分转换为欧元

java - 无法使用 maven-assembly-plugin 设置类路径

java - Shell 文件在手动运行时有效,但在 CRON 中运行时失败

java - Maven 程序集创建具有依赖项和类路径的 jar

java - 什么是 XEED?我在哪里可以获得更多相关信息?

java - 使用 Java 在 JIRA 中删除问题

hibernate - Ehcache 存储但不检索(Ehcache + Hibernate)

java - CDI 注入(inject)现有对象