Maven Project Builder вызывается каждый раз, когда я меняю исходный файл (GWT) - PullRequest
6 голосов
/ 19 декабря 2011

Недавно я преобразовал свое веб-приложение GWT ( GWT 2.4.0 ) в проект maven.
Я использую плагин maven 2.2.1, gwt-maven (2.4.0), Eclipse Indigo (3.7) и плагин m2eclipse.

Зависимости и общая конфигурация кажутся хорошими, поскольку веб-приложение компилируется без проблем, а также работает в производственном режиме.
То же самое относится и к размещенному режиму.

Однако у меня странное поведение: когда я изменяю одну строку в исходном файле Java / GWT, вызывается Maven Project Builder, и этот шаг занимает мучительно долго (около 10 секунд), а затмение иногда становится непригодным во времяэтот раз.

Это нормальное поведение m2eclipse?

И если да, есть ли способ ускорить его?

Примечание: мне пришлось настроить плагин жизненного цикла для m2eclipse.Вот важный раздел файла pom:

<build>
        <!-- Generate compiled stuff in the folder used for developing mode -->
        <outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>

        <plugins>

            <!-- GWT Maven Plugin -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>2.4.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test</goal>
                        </goals>
                    </execution>
                </executions>
                <!-- Plugin configuration. There are many available options, see gwt-maven-plugin 
                    documentation at codehaus.org -->
                <configuration>
                    <runTarget>index.html</runTarget>
                    <hostedWebapp>${webappDirectory}</hostedWebapp>
                    <i18nMessagesBundle>com.gmi.nordborglab.testapp.client.Messages</i18nMessagesBundle>
                </configuration>
            </plugin>

            <!-- Copy static web files before executing gwt:run -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>exploded</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <webappDirectory>${webappDirectory}</webappDirectory>
                </configuration>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.codehaus.mojo</groupId>
                                        <artifactId>gwt-maven-plugin</artifactId>
                                        <versionRange>[2.4.0,)</versionRange>
                                        <goals>
                                            <goal>resources</goal>
                                            <goal>compile</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute />
                                    </action>
                                </pluginExecution>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.apache.maven.plugins</groupId>
                                        <artifactId>maven-war-plugin</artifactId>
                                        <versionRange>[2.1.1,)</versionRange>
                                        <goals>
                                            <goal>exploded</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute />
                                    </action>
                                </pluginExecution>

                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

    </build>

Ответы [ 3 ]

14 голосов
/ 20 декабря 2011

Это прекрасно иллюстрирует, почему m2e не позволяет никаким «неизвестным» плагинам запускаться при инкрементной сборке по умолчанию (http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Background). Большинство плагинов maven не подходят для инкрементной сборки и выполняют полную сборку всякий раз, когда они вызываются (и в качестве бонуса вы можете получить утечки из загрузчика классов).

В разделе управления плагином вы указали, что должны выполняться gwt: resources, gwt: compile и war: exploded. По умолчанию они выполняются в инкрементных сборках, что означает КАЖДОЕ изменение ресурса. Поскольку эти цели / плагины не оптимизированы для инкрементной сборки, их выполнение занимает некоторое время.

Если вы хотите ускорить процесс, вы можете сказать m2e, чтобы он выполнялся только на полных сборках (т. Е. После очистки проекта) с помощью

<execute>
  <runOnIncremental>false</runOnIncremental>
</execute>

Затем ручное выполнение чистой сборки eclipse автоматически запустит их выполнение. Помните, что JDT иногда решает продвигать инкрементные сборки до полных.

Я считаю (но могу ошибаться), что, если бы вы использовали плагин Google Eclipse, вы могли полностью игнорировать gwt: resources и gwt: compile (заменив на ).

9 голосов
/ 19 декабря 2011

Причиной сборки Maven, скорее всего, является включенная Maven Project Builder (Свойства проекта> Построители).

Вы можете отключить его и - если у вас выбран Java Builder - Eclipse продолжит компилировать отредактированные файлы.

4 голосов
/ 19 декабря 2011

Ну, я обычно снимаю галочку:

Проект | Автоматически строить

Я просто ненавижу его постоянно компилировать.

...