Неразрешимый родительский POM: при создании сайта проекта Maven 3

В настоящее время я сталкиваюсь со следующей проблемой с 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> 

Основной элемент проекта А:

<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:

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 успешно развернут в репозитории NEXUS перед выполнением mvn clean site с помощью следующей команды mvn deploy -DaltDeploymentRepository=snapshots::default::http://MyServer:8081/nexus/content/repositories/snapshots

И, наконец, сама проблема:

Когда я запускаю mvn clean site сразу после успешного создания сайта parent-pom. Если я удалю папку (с ее содержимым) «моя» (она содержит родительский файл) из локального репозитория (~/.m2/repository), а затем попытаюсь создать сайт с помощью mvn clean site, я получаю сообщение об ошибке, описанное в начало. На самом деле Maven загружает parent-pom из NEXUS. Я сравнил загруженные файлы и файлы, созданные после развертывания, и понял, что некоторые из них отсутствуют, например, maven-metadata-local.xml рядом с папкой «0.1-SNAPSHOT».

Поэтому, когда я пытаюсь запустить задание по созданию сайта из Jenkins, я получаю ошибку, описанную выше, потому что parent-pom не развернут с машины, на которой работает Jenkins.

Как я могу решить эту проблему или что я сделал не так?

Спасибо.


person tgrigoryan    schedule 29.06.2012    source источник
comment
Я бы удалил запись относительного пути ваших модулей, потому что она пуста, поэтому она не нужна. Можете ли вы улучшить изображение со структурой папок, в которой находится ваш родительский помпон? И почему родительский pom и pom агрегации разные?   -  person khmarbaise    schedule 29.06.2012
comment
‹relativePath/› заставляет maven загружать родительский POM из репозитория, а не искать его в структуре. Если я удаляю его, maven показывает предупреждения, потому что начинает думать, что родитель находится в ../pom.xml, что неверно. По поводу агрегации и наследования. Это нормально иметь разные родительские POM и POM агрегации. Вот ссылка: Агрегация и наследование   -  person tgrigoryan    schedule 29.06.2012
comment
Я знаю, что можно иметь разные агрегатор и родитель, но это не упрощает жизнь.   -  person khmarbaise    schedule 29.06.2012
comment
Для нашего проекта я создал один корневой pom, который определяет все общие свойства, управление дистрибутивом и т. д. Затем он наследуется другим, который используется для чисто java (jar) проектов. Я действительно не могу скомпрометировать структуру. Если это должно работать, то почему нет? Более того, я просмотрел POM Maven. Они также имеют схожую структуру, хотя предоставляют относительный путь к родителям (а не агрегации) вместо того, чтобы загружать их из репозитория.   -  person tgrigoryan    schedule 29.06.2012
comment
Больше всего смущает то, что все отлично работает, если родительский pom просто развернут с той же машины или установлен на той же машине. Когда родитель загружается из репозитория, плагин сайта maven не находит его. Но отдых снова работает нормально, т.е. компилируется, развертывается и т.д.   -  person tgrigoryan    schedule 29.06.2012
comment
рискуя звучать как застрявшая запись - у меня та же проблема... разве это не ошибка в maven?   -  person Michael Wiles    schedule 04.04.2013


Ответы (3)


Как указано в в этом ответе, существует ошибка в плагине сайта, который ищет зависимости только в том, что, по его мнению, является центральным Maven.

У меня такая же проблема в Maven 3.0.4 и site-plugin 3.3. У меня также есть проблема, что он работает на моем компьютере для разработки под управлением Windows 7, но не на CI-сервере, на котором работает Jenkins в Debian.

person AdrianRM    schedule 30.07.2013

Проблема не в ваших файлах pom. Когда я построил вашу агрегацию-pom, Maven обычно загружал parent-pom из удаленного репо (после того, как я удалил из своего локального репо).

Попробуй это:

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

Кроме того, вы можете сделать некоторую очистку:

  • удалить <relativePath/> из них всех
  • удалить <version>0.1-SNAPSHOT</version> и <groupId>my.com</groupId> из projA и ProjB (они унаследованы от родителя)
person cahen    schedule 26.04.2013

У меня та же проблема... работает на моем MacBook для разработчиков, но не работает на моем Jenkins, работающем на RHEL7, при запуске mvn site с использованием maven-site-plugin:3.7. Я не пробовал понижать версию плагина сайта.

Я нашел другое решение. Проблема в моем случае заключалась в maven-project-info-reports-plugin, особенно в цели dependencies. Если я пропущу цель с -Dmpir.skip=true, мой сайт будет сгенерирован (без зависимостей :( отчет).

person Dominik    schedule 25.01.2018