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/如何找到正确的进口商品?除了查看那个网站,还有其他方法吗?

谢谢。

现在,我不需要在代码的顶部导入这些,而是只需要进入我的Maven项目的POM文件并添加依赖项。

否。你把两件不同的事情混为一谈:

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

管理依赖关系

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

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

使用依赖项

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

👉问题是,该库的作者可能将他们的一些类和方法命名为与另一个库中相同的名称

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

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

如果您在代码中写入:

Source s = new Source() ;

…编译器怎么知道你指的是这两个类中的哪一个?👈

要解开谜团,您可以:

  • 编写一个完全限定的类名
    javax.xml.transform.Source s = new javax.xml.transform.Source() ;
  • 编写import语句
    import javax.xml.transform.Source ;

第二种方法,编写import语句,通常比第一种使用完全限定名称的方法键入更少,阅读更容易。

import这个词有点用词不当,是出于遗留的历史原因而使用的。它在这里的使用不涉及任何东西在任何地方的移动。更好的名称应该是命名空间,如中所示,指定已知名称的定义域。

阅读以下内容时:

import javax.xml.transform.Source ;

…想想看:

namespace javax.xml.transform.Source ;

…意思是:"以下任何使用"源"一词的情况都可以被认为是指其包为javax.xml.transform的库中的Source类">

为了找到您命名的包的类,Java虚拟机在运行时会自动查找您获得和放置的所有库。

有一种叫做java standard library的东西,这意味着很多东西都可以自动提供给您,您不必向pom文件添加任何内容。

Maven用于添加java中未包含和附带的external libraries

确定是否需要向pom文件添加任何内容的最简单方法是使用良好的IDE(例如Intellij(,它为maven提供支持。它应该标记所有丢失的库,然后将它们添加到pom文件中。

您仍然需要导入每个*.java文件所需的所有内容。

您也可以在search.Maven.org 上通过fc运算符按全名搜索Maven库

例如。

fc:javax.xml.transform.stream.StreamResult

https://search.maven.org/search?q=fc:javax.xml.transform.stream.StreamResult

当然,一个类可以在许多图书馆中找到。。。

最新更新