Java javac编译类路径



我想知道在编译而不是执行时是否可以在类路径中包含jar。此刻,我只是检查一下,看看我的PostgreSQL驱动程序是否可以找到

为了测试目的,所有内容都在同一位置,所以

program/
    DriverCheck.java
    DriverCheck.class
    postgresql-longassname.jar

DriverCheck.java包含

public class DriverCheck {
    public static void main(String[] args) {
        try {
            Class.forName("org.postgresql.Driver");
            System.out.println(Driver Found);
        } catch(Exception log) {
            System.out.println(Driver Not Found);
        }
    }
}

如果我按正常方式编译并执行

# javac DriverCheck.java
# java -cp ".:./postgresql-longassname.jar" DriverCheck

当我得到输出

时,它工作了
Driver Found

但是如果我尝试以这种方式编译和执行

# javac -cp ".:./postgresql-longassname.jar" DriverCheck.java
# java DriverCheck

当我得到输出

时,它不起作用
Driver Not Found

为什么会这样,我是否有办法使用第二种方法来包含jar ?

为什么会这样,我是否有办法使用第二种方法来包含jar ?

这是因为指定编译的类路径只是告诉编译器在哪里找到类型。编译器不会将这些类型复制到它的输出中——所以如果你想在执行时使用相同的资源,你需要在执行时指定类路径。

在这种情况下,编译器根本不需要额外的jar文件- 代码中没有引用它…但是你确实在执行时需要它…

最新更新