Ошибка сборки 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 после этого сработал просто отлично.
Надеюсь, это поможет кому-то...