2012-02-14 4 views
3

Я пытаюсь создать проект с несколькими модулями. У меня есть один модуль для JAR, содержащий модели, контроллеры и классы обслуживания, а также еще один модуль для WAR. Мне удалось создать проект и сгенерировать результат, но я не уверен в структуре моих папок.Как собрать проект с несколькими модулями в Maven

В настоящее время я создал один модуль Maven в том же проекте.

Папки:

Parent 
Module1 
Module2 

Они все на том же уровне, правильно? Или должны ли модули Module1 и Module2 находиться внутри папки Parent? И возможно ли (или это произойдет автоматически), чтобы созданная цель отображалась в родительской папке, а не в каждом модуле? Или, может быть, нет необходимости в этом.

Я использую IntelliJ 11 IDEA.

http://www.sonatype.com/books/mvnex-book/reference/multimodule-sect-intro.html

ответ

4

Обычно люди ставят под модули родителя (как логически, так и в структуре каталогов). Но это не закон. Это всего лишь рекомендация. Теперь вам нужно создать 4 файла pom.xml: один на верхнем уровне и по одному на проект (parent, module1 и module2). ПОМ верхнего уровня следует упомянуть все свои 3 подпроекты:

<modules> 
    <module>parent</module>  
    <module>module1</module> 
    <module>module2</module>   
</modules> 

Если Module1 и 2 зависит от родителя (то есть на том же уровне) просто сказать:

<dependencies> 
    <dependency> 
     <groupId>com.yourcompany.yourproject</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 
<dependencies> 
+0

Так в IntelliJ как бы вы сделали это? Вы создаете модули внутри родительского модуля? – LuckyLuke

0

Вы можете поместить все модулей и родительских элементов в одной иерархии. Хороший подход, который я нашел, это иметь папку для родителя, которая будет иметь pom. В этом ПОМ вам нужно будет определить суб модули:

<modules> 
    <module>shared</module> 
    <module>common</module> 
    <module>dal</module> 
    <module>logic</module> 
</modules> 

Если все модули на одной и той же иерархии папок, то вам нужно сделать что-то вроде:

<module>../shared</module> 

В суб модули, вам нужно установить версию родителя:

<parent> 
    <artifactId>Aggregation</artifactId> 
    <groupId>com.mycomm</groupId> 
    <version>3.0.2-SNAPSHOT</version> 
</parent> 

чтобы иметь зависимость между каждым модулем в одном проекте:

<dependency> 
    <groupId>com.mycomm</groupId> 
    <artifactId>shared</artifactId> 
    <version>${project.version}</version> 
</dependency> 

Если вы изменили родительский pom, вам также понадобится изменить все родительские pom. Вы можете использовать МВН-релиз-Plugin Пример:

mvn release:update-versions -DautoVersionSubmodules=true -DdevelopmentVersion=1.0.0.2-SNAPSHOT 
+0

Okey, но как бы IntelliJ позволил вам установить модуль Maven внутри другого модуля Maven? – LuckyLuke

+0

Я не знаю, как это делается в IntelliJ. В eclipse я просто импортирую все модули в качестве проектов maven, и он «знает», что делать. Думаю, в InteliJ это было бы похоже. –

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