2014-10-08 6 views
0

У меня есть проект Maven с одним подпроектом, когда я запускаю задачу установки на родительский проект из IDEA (IntelliJ IDEA), все работает нормально и maven разрешить дочерний модуль.TeamCity, Maven Не удалось создать дочерний модуль

Мои проекты версионируются на подрывной, и это структура файловой системы:

project 
|--pom.xml 
|--subproject 
    | 
    |-- branches 
    |-- tags 
    |-- trunk (here there is my subproject source, also pom.xml file) 

Я создать проект с его подпроекта из SVN URL, на TeamCity сервера.

Когда я бегу Строить на родительском проекте неудачу и вернуть мне следующую ошибку:

[Step 1/1] Error reading Maven project: Some problems were encountered while processing the POMs: 
[ERROR] Child module /opt/buildAgent/work/ee114e0c77ee2c44/subproject of /opt/buildAgent/work/ee114e0c77ee2c44/pom.xml does not exist @ 

Как я могу сказать, чтобы родитель-проект-сборки, где найти модуль ребенка?

Есть ли что-то еще не так?

Родитель POM:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>it.company.project</groupId> 
    <artifactId>MyProject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <name>MyProject</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    <modules> 
    <module>Foo</module> 
    </modules> 
</project> 

Детский POM:

<?xml version="1.0"?> 
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>it.company.project</groupId> 
     <artifactId>MyProject</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

    <groupId>it.company.subproject</groupId> 
    <artifactId>subproject</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>subproject</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <build> 
     <resources> 
      <resource> 
       <directory>src/main/java</directory> 
       <includes> 
        <include>**/*.java</include> 
       </includes> 
      </resource> 
     </resources> 
    </build> 
</project> 

EDIT: Я добавил новый параметр (pathSubproject) на мой родительский pom.xml, поэтому, когда я бегу родительский сборщик пропустил предыдущую ошибку, но теперь он падает при попытке разрешить зависимость родителя от подпроекта. Поэтому я добавил новый параметр также в подпроект (parentPath), и я передал его в relativePath внутри родительского тега.

Non-resolvable parent POM: Could not find artifact it.company.project:MyProject:pom:1.0-SNAPSHOT and 'parent.relativePath' 

Я думаю, что мой подпроект POM не решают свойства, которые я положил внутри <relativePath тега.

Возможно передать свойства relativePath тег?


Благодаря

ответ

0

Я решаю свою проблему, создав в моем родительском pom 2 profile, первый строит родительское приложение со всеми подмодулями, а последние строят только родительское приложение.

В настройках конфигурации сборки TeamCiTY я указал (внутри Дополнительные параметры командной строки Maven) профиль, который строит только родительский модуль и после того, как я построил родительское приложение.

После этого я построил родительское приложение, я построил все подмодули, а затем я смог создать родительское приложение со всеми модулями.

Я не уверен, что это правильный путь, но в моем случае это сработало хорошо.

1

В <modules/> разделе П вашего родительского проекта, каждый модуль, указанный относительный путь к каталогу, содержащему модуль.

Поэтому, если вы не хотите изменять структуру каталогов, вы должны иметь возможность ссылаться на магистраль вашего подпроекта, используя <module>subproject/trunk</module>.

Это кажется немного неуклюжим. Если вы используете шаблон агрегатора/модулей, я бы порекомендовал, чтобы project и subproject оба были в том же SVN-репозитории. Если это не подходит, то ваш subproject может не быть действительно модулем и должен быть зависимым или иметь project в качестве его родительского артефакта.

+0

Мой проект и подпроект находятся в одном и том же хранилище SVN, а структура репозитория показана в моем Вопросе. Я предпочитаю делить свою основную линию разработки на другую ветвь, поэтому для каждого подпроекта я создал 3 подпапки: туловище, теги и ветки. – PapaSmurf

+1

Хорошо, тогда использование подпроекта/соединительной линии для модуля должно работать. Вы пробовали это? –

+0

Я добавил новый параметр (pathSubproject) в родительский pom.xml, поэтому, когда я запускаю родительскую сборку, он пропустил предыдущую ошибку, но теперь он сбой при попытке разрешить зависимость родителя от подпроекта. Это ошибка 'Проект it.company.project: Subproject: 3.0 (/opt/buildAgent/work/ee114e0c77ee2c44/subproject/trunk/pom.xml) имеет 1 ошибку' – PapaSmurf

Смежные вопросы