我想知道在编译而不是执行时是否可以在类路径中包含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文件-您的源代码中没有引用它的文件...但是您在执行时确实需要它...这就是为什么您的原始方法有效而第二种方法却不需要的原因没错