java - Java 库仍有问题

标签 java maven import jar httpclient

我从来没有真正理解 java 库,如果有人能澄清我的理解,我会很高兴:

  1. 当我需要一个包时,它不是默认随 java 一起提供的,然后我用谷歌搜索并下载二进制文件。即“HttpClient”,然后我从 apache.org 下载 httpcomponents-client-4.2.2-bin.zip
  2. 我首先需要将 .zip 文件导入 netbeans,然后使用 import 命令(通常是自动建议的)。

我还有一些疑问/问题。

HttpClient 类似乎是 apache 客户端库的一部分,但我被告知要 import sun.net.www.http.HttpClient 为什么? (即使我这样做也不能解决其余的问题)

然后尝试使用 HttpClient httpclient = new DefaultHttpClient(); 说找不到 DefaultHttpClient 符号,但是该库已经添加到 Netbeans 中。

看看这个类似的例子 http://www.vogella.com/articles/ApacheHttpClient/article.html我下载的包中没有一些进口商品。

这种情况经常发生在我身上,有时我在没有真正理解的情况下设法解决它。 Atm 我正在尝试实现这个答案 https://stackoverflow.com/a/3325065/960086

最佳答案

好的,关于 JVM 如何创建类的实例,您需要了解一些事情,我将从底部开始。

当 JVM 启动时,它需要加载将用于运行应用程序的类。为此,有 3 个类加载器在起作用——引导类加载器、扩展类加载器和系统类加载器。前两个分别从 $JAVA_HOME/lib 和 $JAVA_HOME/lib/ext 中的 jar 文件加载类。它们基本上是让 JVM 运行所需要的 - 现在不要担心这些。第三个类加载器,系统类加载器,是您感兴趣的。正是这个系统类加载器使用类路径 来查找您要添加到 JVM 以形成的类你的申请。

类加载器还有很多,但现在就到此为止。

因此系统类加载器使用类路径 来加载类。在最简单的形式中,classpath 只不过是对 Java 编译器将其创建的类输出到的目录的引用。在该目录中,您将找到一个目录层次结构,这些目录表示您在编写类时使用的包结构(.java 文件顶部的包声明,用于在应用程序的上下文中组织您的类)和 .class 文件包含已编译的类。当 JVM 需要一个类时,系统类加载器解析表示包的目录结构并加载该类(如果找不到它,则抛出 ClassNotFoundException)。

现在,Java 的优势之一是可用的第 3 方库的绝对数量。显然通过复制目录来共享代码是行不通的,因此使用 Java ArchiveJAR 文件。 JAR 只不过是一个 zip 文件,其中包含几个标准目录以及代表包结构的相同目录和我之前提到的 .class 文件。当然,它会选择扩展名 .jar,但任何能够打开 zip 文件的工具都可以打开 JAR。要使用 JAR,您只需将它添加到您的类路径中,就像添加目录一样,系统类加载器将解析它包含的结构以根据需要加载类。

也就是说,当您决定使用第 3 方库时,您很少只下载 JAR,就像您使用 HttpClient 的情况一样。显然,不仅仅是任何第 3 方库的类,而且大多数将包括文档、示例甚至可能是源代码。然而,要使用第 3 方库,过程是相同的,您需要提取包含您要使用的类的 JAR 并将该JAR 添加到您的类路径.

这几乎就是全部——随着典型应用程序使用的第 3 方库的数量增加,管理这些库的问题也随之增加,因此 Ant with Ivy 和最近的 Maven 变得流行起来。除了它们的构建功能之外,它们都提供了一种方法来声明您的应用程序所依赖的第三方库,并简化下载这些库并将它们添加到您的类路径的过程。但是他们所做的就像您要下载库并手动将其添加到类路径一样。

关于java - Java 库仍有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14160532/

相关文章:

css - CSS 中@import 和 link 的区别

java - 为什么实现接口(interface)的抽象类可能会错过接口(interface)方法之一的声明/实现?

java - 如何从GCP Cloud Function中的maven资源文件夹读取文件?

java - 在 Spring 中设置 Soap 请求的 header

java - 更改属性文件后,Maven 无法构建 spring boot 应用程序(无法解析配置类)

java - Selenium 2 (WebDriver) + Java + Maven + Eclipse Hello World 程序问题

java - 在 Java 中导入默认包中的类的语法是什么?

database - 升级或迁移后是否有验证数据库模式是否正确的好方法?

java - 将对象图展平为 map

java - 计算 Java 中 String[] 中 String 出现次数的一行代码?