Maven и GWT (и Eclipse) - Это действительно работает?

В последние несколько дней я пытался создать/запустить проект в Eclipse с помощью gwt-maven-plugin и продолжать работать в блокпосты (см. некоторые из моих предыдущих вопросов). Мне нравится использовать Maven для выполнения своих сборок, но я нахожусь в точке, где я собираюсь перейти на маршрут сборки Ant из-за осложнений с использованием Maven.

Кто-нибудь там настроил/работал хорошо? Это только я или это сложнее, чем должно быть?

Ответ 1

После долгих разочарований, пытающихся заставить вещи играть хорошо вместе, это настройка, которую у меня есть, что "работает" для меня. "Работы" означают, что я могу создавать, запускать и отлаживать проект GWT с трюками, но это не самое элегантное решение.

Создать проект

Значительная часть шагов такая же, как и Pascal в этом сообщении: Maven GWT 2.0 и Eclipse. Я перечислил, чтобы я был прав.

В Eclipse (Helios) с установленными плагинами m2eclipse и GWT Eclipse:

Создайте новый проект Maven, используя архетип gwt-maven-plugin

Измените pom.xml:

  • установите <gwt.version property> в 2.0.4 (должен быть таким же, как GWT Eclipse Версия плагина)
  • set <maven.compiler.source> и <maven.compiler.target> свойства 1,6
  • удалить <goal>generateAsync</goal> из gwt-maven-plugin <plugin> config
  • добавить maven-war-plugin в pom.xml

Пример использования maven-war-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.0.2</version>
    <configuration>
    <warSourceDirectory>war</warSourceDirectory>
        <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
    </configuration>
</plugin>

Обновить свойства проекта:

  • Google → Web Toolkit, установите флажок "Использовать Google Web Toolkit" и убедитесь, что выбрано "Использовать SDK по умолчанию (GWT-2.0.4).

Запуск Maven "gwt: eclipse" в проекте (настройка среды и запуск конфигурации)

Скопировать файл *.launch в файл workspace.metadata.plugins\org.eclipse.debug.core.launches

Перезапустить Eclipse

Скомпилировать/выполнить проект

Я создал конфигурацию выполнения, которая делает mvn clean compile gwt:run. Gwt: run необходим для копирования ресурсов и библиотек lib в военный каталог. Однако он не копирует web.xml из src/main/webapp/WEB-INF в war/WEB-INF/. Итак, мне нужно вручную скопировать этот файл.

Если я хочу запустить свое приложение, вышеуказанного шага достаточно. Однако, если я хочу отлаживать приложение, я запускаю его, выбирая конфигурацию Google "Веб-приложение" из "Конфигурации отладки", которая была создана, когда ранее был скопирован файл .launch. Эта конфигурация позволяет отлаживать (точки останова и т.д.) Без какой-либо другой конфигурации или необходимости удаленной отладки.

Ответ 2

Это сложнее, чем это должно быть, однако это возможно. Все намеки, размещенные здесь, могут сделать трюк. Однако вы все еще можете иметь проблемы с загрузкой. Я решил переключиться на GWT 2.1 и использовать новые возможности JettyLauncher. Вы можете создать собственную пристанную пусковую установку следующим образом:

public class MyJettyLauncher extends com.google.gwt.dev.shell.jetty.JettyLauncher {
  @Override
  protected WebAppContext createWebAppContext(TreeLogger logger, File appRootDir) {
    return new WebAppContext(appRootDir.getAbsolutePath(), "/");
  }
}

Затем добавьте параметр -server MyJettyLauncher в конфигурацию gwt launcher. С такой конфигурацией все библиотеки управляются с помощью m2eclipse (вы даже можете удалить GWT SDK из пути к классам), и нет необходимости копировать что-либо в WEB-INF/lib (вы можете удалить gwt-servlet.jar, который уже может быть там).

Готовая программа запуска находится здесь, в библиотеке tadedon: http://code.google.com/p/tadedon/source/browse/tadedon-gwt-dev/src/main/java/com/xemantic/tadedon/gwt/dev/JettyLauncher.java

Ответ 3

Да, в 2016 году это действительно хорошо.:)

Я запускаю Tomcat из Eclipse, я запускаю GWT codeerver (режим SuperDev) из Eclipse, я запускаю Chrome из Eclipse.

