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

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

我遇到了Maven的一些问题。 我先来描述一下我的项目设置:

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

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

 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告诉我的)

这是我的framework-pom.xml和pastebin上的client-pom.xml:

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

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

感谢帮助。

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

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

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

我有一个类似的错误,在我的情况下删除本地存储库中的所有相关工件是解决方法…

假设客户端和服务器项目poms由于未满足的扩展而无效,那么以下内容应该有效…如果“客户端”和“服务器”项目依赖于标签中定义的“框架”,那么您可以先安装“框架”使用-N选项。 首先,cd到Framework目录,然后: mvn -N clean install -N选项告诉maven只在本地repo中安装root pom并跳过子模块。 现在cd到您的子项目并在您的客户端或服务器模块中重新运行您的安装命令。 客户端或服务器构建现在应该在本地存储库中找到具有所需属性的父pom。

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

  ../my-parent  

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

  Module1 Module2  

mvn dependency:tree来自MyProject文件夹的mvn dependency:tree是OK:module2依赖于module1

 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文件为m2/com/acme/myproject/Module1/version/Module1-version.pom是原始的pom文件。 这个版本使用版本的变量(在此处未列出的许多其他模块中重复)或系统路径(没有选择具有系统依赖性)。 这些变量在父POM文件中定义。 如果我用它们的值替换模块pom文件中的所有${} ,那么一切都很好。 基本上在构建整个事物时,变量的值可用于所有相关模块,因为这是相同的过程。 构建单个模块时,父POM中定义的变量不可用。

您自己的框架pom文件包含net.sf.javaml的systempath的变量。 硬编码变量或找到另一种解决方案,如物料清单。 https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

删除.m2中的存储库文件夹并启动mvn clean install。

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

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

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

要在您的组织中共享您的工件,您应该将工件(上载)部署到nexus托管镜像。

我遇到过同样的问题。 我正在管理我正在尝试构建的项目所引用的所有模块。 问题是,当在另一个模块pom.xml中使用时,我必须对显示此错误的模块的所有父项目执行“mvn deploy”。 以下是整个解释http://programtalk.com/java/i-used-to-get-this-maven-error-all-time/

您必须使用以下命令将输出发送到日志文件:

mvn clean install –log-file C:\ XXXX \ Maven \ log.txt

打开log.txt并分析未找到的依赖项或pom.xml处于无效状态

删除无效的pom,然后重新运行mvn clean install

就这些。