gpt4 book ai didi

java - 基本的maven问题: Does maven transitively install dependencies?

转载 作者:行者123 更新时间:2023-12-02 01:49:59 25 4
gpt4 key购买 nike

我看过这里https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/情况似乎确实如此。

但是,我尝试尝试 mvn install,但不确定它是否按预期工作。这就是我所做的

(1) 我创建了一个库。

(2) 从命令行运行 mvn install

(3)复制我新创建的jar的路径

(4) 打开一个新的maven项目,将路径粘贴到我的pom.xml中

我可以重用我的库方法,但是:我的库方法之一返回 TransportClient,它是 elasticsearch API 的一部分。在我的新项目中使用 intellij ,即使我引用了 jar,我似乎也没有 elasticsearch

这是预期的吗?当它引用我的 jar 时,我期望它能够传递安装 elasticsearch

我想要一两个正确方向的指针,我对此完全陌生。 :)

我的 pom.xml 用于使用 elasticsearch 作为依赖项的库。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<groupId>estutorial</groupId>
<artifactId>estutorial</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<scope>provided</scope>
</dependency>


<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.4.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.4.2</version>
</dependency>


<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
</dependency>

</dependencies>

</project>

我的新 Maven 项目的 pom.xml 尝试引用上述 pom.xml 的 lib:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>


<groupId>sth</groupId>
<artifactId>sth</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>estutorial</groupId>
<artifactId>estutorial</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>/home/dell/.m2/repository/estutorial/estutorial/1.0-SNAPSHOT/estutorial-1.0-SNAPSHOT.jar
</systemPath>
</dependency>
</dependencies>

</project>

最佳答案

那么,如果我理解您的步骤,您引用应用程序中的依赖项声明会使用本地存储库中 jar 文件的直接类路径吗?如果是这样,那就不寻常了。您不需要知道 Maven 项目的任何依赖项的直接文件位置。你应该做什么。

在引用的项目(需要Elasticsearch库)中,它的pom.xml文件将定义elasticsearch依赖项本身。这应该遵循依赖关系声明的 Maven 标准(groupId、artifactId 和 artifactVerion)。如果您没有 elasticsearch Artifact ,maven 将尝试找到它并将其存储在您的本地存储库中。您的 pom.xml 文件中不必有任何路径。

当您安装引用的项目时,它会将 JAR 文件和 pom.xml 安装到您的本地存储库中。

在引用项目中,您应该在其 pom 文件中定义对引用 Artifact 的依赖关系。相同的格式:groupId、artifactId 和artifactVersion。您不需要提供特定路径。 maven 要做的就是找到引用的 jar,同时使用引用的 jar 所安装的 POM.xml 文件来查找传递依赖项并将它们包含在类路径中。

根据您的描述,您的依赖项声明不正确。如果您可以提供 POM 文件,则可以提供更多详细信息。否则,review the maven intro to dependencies .

关于java - 基本的maven问题: Does maven transitively install dependencies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53112274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com