【问题标题】:Which jar file is used during compilation?编译时使用哪个jar文件?
【发布时间】:2014-11-03 19:13:27
【问题描述】:

假设我在构建项目时在类路径上有两个 jar 文件 - myJarFile.jar 和 myJarFileOld.jar。它们包含相同的包和相同的类,但 myJarFileOld.jar 包含旧的实现,导致编译失败。我不是要求解决这个错误,我知道我应该删除 myJarFileOld.jar 以使编译工作。但是我想知道,当两个 jar 文件都存在时,什么机制决定在编译期间使用哪个 jar 文件中的哪个类?

【问题讨论】:

    标签: java jar compilation


    【解决方案1】:

    当需要加载一个类时,会依次扫描类路径中的所有 jar 文件。一旦找到该类,它就会被加载。

    【讨论】:

      【解决方案2】:

      不完全确定,但我相信类路径出现的顺序是决定性的。如果在第一个 jar 中找到它,那么它不会在另一个 jar 中搜索。但是我很确定类加载器会在开始时加载两个 jar,并且您会收到一些关于重复代码的错误。但是我不确定这一点,这可能与运行时环境有关。

      【讨论】:

        【解决方案3】:

        您在 Eclipse 中有此功能,您可以在其中指定要从项目类路径执行的 jar 的顺序。转到

         Project->Select Properties->Select Build Path from left pane-> go to Order and Export Tab->Select Top or Bottom button-> click ok.
        

        下次构建项目时,将按照您指定的顺序从类路径中选择 jar。

        【讨论】:

        • 不错的功能,谢谢,但对我来说不可用。我们使用 ANT 进行编译,类路径由多个源组成,其中一个源是项目中包含的整个 lib 目录。我只是想知道编译的细节,我希望我能在这里得到一些信息。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-19
        • 2020-08-22
        • 2013-03-03
        • 1970-01-01
        • 2013-03-03
        • 1970-01-01
        相关资源
        最近更新 更多