【问题标题】:Project Dependency in MavenMaven中的项目依赖
【发布时间】:2019-02-22 18:22:17
【问题描述】:

我有两个不同的 Maven 项目 - 比如说 ProjectA 和 ProjectB,其中 ProjectA 使用 ProjectB。

这些项目有单独的 pom.xml 文件。我想在 ProjectA 的 pom.xml 中创建一个依赖项并包含 ProjectB。

但是,每次我尝试以clean install 运行时,它总是会失败并显示以下错误。

[WARNING] The POM for database-manager:database-manager:jar:0.0.1-SNAPSHOT is missing, no dependency information available

[ERROR] Failed to execute goal on project cumulus-certificate-generator-attestation: Could not resolve dependencies for project database-manager:database-manager:jar:0.0.1-SNAPSHOT: Could not find artifact cdatabase-manager:cdatabase-manager:jar:0.0.1-SNAPSHOT -> [Help 1]

其中数据库管理器 = ProjectB。

我的依赖项(在 ProjectA pom.xml 中)如下所示:

<dependency>
    <groupId>database-manager</groupId>
    <artifactId>database-manager</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

我想提一下,我通过包含将包含这两个项目的“主”pom.xml 找到了一个解决方案,但这不是解决方案,因为我有多个 pom.xml 文件和多个项目。 如果这个问题已经回答了,请您指出解决方案,因为我找不到类似的东西。

<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>
  <groupId>database-manager</groupId>
  <artifactId>database-manager</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>database-manager</name>

谢谢!

【问题讨论】:

  • 可以发一下projectB的GAV吗?组和 artifactId 是否正确?
  • @Sridhar 嗨,我添加了 ProjectB pom.xml。
  • 错误提示找不到工件。这意味着您的本地 maven 存储库中不存在预期的 jar 文件。 IE。 &lt;your home directory&gt;/.m2/。如果是真的,请先尝试clean install projectB 并检查它是否在.m2 文件夹中创建了jar。其他选项,如果您使用eclipse,请尝试重新索引或使用maven run configuration 窗口,检查Resolve workspace dependencies 选项。这可能会有所帮助stackoverflow.com/questions/10688344/…

标签: java maven


【解决方案1】:

首先:- 仔细阅读错误信息:

cumulus-database-manager:cumulus-database-manager:jar:0.0.1-SNAPSHOT

这是没有错过你的database-manager:database-manager的依赖

你的项目B database-manager 有它。

当依赖项丢失时 - 这意味着正如@Sridhar 所说,它不在&lt;your home directory&gt;/.m2/repository 文件夹中,并且无法从任何已定义的远程存储库下载。

如果cumulus-database-manager 是有效依赖项

我假设您必须在 Maven 输出的开头看到一些消息,例如 downlading artifact ... from ...&lt;url&gt;,然后是 cannot be downloaded 消息。

在这种情况下,您将在 locam .m2/repository 中获得 cumulus-database-manager/cumulus-database-manager 目录,但其中没有 jar 文件。

尝试从 .m2/repository 中删除 cumulus-database-manager 目录并再次运行以强制 Maven 尝试再次下载它并查看未下载的消息...

顺便说一句,如果您需要同时构建两个项目,而其中一个项目依赖于另一个项目 - 您必须拥有“主” pom,这两个项目都在 modules 元素中定义。否则,您必须手动构建一个又一个,至少是第一次。

【讨论】:

  • 感谢您的及时答复。我试图启用所有不同项目中的所有依赖项,但“全新安装”一直失败。但是,我没有看到您提到的任何消息下载工件。
  • 你需要一个一个的去检查缺少的依赖,检查.m2/repository是否有,如果没有jar文件,相应的删除目录。也许您需要在 .m2/settings.xml 文件中或直接在项目 pom.xml 中设置远程存储库(和/或代理)。顺便说一句,请记住 .m2/repository 结构遵循 groupId:artifactId:version 结构。例如对于工件org.apache.commons:commons-lang3:3.7 jar 文件位于.m2/repository/org/apache/commons/commons-lang3/3.7 目录中。抱歉,没有其他办法……
  • 问题是我在 .m2/repository/ 中看不到任何项目依赖项。它通常会下载内部和外部的 jar,但是当涉及到不同的项目时,它什么也不做。如果我理解正确,它会第一次尝试构建项目,但由于无法下载依赖项,它会失败,因此它永远不会在 .m2 中创建相应的依赖项。您对此有什么建议吗?
猜你喜欢
  • 2018-10-20
  • 2015-01-23
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 2018-05-30
  • 2011-01-15
  • 1970-01-01
  • 2013-06-22
相关资源
最近更新 更多