Вы найдете довольно свежие и очень ценные установочные руководства по каналу YouTube Brandon Donnelson: https://www.youtube.com/user/branflake2267/videos

Для меня важно отладчик Eclipse для GWT SuperDevMode: https://sdbg.github.io/

Я предпочитаю, чтобы мой проект "mavenized", и есть много архетипов Maven, также предоставленных Brandon: https://github.com/branflake2267/Archetypes/tree/master/archetypes

Официальная отправная точка (а не только) для загрузки плагина GPE (не путать с вышеупомянутым плагином отладчика) находится на GwtProject.com: http://www.gwtproject.org/download.html
Для меня лично сам GPE стал скорее дополнительным компонентом "удобства". (Да, рефакторинг и автозаполнение приятно иметь, но все это необходимо для.:)

Это не одно решение, и я предпочитаю его таким, как те, которые, как правило, являются чёрными ящиками, склонными к взлому.

И BTW обязательно взгляните на материал GWT: http://gwtmaterialdesign.github.io/gwt-material-demo/

(В настоящее время работает с 2,8-бета1.)

Ответ 4

Для Eclipse я использую: m2eclipse plugin (1.0). Он хорошо работает с одним или двумя незначительными вещами. Также загрузите плагин m2eclipse-extras, чтобы добавить функциональность SVN и Maven (или CVS, если хотите).

При загрузке вашего проекта он считывает pom.xml и [re] создает файлы конфигурации Eclipse, такие как команда mvn eclipse: eclipse.

Для GWT... Я тоже использовал его. Это довольно продуманная конфигурация, но она работает. Я использую GWT 2.0.3, maven-gwt-plugin использует зависимости для работы (без ссылки на GWT SDK), и он может отлаживать Eclipse, который просто велик.

Вам нужно скомпилировать в военный каталог (а не стандарт target/classes). Но подробности в моей работе, поэтому позвольте мне посмотреть завтра и завершить этот ответ:) Не сдавайтесь. Это здорово иметь GWT + Eclipse + Maven.

Изменить: часть моей конфигурации

<build>...
<outputDirectory>war/WEB-INF/classes</outputDirectory>
...
</build>


        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <version>1.2</version>
            <configuration>
                <gwtVersion>${gwt.version}</gwtVersion> <!-- para forzar que use el de maven y no el SDK instalado -->
                <disableCastChecking>true</disableCastChecking>
                <disableClassMetadata>true</disableClassMetadata>
                <runTarget>/subscriber/listSubscribers.htm</runTarget>
                <webappDirectory>${basedir}/war</webappDirectory>
                <soyc>true</soyc>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>


                    <!-- dont know/remember if the jetty inside the gwt uses this... but it doesnt hurt-->
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.14</version>
            <configuration>
                        <webAppConfig>
                        <contextPath>/magazine</contextPath>
                        <baseResource implementation="org.mortbay.resource.ResourceCollection">
                        <resourcesAsCSV>
                                ${basedir}/src/main/webapp,
                                ${basedir}/war
                            </resourcesAsCSV>
                        </baseResource>
                </webAppConfig>
                <connectors>
                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                        <port>8888</port>
                        <maxIdleTime>60000</maxIdleTime>
                    </connector>
                </connectors>
                <scanIntervalSeconds>3</scanIntervalSeconds>
                <scanTargets>
                    <scanTarget>${basedir}/war</scanTarget>
                </scanTargets>                  
            </configuration>
        </plugin>

И

Для отладки я создаю две задачи:

1) maven build внутри затмения, которое запускает два гола: war:exploded gwt:debug

  • Первая копирует все ресурсы в каталог war для отладки gwt для их использования.
  • Далее gwt готов.

Возможно, вам нужно выполнить gwt:compile в первый раз

2) конфигурацию отладки удаленных приложений Java с выбранным проектом.

Вы запускаете эту конфигурацию, когда gwt: debug "прослушивает порт 8000"

И: это в родительском pom.xml(извините, что я отредактирую это сообщение позже:)

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1-alpha-2</version>
            <configuration>
                <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
                <webappDirectory>${basedir}/war</webappDirectory>
                <warName>${artifactId}</warName>
            </configuration>
        </plugin>