的 POM <name> 无效,传递依赖项(如果有)将不可用

  • 本文关键字:如果 name POM 无效 依赖 java maven
  • 更新时间 :
  • 英文 :


这个问题已经过时,不再相关。此后,我已转到 Gradle 进行项目构建,并且无法再验证答案是否有效。

我在使用Maven时遇到了一些问题。让我先描述一下我的项目设置:

Framework
|  -- Apache Commons Math 3.0
|  -- Bouncy Castle 1.5
|  -- etc.. (lots more)
|________
|        Client
|        | -- GUI libraries
|        | -- etc.
|
|________
         Server
         | -- Server Libraries
         | -- etc.

所以本质上我有一个包含大多数依赖项的框架,然后是两个项目,"服务器"和"客户端",它们包含自己的 BUT 以及作为依赖项的框架(作为框架的一个模块(。我将框架项目安装到我的本地存储库中,我的两个项目都可以看到框架原生代码(也就是我自己的逻辑(。但是,他们似乎无法使用框架项目的任何依赖项。当尝试构建任何一个"子"项目时,我得到这个:

Invalid POM for de.r2soft.empires.framework:Framework:jar:Alpha-1.2, 
transitive dependencies (if any) will not be available, 
enable debug logging for more details 

试图找到这背后的原因(或者更好的解决方案(,但没有找到任何可以解决我的问题的东西。希望这里有人能帮忙。我的 maven 版本似乎是 3.2.1(无论如何,这就是 -version 告诉我的(

这是我的框架pom.xml和客户端pom.xml在pastebin上:

框架:http://pastebin.com/cceZECaT

客户: http://pastebin.com/1Cuxve5F

感谢帮助。

其中一个原因是当您依赖父 pom 已过时的项目时。如果您在没有安装/部署的情况下更新父 pom,通常会发生这种情况。

要查看是否是这种情况,只需运行mvn dependency:tree -X并搜索确切的错误。它会提到它错过了你知道在父pom中的东西,而不是你依赖的工件(例如jar版本(。

修复非常简单:使用 mvn install -N 安装父 pom 并重试

我有一个类似的错误,就我而言,从本地存储库中删除所有相关工件是解决方法...

删除 .m2 中的存储库文件夹并启动 mvn 全新安装。

让我们了解结果,祝你好运

我有同样的问题,我可能有答案。我有一个顶级项目MyProjectModule1Module2Module2取决于Module1,该条目作为(默认(依赖项列出。我的项目

<modules>
Module1
Module2
</modules>

MyProject 文件夹中的mvn dependency:tree正常:模块 2 取决于模块 1

MyProject
---
com.acme:Module1:version
---
com.acme:Module2:version
+com.acme:Module1:version

问题是如果我在Module2文件夹中运行mvn dependency:tree。然后我收到错误消息:

The POM for com.acme:Module2:version is invalid, 
transitive dependencies (if any) will not be available

经过一些调查,我发现由构建的安装部分创建/复制的pom文件是原始pom文件m2/com/acme/myproject/Module1/version/Module1-version.pom这个使用版本的变量(在许多其他模块中重复,此处未列出(或系统路径(没有选择系统依赖项(。这些变量在父 POM 文件中定义。如果我用它们的值替换模块 pom 文件中的所有${},那么一切都很好。基本上,在构建整个东西时,变量的值可用于所有依赖模块,因为这是相同的过程。构建单个模块时,父 POM 中定义的变量不可用。

您自己的框架pom文件包含net.sf.javaml的系统路径变量。对变量进行硬编码或找到其他解决方案,如物料清单。https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

假设客户端和服务器项目 poms 由于扩展不满意而无效,那么以下方法应该可以工作...如果"客户端"和"服务器"项目依赖于标记中定义的"框架",则可以首先使用 -N 选项安装"框架"。 首先,cd 到框架目录,然后: mvn -N clean install-N 选项告诉 maven 只在本地存储库中安装根 pom 并跳过子模块。 现在 cd 到您的子项目,并在客户端或服务器模块中重新运行安装命令。 客户端或服务器内部版本现在应该在本地存储库中找到具有所需属性的父 pom。

您可以通过使用子 pom 的父标签中的 relativePath 标签进行显式文件路径引用来获得相同的效果:

<parent>
  <relativePath>../my-parent</relativePath>
</parent>

客户端项目上运行install之前在本地存储库中可用的框架工件,因为两个项目之间没有耦合(客户端工件不是框架项目的module(。

因此,要解决此问题,您应该在框架项目上运行mvn install,以便将打包的jar复制到本地存储库。然后,当您在客户端项目上运行某个 maven 阶段时,由 maven 来发现并找到它。

若要在组织之间共享项目,应将项目(上传(部署到 nexus 托管镜像。

我遇到了同样的问题。我正在管理我尝试构建的项目引用的所有模块。事实证明,我必须在模块的所有父项目上进行"mvn 部署",该父项目在另一个模块 pom.xml 中使用时显示此错误。以下是 http://programtalk.com/java/i-used-to-get-this-maven-error-all-time/

在我的情况下,maven 损坏了传递依赖 pom(双重内容(之一,所以我只是在我的 m2 文件夹中删除了它。 -X键帮助我找到了某个破碎的pom。

对我来说

,pom.xml内容从存储库加载到.m2文件夹,当我打开文件时,文件的内容是HTML内容,这就是我收到此警告消息的原因,因为该站点已移动到不同的存储库位置,

[WARNING] The POM for GROUPID:ARTIFACTID:PACKAGIN:VERSION is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details

所以我将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>GROUPID</groupId>
  <artifactId>ARTIFACTID</artifactId>
  <version>VERSION</version>
  <packaging>PACKAGIN</packaging>
</project>

现在,如果我在具有上述依赖项的模块上运行 mvn 全新安装,则不会显示警告。因此,请检查绒球的内容.xml。

相关内容

最新更新