Как создать настройки разработки / отладки и производства - PullRequest
4 голосов
/ 17 ноября 2009

Я недавно случайно развернул отладочную версию нашей игры typrX (печатать гонки на www.typrx.com - попробуйте это весело). Это было быстро исправлено, но я знаю, что это может случиться снова. После копания в Google я нашел некоторую информацию о том, как создать 2 разных профиля, один для режима разработки, который имеет функции отладки и один используется для развертывание. Вот что я нашел из презентации Google IO. Есть ли у кого есть такая настройка? Может кто-нибудь объяснить, как запустить это?

MyAppCommon.gwt.xml 

<module> 
  ... 
  <define-property values="debug, release" name="app.config" /> 
  <replace-with class="myapp.debug.DebugConsole"> 
    <when-type-is class="myapp.Console" /> 
    <when-property-is name="app.config" value="debug" /> 
  </replace-with> 
  ... 
</module> 
MyAppDebug.gwt.xml 
<module> 
  ... 
  <set-property name="app.config" value="debug" /> 
</module> 

1 Ответ

8 голосов
/ 17 ноября 2009

Идея использования определенного модуля для отладки не раз обсуждалась, и она также упоминалась в этой презентации Google I / O (см. Слайд 33 из PDF или в 0:31 м в видео) .

Основная идея заключается в том, что у вас есть стандартный модуль GWT и второй debug модуль, который наследует этот стандартный модуль, настраивает некоторые свойства и использует отложенную привязку GWT для замены некоторых. классы с конкретными экземплярами при отладке.

Затем вам нужно только сконфигурировать сборку Maven / ant для компиляции соответствующего модуля в зависимости от того, находитесь ли вы в режиме разработки или в режиме выпуска.


В моем проекте я не создавал свойство отложенного связывания app.config, но я мог бы сделать это позже. Я сделал следующее:

Создан стандартный модуль

ком / пример / MainModule.gwt.xml:

<module rename-to="mainModule">
    <inherits name="com.smartgwt.SmartGwt" />

    <!-- (other configurations) -->

    <!-- gwt-log configuration -->
    <define-property name="log_level" values="OFF,DEBUG" />
    <inherits name="com.allen_sauer.gwt.log.gwt-log-common" />

    <!-- Locales we want to compile for -->
    <extend-property name="locale" values="en" />
    <extend-property name="locale" values="fr_FR" />

</module>

Создан модуль «отладки», который наследует стандартный модуль и настраивает некоторые дополнительные свойства для разработки

ком / пример / MainModuleDebug.gwt.xml:

<module rename-to="mainModule">
    <inherits name="com.example.MainModule" />

    <set-property name="user.agent" value="gecko1_8" />
    <set-property name="locale" value="fr_FR"/>
    <set-property name="log_level" value="DEBUG" />
</module>

Примечание. Атрибут rename-to очень важен, поскольку вы хотите, чтобы оба модуля были развернуты под одним и тем же именем. Когда вы компилируете во время разработки, вам не нужно менять все свои html-страницы, чтобы они указывали на модуль отладки.

Настроил Maven и плагин gwt-maven для компиляции нужного модуля

<project>
    (...)
    <properties>
    (...)
    <!--
    Suffix appended to the names of the GWT modules we compile in our child projects.
    Empty by default, this suffix is overriden by some profiles to specify an alternative module to compile.
     -->
    <gwt.module.suffix></gwt.module.suffix>
    <!-- We force GWT-recompilation by default (except when using the "gwtDebug" profile - see below for more info) -->
    <gwt.compiler.force>true</gwt.compiler.force>
    </properties>
    (...)

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>gwt-maven-plugin</artifactId>
    <configuration>
        (...)
        <module>com.example.MainModule${gwt.module.suffix}</module>
    </configuration>
</plugin>

    (...)

    <profiles>
    <!-- This profile should be used during *DEVELOPMENT* -->
        <profile>
            <id>gwtDebug</id>
            <properties>
                <gwt.module.suffix>Debug</gwt.module.suffix>
             <!-- Tells gwt-maven-plugin to recompile GWT modules only when necessary -->
                <gwt.compiler.force>false</gwt.compiler.force>
            </properties>
            <activation>
                <property>
                    <name>gwtDebug</name>
                </property>
            </activation>
        </profile>
    </profiles>
</project>

Простое выполнение «maven clean install» скомпилирует производственный модуль. В процессе разработки вы используете «mvn clean install -DgwtDebug» для активации профиля gwtDebug, который, в свою очередь, компилирует модуль отладки.

Конечно, вы можете настроить свой ~ / .m2 / settings.xml так, чтобы он всегда определял свойство "gwtDebug" ...

Та же идея применима и к муравью. Но я не очень разбираюсь в этом.


Когда вы начинаете играть с идеей переопределения вашего реального модуля отладочным модулем, вы начинаете представлять некоторые очень интересные возможности:

  • Вы можете добавить журналы производительности, которые будут удалены из кода при работе.
  • Вы можете настроить все свои методы toString (), чтобы они возвращали что-то полезное в режиме отладки, и пустую строку в процессе производства (и, таким образом, уменьшали размер .js).
  • Вы можете уменьшить количество перестановок, указав только одну локаль / один браузер / один уровень журнала, чтобы ускорить компиляцию (но не забывайте время от времени проверять другие локали / браузеры).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...