2012-05-30 6 views
1

У меня есть проект, который содержит два модуля. Модуль base - это pom, который должен использоваться как родительский для определенного типа проектов. Модуль archetype является архетипом, который создает проект, который использует проект base как родительский. Я хочу использовать maven-release-plugin для выпуска этих проектов. Проблема заключается в том, что archetype имеет интеграционный тест, для которого требуется установить base в локальный репозиторий (test -goal запускается во вновь созданном проекте как часть теста интеграции). Когда я готовлю выпуск, maven-release-plugin запускает только test -goal для каждого модуля. Это означает, что интеграционный тест всегда терпит неудачу, потому что base не может быть найден, так как он не был установлен. Есть ли обходной путь для этого?Модуль требует установки другого модуля

ответ

0

Решение состоит в том, чтобы запустить install:file-install в pre-integration-test -фазе архетипа и настроить его для установки требуемого родителя.

0

Ну, вы можете (и, вероятно, должны) определить мультимодальный проект pom, который объединяет все эти внутренние модули, поэтому они могут быть построены в рамках общего реактора, что позволяет им видеть друг друга, даже если они не установлены в локальный репозиторий , Затем вы всегда выпускаете этот проект pom (агрегатор) и все его модули (включая base и archetype) вместе с ним.

+0

Это то, что у меня есть сейчас. Проблема в том, что интеграционный тест для архетипа создает новый проект, который зависит от «базы» и не может быть частью реактора. –

+0

ОК, я вижу. Так что, вероятно, это невозможно. Я не знаю трюка, чтобы динамически присоединить какой-то проект к созданию реактора. Может быть, есть хакерский путь, но, честно говоря, я не могу представить, как это может сработать. –

1

У меня такая же ситуация, когда в проекте, создаваемом архетипом, используется плагин Maven, построенный в том же реакторе. Я использую invoker:install, чтобы установить мой плагин в локальный репозиторий, используемый только для теста интеграции архетипа (с использованием того же localRepositoryPath для обоих invoker:install и archetype:integration-test); invoker:install фактически устанавливает все уже построенные артефакты из реактора, поэтому мне даже не нужно указывать что-либо. Я не сталкивался с какой-либо проблемой при заказе (мой плагин построен до моих архетипов), но я бы предположил, что могу просто добавить зависимость от плагина из архетипа (в scope=test).

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-invoker-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
    <execution> 
     <goals> 
     <goal>install</goal> 
     </goals> 
    </execution> 
    <configuration> 
     <localRepositoryPath>${project.build.directory}/it-repo</localRepositoryPath> 
    </configuration> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-archetype-plugin</artifactId> 
    <version>2.2</version> 
    <configuration> 
    <localRepositoryPath>${project.build.directory}/it-repo</localRepositoryPath> 
    </configuration> 
</plugin> 
Смежные вопросы