【问题标题】:Java javac compile with classpathJava javac 使用类路径编译
【发布时间】:2015-09-09 15:52:49
【问题描述】:

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

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

【问题讨论】:

    标签: java compilation classpath


    【解决方案1】:

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

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

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

    【讨论】:

    • 我很欣赏详尽的解释,我显然误解了 javac 如何处理 jar 文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多