4 Stimmen

Wie man eine Entwicklungs-/Debug- und Produktionseinrichtung erstellt

Ich habe kürzlich versehentlich eine Debug-Version unseres Spiels typrX (Tippen von Rennen bei www.typrx.com - Probieren Sie es aus, es macht Spaß). Es wurde schnell behoben, aber ich weiß, dass es wieder passieren kann. Nach der Suche habe ich bei Google einige Informationen gefunden, wie man 2 verschiedene Profile erstellt, eines eines für den Entwicklungsmodus, das die Debug-Funktionen enthält, und eines, das für Einsatz. Das hier habe ich in einer Google IO-Präsentation gefunden. Hat hat jemand diese Einrichtung? Kann jemand erklären, wie man das ausführt?

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>

8voto

Etienne Neveu Punkte 12414

Die Idee, ein spezielles Modul für die Fehlersuche zu verwenden, kursiert schon seit einiger Zeit und wurde auch in diese Google I/O Präsentation (siehe Folie 33 der PDF-Datei oder bei 0h31m im Video).

Die Grundidee ist, dass Sie eine Standard GWT-Modul, und ein zweites Fehlersuche Modul, das dieses Standardmodul erbt, einige Eigenschaften konfiguriert und GWTs latente Bindung verwendet, um beim Debuggen einige Klassen durch bestimmte Instanzen zu ersetzen.

Dann müssen Sie nur noch Ihr Maven/Ant-Build so konfigurieren, dass das entsprechende Modul kompiliert wird, je nachdem, ob Sie sich im Entwicklungs- oder im Freigabemodus befinden.


In meinem Projekt habe ich keine "app.config"-Eigenschaft für die aufgeschobene Bindung erstellt, aber das könnte ich später nachholen. Was ich tat, war das folgende:

Erstellung eines Standardmoduls

com/example/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>

Erstellung eines "Debug"-Moduls, das das Standardmodul erbt und einige zusätzliche Eigenschaften für die Entwicklung konfiguriert

com/example/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>

Anmerkung: Die umbenennen in Attribut ist hier sehr wichtig, da beide Module unter genau demselben Namen bereitgestellt werden sollen. Wenn Sie während der Entwicklung kompilieren, möchten Sie nicht alle Ihre HTML-Hostseiten ändern müssen, um auf das Debug-Modul zu verweisen.

Maven und das gwt-maven-plugin so konfiguriert, dass das richtige Modul kompiliert wird

<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>

Durch die Ausführung von "maven clean install" wird das Produktionsmodul kompiliert. In der Entwicklung verwenden Sie "mvn clean install -DgwtDebug", um das gwtDebug-Profil zu aktivieren, das wiederum das Debug-Modul kompiliert.

Natürlich können Sie Ihre ~/.m2/settings.xml so konfigurieren, dass die Eigenschaft "gwtDebug" immer definiert ist...

Der gleiche Gedanke würde auch für Ameisen gelten. Aber ich kenne mich damit nicht so gut aus.


Wenn man anfängt, mit der Idee zu spielen, sein echtes Modul mit einem Debug-Modul zu überlagern, eröffnen sich einem einige sehr coole Möglichkeiten:

  • Sie können Leistungsprotokolle hinzufügen, die in der Produktion aus dem Code entfernt werden.
  • Sie könnten alle Ihre toString()-Methoden so konfigurieren, dass sie im Debug-Modus etwas Nützliches und im Produktionsmodus eine leere Zeichenkette zurückgeben (und so die .js-Größe reduzieren).
  • Sie können die Anzahl der Permutationen reduzieren, indem Sie nur ein Gebietsschema / einen Browser / eine Protokollstufe angeben, um die Kompilierung zu beschleunigen (vergessen Sie aber nicht, von Zeit zu Zeit für andere Gebietsschemata / Browser zu testen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X