【发布时间】:2024-01-18 07:30:01
【问题描述】:
我有一个 jar 文件,其中包含 org.apache 包和许多不同的类,如 Socket...当我将这个 Jar 包含到我的项目中时,它宁愿使用(导入)现有的 java 包“org.apache”和不是我罐子里的那个。我可以说,我在libs 目录中添加了 jar。如何确保使用 jar 包中的自定义类(而不是 java 类)。
如果您还有其他问题,请随时提问。
【问题讨论】:
我有一个 jar 文件,其中包含 org.apache 包和许多不同的类,如 Socket...当我将这个 Jar 包含到我的项目中时,它宁愿使用(导入)现有的 java 包“org.apache”和不是我罐子里的那个。我可以说,我在libs 目录中添加了 jar。如何确保使用 jar 包中的自定义类(而不是 java 类)。
如果您还有其他问题,请随时提问。
【问题讨论】:
类路径为要搜索的 JAR 和目录指定一个 顺序。如果真正的 apache JAR 在类路径上位于您的 JAR 之前,那么类加载器将首先查看真正的 JAR 文件。如果它在那里找到一个类,它将使用该版本而不是您的版本。
如何确保 jar 包中的自定义类...?
确保它位于类路径的开头。
由于您使用 Android 和 Eclipse 执行此操作,因此您需要“以 android 方式”执行依赖项。根据我对"Dealing with dependencies in Android projects" 的阅读,您需要将 Apache JAR 文件放入 libs 目录的“库项目”中。我链接到的页面暗示您当前项目的 lib/*.jar 文件会自动出现在类路径的首位......并且它并没有说您可以更改它。
应该指出,将替代版本的 Apache 类放入您的项目是“可怕的 hack”,它值得工作。正确的程序是:
如果这些 Apache 类是 Android 平台的一部分,则根本不要更改它们!
否则,请克隆相关的 Apache 源代码树,对其进行更改,重新构建 Apache JAR,然后改用该 JAR。
【讨论】:
我认为这取决于您的 IDE。在 Eclipse 中,您可以设置引用文件(JAR、类)的顺序。
如果您从命令行执行工具,请按“升序”顺序将文件添加到 -cp 标志。
否则请给我们更多细节。
【讨论】: