2015-03-11 2 views
0

У меня есть 2 проекта Maven, A и B. Проект A полностью независим, а B требует A как зависимости. В настоящее время, B получает из репозитория Maven:Проект Maven требует локальной зависимости для построения

<dependency> 
    <groupId>com.myproject</groupId> 
    <artifactId>projectA</artifactId> 
    <version>2.0.0-SNAPSHOT</version> 
</dependency> 

То, что я хотел бы сделать, это настроить зависимость такая, что B может ссылаться на локальный экземпляр A. Я могу сделать следующее:

<dependency> 
    <groupId>com.myproject</groupId> 
    <artifactId>projectA</artifactId> 
    <version>2.0.0-SNAPSHOT</version> 
    <scope>system</scope> 
    <systemPath>${basedir}/../projectA/target/projectA-2.0.0-SNAPSHOT.jar</systemPath> 
</dependency> 

, но это работает только в том случае, если A уже построен (так projectA-2.0.0-SNAPSHOT.jar уже существует).

Есть ли способ заставить A построить до B в тех случаях, когда у меня еще нет сборки A?

ответ

1

Один из способов - создать родительский pom и добавить эти проекты в виде дочерних модулей. Таким образом, структура каталогов будет выглядеть следующим образом:

+ pom.xml 
| 
+-A 
| \ 
| + pom.xml 
+-B 
    \ 
    + pom.xml 

Родитель П будет иметь <modules> тега, добавление A и B проектов в качестве дочерних модулей:

<groupId>com.myproject</groupId> 
<artifactId>parent</artifactId> 
<version>2.0.0-SNAPSHOT</version> 
<packaging>pom</packaging> 

<modules> 
    <module>A</module> 
    <module>B</module> 
<modules> 

А затем добавьте A модуль в зависимости от B модуль. Просто сохраните идентификатор группы одинаковым для родительских, A и B. И затем обратитесь к модулю с помощью артефакта-id.

pom.xml для B будет, как:

<parent> 
    <groupId>com.myproject</groupId> 
    <artifactId>parent</artifactId> 
    <version>2.0.0-SNAPSHOT</version> 
</parent> 
<artifactId>projectB</artifactId> 

<dependencies> 
    <dependency> 
     <groupId>com.myproject</groupId> 
     <artifactId>projectA</artifactId> 
     <version>2.0.0-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

Теперь построить родительский POM. Он позаботится о порядке сборки.

+0

Это близко к тому, что я хочу сделать, но когда я избавлюсь от свойства '', он по умолчанию выполняет поиск maven-репо для 'projectA-2.0.0-SNAPSHOT.jar', вместо того, чтобы использовать локальный один. Есть ли способ заставить его сначала проверить местонахождение? – NonsenseSynapse

+0

Теперь вам не нужно давать 'systemPath'. Это зависимость от модуля. –

+0

Теперь он работает. Я изменил groupId, чтобы проверить, действительно ли он работает локально, но забыл обновить его на одном из дочерних модулей. – NonsenseSynapse

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