无法在 Maven 依赖管理中找到 jar
Posted
技术标签:
【中文标题】无法在 Maven 依赖管理中找到 jar【英文标题】:Unable to locate the jar in Maven Dependency Management 【发布时间】:2019-04-27 02:31:12 【问题描述】:我有 2 个项目 testing.parent
和 testing.child
。
项目结构如下:
他们各自的 pom 如下:
testing.parent
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>testing.group</groupId>
<artifactId>testing.parent</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<name>testing.parent</name>
<url>http://maven.apache.org</url>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
testing.child
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>testing.group</groupId>
<artifactId>testing.child</artifactId>
<version>1.1</version>
<packaging>jar</packaging>
<name>testing.child</name>
<url>http://maven.apache.org</url>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>testing.group</groupId>
<artifactId>testing.parent</artifactId>
<version>1.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
为了测试dependency management
,我尝试将import
log4j
jar 转换为child
项目,但该jar 在子项目中仍然不可用。这是导入罐子的正确方法吗?
【问题讨论】:
你看过这个链接了吗? maven.apache.org/guides/introduction/… 【参考方案1】:这是导入罐子的正确方法吗?
是的,将 log4j 包含在子 pom.xml
的 dependency
部分中。
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version> <!-- version is optional when using dependency management -->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
另外,请确保也参考孩子的parent
,为此在孩子pom.xml
中包含以下内容:
<parent>
<artifactId>testing.parent</artifactId>
<groupId>testing.group</groupId>
<version>1.0</version>
</parent>
确保父 pom.xml
中的引用与
<modules>
<module>testing.child</module>
</modules>
【讨论】:
如果我特别需要将 log4j 单独包含在依赖项部分中,那么拥有依赖项管理部分有什么用?我可以做同样的事情,而不需要所有额外的父项、依赖项管理等部分,并且直接包括 log4j。 依赖管理部分主要是集中控制依赖的版本。您可以在文档maven.apache.org/guides/introduction/… 中了解更多信息 所以总结一下,在我的情况下,仅在依赖项管理中导入父依赖项不会使 log4j jar 在子项中可用。我还必须将它另外包含在依赖项部分中,对吗? @ghostrider 是的,除非它无论如何可通过某些传递依赖项获得【参考方案2】:如果您将以下部分添加到子 pom.xml 文件中,则无需通过子 pom.xml 单独导入 lof4j 依赖项。
<parent>
<artifactId>testing.parent</artifactId>
<groupId>testing.group</groupId>
<version>1.0</version>
</parent>
【讨论】:
我知道这一点。我想检查依赖管理的好处。对于依赖管理,它是一个两步过程,对吗?以上是关于无法在 Maven 依赖管理中找到 jar的主要内容,如果未能解决你的问题,请参考以下文章