java - Maven:如何查找依赖项

也许我误解了 Maven 的依赖原则,但这是我的问题:

我有一个需要这些导入的小 Java 程序

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
import java.io.StringWriter;

现在我不在代码的顶部导入这些,而是​​直接去 到我的 Maven 项目的 POM 文件中并添加依赖项。 但是在 https://mvnrepository.com/我如何找到正确的进口? 除了在该网站上查看之外,还有其他方法吗?

谢谢。

最佳答案

Now instead of importing these at the top of the code, I would just go into the POM file of my Maven project and add the dependencies.

没有。您将两种不同的东西混为一谈:

  • 管理依赖项(下载库并将其放置在您的项目中)
  • 使用依赖项(从您的代码中调用库的类和方法)

管理依赖

要使用库,您需要获得一个物理副本,一个文件,通常是一个.jar 文件。您可以手动下载副本。或者你可以使用 Maven或 Gradle代表您下载副本。 Maven 或 Gradle 方法通常优于手动方法。

下载后,您需要将文件放在项目中可以找到的位置。同样,您可以手动执行此操作,也可以使用 Maven 或 Gradle 使该文件可用于您的项目。同样,与手动方法相比,通常建议使用 Maven 或 Gradle 方法。

使用依赖

在获得并放置库的副本后,您就可以访问它的类和方法了。

? 问题在于,该库的作者可能用在另一个库中找到的相同名称来巧合地命名他们的一些类和方法

假设您想使用一个名为 Source 的类,但是您的两个库都有这样一个类:

  • javax.xml.transform.Source
  • com.example.awesome.Source

如果你在代码中写:

Source s = new Source() ;

...编译器如何知道您指的是这两个类中的哪一个? ?

要解开这个谜团,您可以:

  • 写一个fully-qualified类名。
    javax.xml.transform.Source s = new javax.xml.transform.Source() ;
  • 写一个import语句。
    import javax.xml.transform.Source ;

第二种方法是编写 import 语句,与使用完全限定名称的第一种方法相比,通常可以减少输入并更易于阅读。

import 这个词有点用词不当,是出于遗留历史原因使用的。它在这里的使用涉及任何地方的任何移动。更好的名字应该是 namespace ,例如,指定已知名称的已定义域。

阅读本文时:

import javax.xml.transform.Source ;

……这样想:

namespace javax.xml.transform.Source ;

… 意思是:“下面任何对“Source”一词的使用都可以假定是指库中的 Source 类,其包为 javax.xml.transform

在努力寻找您指定的包的类时,Java Virtual Machine在运行时自动查看您获得和放置的所有库。

https://stackoverflow.com/questions/73145314/

相关文章:

c++ - 优化静态字符串的字符串存储

javascript - 如何返回 array.reduce 中的对象?

r - 更改 geom_point 的颜色以获得最大 y 值

c# - 处理没有并发的任务列表

c++ - 如何使这个递归函数更快? (四叉树)

python - Pandas : Concat rows of a dataframe with

python - 找不到 openai 命令(mac)

android - 在 Android OpenGL ES 上只能看到没有几何图形的 glClear

regex - 如果使用 linux 命令行工具在文本文件的下一行中满足条件,则替换换行符

nestjs - 如何在 NestJS 中安装 nanoid