<name>的POM无效,传递依赖(如果有)</name>

时间:2014-05-10 12:43:01

标签: 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,框架也是一个依赖项(作为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

非常感谢帮助。

10 个答案:

答案 0 :(得分:21)

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

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

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

答案 1 :(得分:16)

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

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:4)

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

通过结果和祝你好运告诉我们

答案 4 :(得分:3)

我有同样的问题,我可能有答案。 我有一个顶级项目MyProjectModule1以及Module2Module2取决于Module1,并且该条目被列为(默认)依赖项。 MyProject的

<modules>
Module1
Module2
</modules>
来自mvn dependency:tree文件夹的

MyProject正常:module2依赖于module1

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

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

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

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

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

答案 5 :(得分:2)

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

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

mvn全新安装-日志文件C:\ XXXX \ Maven \ log.txt

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

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

仅此而已。

答案 8 :(得分:0)

在我的情况下,maven损坏了传递依赖项pom(双重内容)之一,因此我将其删除了我的m2文件夹。 -X键可以帮助我找到某些损坏的pom。

答案 9 :(得分:0)

对我来说,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 clean install,则不会显示警告。因此,请检查pom.xml的内容。