У меня есть многомодульная установка maven для моего проекта, состоящая из 5 модулей, включая веб-приложение GWT.
Это также многопроектное рабочее пространство eclipse, поэтому я создал дополнительный проект, содержащий только pom, в котором другие проекты (одноуровневые в файловой системе) перечислены как дочерние модули.
Я также новый пользователь Maven, поэтому я могу делать что-то не так. =)
Модуль gwt использует следующий плагин
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.4.0</version>
<executions>
<execution>
<goals>
<goal>generateAsync</goal>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<hostedWebapp>war</hostedWebapp>
<runTarget>GWT.html</runTarget>
</configuration>
</plugin>
Когда я запускаю mvn package
в проекте pom, я получаю ожидаемое поведение: проекты создаются в правильном порядке, и война в порядке.
Однако, когда я запускаю mvn gwt:run
, maven пытается найти приложение gwt в каждом модуле, отказывая в первом (родительском), который даже не объявляет и не управляет плагином gwt.
Если я запускаю mvn -fn gwt:run
, сборка завершается неудачей на каждом другом проекте, и, наконец, находит приложение gwt в модуле gwt и отображает его.
- Как правильно запустить приложение в режиме хостинга? Это правильное поведение?
Я не хочу, чтобы модуль GWT был родительским модулем (если это возможно), потому что проект имеет несколько целевых платформ, производящих веб-интерфейс gwt, исполняемый серверный jar-сервер, а в будущем также приложение для Android и разделяет большинство частей кода (не только модель). Рекомендована ли структура с одним pom для такой настройки, или мне не удается в maven?
Нужны ли профили? Если я это сделаю, я должен объявить один и тот же идентификатор профиля на каждом модуле? Как бы я мог предотвратить запуск команды gwt:run
на них в любом случае?
- Какими должны быть настройки такого проекта? Это правильная настройка?
Дополнительная информация
Модули
pom
: объявляет модули model
, logic
, analyze
, gwt
, tests
model
: нет зависимостей
logic
: нет зависимостей
analyze
: зависит от model
, logic
gwt
: зависит от model
, logic
tests
: зависит от model
, logic
, analyze
, gwt
(содержит глобальные тесты,
не юнит тесты)
Если я запускаю gwt:run
на модуле gwt
, я получаю ошибку
Could not resolve dependencies for project
djjeck.gwt:djjeck.gwt:war:0.0.1-SNAPSHOT:
Could not find artifact djjeck.model:djjeck.model:jar:0.0.1-SNAPSHOT
Это от djjeck.gwt/pom.xml
<dependency>
<groupId>djjeck.model</groupId>
<artifactId>djjeck.model</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
A com.model-0.0.1-SNAPSHOT.jar
находится внутри папки war lib, как упакованной, так и распакованной, а также внутри djjeck.model/target
.