Ошибка сборки Hudson: неразрешимый родительский POM - PullRequest
8 голосов
/ 02 марта 2011

Раньше я работал с Хадсоном над моим проектом, и в последнее время мне пришлось перенести его на новый сервер.

Я настроил его точно так же, как раньше (насколько я могу судить), нокогда я пытаюсь запустить сборку, происходит сбой, и я получаю следующую ошибку:

Démarré par l'utilisateur anonymous
Checking out http://[...]/trunk/MyProject/ear
A         .classpath
A         .project
A         target
AU        target/ear-1.0-SNAPSHOT.ear
A         target/application.xml
A         target/ear-1.0-SNAPSHOT
A         target/ear-1.0-SNAPSHOT/META-INF
A         target/ear-1.0-SNAPSHOT/META-INF/application.xml
AU        target/ear-1.0-SNAPSHOT/web-1.0-SNAPSHOT.war
AU        target/ear-1.0-SNAPSHOT/business-1.0-SNAPSHOT.jar
A         pom.xml
A         .settings
A         .settings/org.eclipse.jdt.core.prefs
A         .settings/org.maven.ide.eclipse.prefs
At revision 136
no change for http://[...]/trunk/MyProject/ear since the previous build
Found mavenVersion 3.0.2 from file jar:file:/usr/share/maven/apache-maven-3.0.2/lib/maven-core-3.0.2.jar!/META-INF/maven/org.apache.maven/maven-core/pom.properties
Parsing POMs
ERROR: Echec à la lecture des POMs
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM: Could not find artifact com.rha:MyProject:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 9, column 10

    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:325)
    at hudson.maven.MavenEmbedder.buildProjects(MavenEmbedder.java:360)
    at hudson.maven.MavenEmbedder.readProjects(MavenEmbedder.java:330)
    at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:1148)
    at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:991)
    at hudson.FilePath.act(FilePath.java:756)
    at hudson.FilePath.act(FilePath.java:738)
    at hudson.maven.MavenModuleSetBuild$RunnerImpl.parsePoms(MavenModuleSetBuild.java:698)
    at hudson.maven.MavenModuleSetBuild$RunnerImpl.doRun(MavenModuleSetBuild.java:531)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:420)
    at hudson.model.Run.run(Run.java:1362)
    at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:405)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:145)
Finished: FAILURE

Файл pom.xml, когда я попал в «рабочую область» Хадсона, выглядит так:

[...]

    <parent>
        <groupId>com.rha</groupId>
        <artifactId>MyProject</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

[...]

    <dependencies>
        <dependency>
            <groupId>com.rha</groupId>
            <artifactId>business</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>ejb</type>
        </dependency>
        <dependency>
            <groupId>com.rha</groupId>
            <artifactId>web</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>war</type>
        </dependency>
    </dependencies>

</project>

[Редактировать]

На самом деле я забыл некоторые важные сведения:

Мой проект разделен на 3 части:

бизнес (упакованный в .jar) веб (упакованный в .war) ухо (упакованный .war и .jar в .ear)

Я использую Subversion, и в моей папке «trunk» я получил папку «MyProject», включающую:

.project
.settings/
business/
ear/
pom.xml
src/
web/

, что происходит:

в моей конфигурации задания HudsonЯ заполнил SVN-поле "URL хранилища":

http://[. ..] / trunk / MyProject / ear

и вот это "pom.xml"из папки" MyProject ":

<?xml version="1.0" encoding="UTF-8"?>
<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 

[...]
    <modules>
        <module>business</module>
        <module>web</module>
        <module>ear</module>
    </modules>
[...]

так что родительский файл «pom.xml» на самом деле находится в «../pom.xml» в моем SVN-репозитории, в «trunk / MyFolder».

Но Хадсон по какой-то причине не видит его (но, как я уже сказал, раньше он работал на предыдущем сервере).

Любая подсказка?

[/ Edit]

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

Любая помощь будет принята с благодарностью!

Николас

Ответы [ 4 ]

16 голосов
/ 03 марта 2011

relativePath (из parent) по умолчанию ../pom.xml.Похоже, его там нет.Вы можете установить его в пустое значение, чтобы maven загружал его как зависимость.

 <relativePath/> 

Эта ссылка обсуждает это.

[Редактировать: на основе правокна вопрос]

Хадсон видит только исходный код внутри папки ear.Хотя родительский pom присутствует в SVN, он не доступен для Hudson.Отсутствие родительского pom было предупреждением в Maven 2, но строго в Maven 3.

Есть два способа решить эту проблему.

Один из них - указать hudson, URLhttp://[...]/trunk/MyProject/.Затем вы можете собрать все модули или по-прежнему выбирать только проект pom.xml ear.

Другой способ - вручную запустить mvn install в системе hudson, чтобы родительский pom был развернут один раз, а затем использован hudson.Однако, это не будет обновлено, если родительский pom впоследствии изменен.

4 голосов
/ 02 марта 2011

Извлечение Root-POM из Maven-REPO обычно также должно работать (как вы делаете), но я ожидаю, что вы еще не инициировали установку корневого POM в REPO на новом сайте hudson.

Чтобы избежать этого, используйте свойствоlativePath, например, как то так:

<relativePath>../pom.xml</relativePath>

в вашем теге <parent>, который скажет maven искать корневую помпу в структуре вашего модуля.

1 голос
/ 16 декабря 2011

У меня была такая же проблема с плагином Hudson, Sonar и многомодульным проектом Maven: «Неразрешимый родительский POM», когда Хадсон пытался запустить sonar: sonar. Решением было указать местоположение Root POM в конфигурации задания Hudson в разделе Sonar.

Структура проекта в SVN (каждый является проектом Maven с pom.xml в корне проекта):

foo-parent
  +- foo-ui-module
  +- bar-other-module

У меня есть отдельные задания Hudson для каждого проекта: "foo-parent", "foo-ui-module" и "bar-other-module". Запуск сонара в задании Hudson не смог найти родительский POM, хотя сборка была успешной до этого момента. Возможно, плагин Sonar не использует те же настройки Maven, что и остальная часть работы, потому что он не пытался искать родительский POM из нашего репозитория Artifactory, даже с <relativePath/> в POM проекта.

Место для настройки Root POM находилось в разделе Configure -> Sonar -> Advanced -> Root POM задания: ../foo-parent/pom.xml (у меня задание foo-parent по этому пути)

0 голосов
/ 12 августа 2013

Нам удалось добиться этого, просто удалив соответствующий файл pom, а также некоторый файл метаданных с аналогичным именем в той же папке, из папки .m2/repository/a/b/c на нашем сервере jenkins.

Перезапустите сборку jenkins после того, как все это заработало.

Надеюсь, это кому-нибудь поможет ...

...