GWT-хостинг в мультипроектной maven установке - PullRequest
2 голосов
/ 29 декабря 2011

У меня есть многомодульная установка 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.

Ответы [ 2 ]

3 голосов
/ 29 декабря 2011

Перейдите в модуль веб-приложения и запустите mvn gwt:run.

Вы можете использовать профили для ускорения времени компиляции: например, один профиль может компилироваться только gwt для gecko и english + draftCompile.

Посмотрите плагин maven GWT Настройка нескольких модулей , если у вас все еще есть проблемы.

1 голос
/ 07 ноября 2012

Поскольку я также боролся с режимом разработки GWT и проектом Maven с несколькими подмодулями / проектами, я создал пример и загрузил его в GitHub.Вы можете найти его по адресу:

https://github.com/steinsag/gwt-maven-example

На странице readme на странице выше показано, как запустить его через Maven.Особенности этого примера:

  • несколько модулей
  • без использования встроенной GWT Jetty, но собственный сервер Tomcat7
  • запуск режима хоста Tomcat7 и GWT возможен через документированныйКоманды Maven

Надеюсь, это немного поможет иметь хотя бы рабочий пример для начала.

...