使用classpath

时间:2015-09-09 15:52:49

标签: java compilation classpath

我想知道在编译时是否可以在类路径中包含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

为什么这样,我有没有办法使用第二种方法来包含罐子?

1 个答案:

答案 0 :(得分:4)

  

为什么这样,我有没有办法使用第二种方法来包含罐子?

因为指定编译的类路径只是告诉编译器在哪里找到类型。编译器没有这些类型复制到其输出中 - 因此,如果您希望在执行时使用相同的资源,则需要在执行时指定类路径。

在这种情况下,编译器根本不需要额外的jar文件 - 代码中没有任何内容引用它......但是你需要它在执行时...这就是为什么你的原始方法有效,而你的第二种方法没有。