【问题标题】:Non-resolvable parent POM: When building Maven 3 Project Site不可解析的父 POM:构建 Maven 3 项目站点时
【发布时间】:2012-06-29 11:09:55
【问题描述】:

当我尝试构建站点时,我目前面临 Maven 3 的以下问题。我会感谢你在这方面的帮助。

mvn 清洁网站

..........
[INFO] Reactor Summary:
[INFO] 
[INFO] Project A ......................................... SUCCESS [15.383s]
[INFO] Project B ......................................... SUCCESS [2.232s]
[INFO] My Site ........................................... FAILURE [0.105s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24.769s
[INFO] Finished at: Fri Jun 29 14:26:04 AMT 2012
[INFO] Final Memory: 18M/150M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.1:site (default-site) on project site: SiteToolException: Unable to read local module-POM: 1 problem was encountered while building the effective model for my.com:projA:0.1-SNAPSHOT
[ERROR] [FATAL] Non-resolvable parent POM: Could not find artifact my.com:parent-pom:pom:0.1-SNAPSHOT and 'parent.relativePath' points at no local POM @ line 12, column 13
[ERROR] for project my.com:projA:0.1-SNAPSHOT
.............

首先是配置:

Apache Maven 3.0.4 (r1232337; 2012-01-17 12:44:56+0400)
Java version: 1.7.0_04, vendor: Oracle Corporation
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.7.4", arch: "x86_64", family: "mac"
Nexus repository: 2.0.6

父 POM:

<modelVersion>4.0.0</modelVersion>

<name>Parent POM</name>
<groupId>my.com</groupId>
<artifactId>parent-pom</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<build>                         
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.1</version>  
                <configuration>
                    <reportPlugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-project-info-reports-plugin</artifactId>
                            <version>2.4</version>
                        </plugin>            
                    </reportPlugins>
                </configuration>
            </plugin>              
        </plugins>
    </pluginManagement>      
</build>

聚合项目pom:

<modelVersion>4.0.0</modelVersion>

<name>My Site</name>
<groupId>my.com</groupId>
<artifactId>site</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<parent>
    <groupId>my.com</groupId>
    <artifactId>parent-pom</artifactId>
    <version>0.1-SNAPSHOT</version>
    <relativePath/>
</parent>

<modules>

    <module>projA</module>
    <module>projB</module>

</modules> 

项目 A 的 pom:

<modelVersion>4.0.0</modelVersion>

<name>Project A</name>
<groupId>my.com</groupId>
<artifactId>projA</artifactId>
<version>0.1-SNAPSHOT</version>

<parent>
    <groupId>my.com</groupId>
    <artifactId>parent-pom</artifactId>
    <version>0.1-SNAPSHOT</version>
    <relativePath/>        
</parent>

项目 B 的 pom:

4.0.0

<name>Project B</name>
<groupId>my.com</groupId>
<artifactId>projB</artifactId>
<version>0.1-SNAPSHOT</version>

<parent>
    <groupId>my.com</groupId>
    <artifactId>parent-pom</artifactId>
    <version>0.1-SNAPSHOT</version>
    <relativePath/>        
</parent> 

这是我运行“mvn clean site”的文件夹的结构:

./pom.xml  (aggregation project)
./projA/pom.xml (Project A)
./projB/pom.xml (Project B)

parent-pom 在执行mvn clean site 之前成功部署到NEXUS 存储库,使用以下命令mvn deploy -DaltDeploymentRepository=snapshots::default::http://MyServer:8081/nexus/content/repositories/snapshots

最后是问题本身:

当我在成功构建 parent-pom 站点部署后立即运行 mvn clean site 时。如果我从本地存储库 (~/.m2/repository) 中删除文件夹(及其内容)“my”(它包含父 pom),然后尝试使用 mvn clean site 构建站点,我会收到描述的错误一开始。实际上 Maven 从 NEXUS 下载 parent-pom。我比较了下载的文件和部署后生成的文件,发现少了一些,例如“0.1-SNAPSHOT”文件夹附近的maven-metadata-local.xml。

所以当我尝试从 Jenkins 运行站点构建作业时,我收到了上述错误,因为父 pom 不是从运行 Jenkins 的机器部署的。

我怎样才能提出这个问题或我做错了什么?

谢谢。

【问题讨论】:

  • 我会删除模块的 relativePath 条目,因为它是空的,所以不需要它。你能用你父pom所在的文件夹结构来增强图片吗?为什么父pom和聚合pom是不同的?
  • 强制 maven 从存储库下载父 POM,而不是在结构中查找它。如果我删除它,maven 会显示警告,因为它开始认为父级在 ../pom.xml 中,这是不正确的。关于聚合和继承。可以有不同的父 POM 和聚合 POM。这是链接:Aggregation vs Inheritance
  • 我知道有不同的聚合器和父级是可能的,但这并不容易。
  • 对于我们的项目,我创建了一个根 pom,它定义了所有常见的属性、分发管理等。然后它被另一个继承,用于纯 java (jar) 项目。我真的不能妥协的结构。如果它必须工作,为什么它没有?此外,我还研究了 Maven 的 POM。它们也具有相似的结构,尽管它们提供了到父级(而不是聚合)的相对路径,而不是从存储库中加载它们。
  • 最尴尬的是,如果父pom只是从同一台机器部署或安装在同一台机器上,一切正常。当从存储库 maven 站点插件下载父级时,找不到它。但是 rest 又可以正常工作了,即编译、部署等。

标签: maven-3 maven-site-plugin


【解决方案1】:

正如this answer 所指出的,站点插件中有a bug,它只在它认为是Maven 中心的地方寻找依赖项。

我在 Maven 3.0.4 和 site-plugin 3.3 中遇到了同样的问题。我也有一个问题,它可以在我运行 Windows 7 的开发机器中运行,但不能在运行 Debian 上的 Jenkins 的 CI-Server 中运行。

【讨论】:

    【解决方案2】:

    问题不在您的 pom 文件中。当我构建你的聚合 pom 时,Maven 从远程 repo 正常下载了 parent-pom(在我从本地 repo 中删除之后)。

    试试这个:

    mvn -U clean install site dependency:purge-local-repository
    

    另外,你可以做一些清理工作:

    • 从他们中删除&lt;relativePath/&gt;
    • 从 projA 和 ProjB 中删除 &lt;version&gt;0.1-SNAPSHOT&lt;/version&gt;&lt;groupId&gt;my.com&lt;/groupId&gt;(它们是从父级继承的)

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题...在我的开发人员 MacBook 上工作,但在使用 maven-site-plugin:3.7 运行 mvn site 时在 RHEL7 上运行的 Jenkins 失败。我没有测试降级网站插件。

      我找到了另一个解决方案。我的问题是maven-project-info-reports-plugin,尤其是目标dependencies。如果我使用-Dmpir.skip=true 跳过目标,则会生成我的网站(没有依赖项:( 报告)。

      【讨论】:

        猜你喜欢
        • 2022-11-24
        • 2021-11-16
        • 2023-03-05
        • 2019-03-31
        • 2011-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多