Ошибка сборки Hudson: неразрешимый родительский POM

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

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

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://[...]/ багажник /MyProject/ ухо

и вот "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".

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

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

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

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

Любая помощь будет оценена!

никола

4 ответа

Решение

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

 <relativePath/> 

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

[Изменить: на основе правок к вопросу]

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

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

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

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

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

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

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

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

У меня была такая же проблема с плагином 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/> в проекте ПОМ.

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

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

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

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

Другие вопросы по тегам