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

时间:2015-02-12 12:57:57

标签: java java-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>

在编译时无法看到 oracle.jdbc.OracleDriver 类定义为用作类路径的 ojdbc6.jar

为什么我有这个问题?我错过了什么?我该如何解决?

编辑1:

我将 Main.java 类添加到名为 mainPkg 的包中。

所以我有以下情况,我也推出了 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

2 个答案:

答案 0 :(得分:3)

您还需要在运行时在类路径中使用jar:

java -cp ojdbc6.jar:. Main

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

请注意,绝不应使用默认包。养成为所有课程定义包的好习惯。

答案 1 :(得分:1)

您也需要在运行时在CLASSPATH中使用外部JAR。运行时添加相同的-cp参数。