11
votes

Erreur lors de l'exécution d'un gwtestcase à l'aide de plugin Maven GWT

J'ai créé un test qui prolonge Gwtestcase mais je reçois cette erreur: xxx pré>

gwttestmyfirstestescase.java est in / src / test / java, tandis que le module GWT est situé dans src / main / java. Je suppose que cela ne devrait pas être un problème. P>

J'ai tout fait de tout ce qui est requis selon http://mojo.codehaus.org/gwt-maven-plugin/user-gaven/testing.html et bien sûr que mon module GWT a déjà com.google. gwt.core.core indirectement importé. p> xxx pré>

Voici le boîtier de test, situé dans / src / test / java / com / myproject / test / ui p> XXX PRE>

Voici le module GWT que j'essaie de tester, situé dans SRC / MAIN / JAVA / COM / MYPROJECT / MAINMODULE.GWT.XML: P>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.1/distro-source/core/src/gwt-module.dtd">
<module>

    <inherits name='com.myproject.Commons' />

    <source path="site" />

    <source path="com.myproject.test.ui" />

    <set-property name="gwt.suppressNonStaticFinalFieldWarnings" value="true" />

    <entry-point class='com.myproject.site.SiteModuleEntry' />
</module>


2 commentaires

Sans le contenu POM, etc. Il est difficile d'inviter ce que le problème ...


Exécutez des tests dans un processus séparé Voir ma réponse


7 Réponses :


0
votes

Je suis très confiant que cette erreur n'a rien à voir avec Maven Configuration. Ma première hypothèse serait que les tests ne sont pas sur le chemin de compilation GWT ... Je suppose que le code source problématique est: xxx

essayez de changer de: xxx

ou tout ce qui est le chemin approprié.


0 commentaires

5
votes

Le problème était que le test a été exécuté par Surefire au lieu du plug-in GWT-Maven. J'ai dû exclure explicitement mes tests GWT de Surefire Plugin:

<plugin>
       <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>

            <configuration>
                <excludes>
                    <exclude>**/*GwtTest*.java</exclude>
                    <exclude>**/*Gwt*Suite*.java</exclude>
                </excludes>
            </configuration>
</plugin> 


1 commentaires

Veuillez marquer une réponse comme étant la bonne, les questions peuvent donc être fermées.



8
votes

Je ne pense pas que la bonne chose à faire est d'exclure les tests de votre cycle de vie maven. Quel est le point de les écraser? Ce que vous avez à faire est de configurer correctement le plug-in Maven-SureFire afin de le faire fonctionner.

Vous voyez, ce plugin utilise un chargeur de classe système pour rechercher les classes mais gwttestcase a besoin d'un urlclassloader . C'est la raison pour laquelle vous obtenez [avertir] aucune entrée de chemin source; Attendez-vous à des échecs ultérieurs . et le classnotfoundexception de classe . Pas de soucis, cependant. Il est facile de dire à Maven d'utiliser un UrlClassloader à la place: xxx

Veuillez noter le false . Aussi, remarquez que j'ai ajouté les sources de mes tests et des répertoires principaux afin d'autoriser GWT à trouver les classes nécessaires à générer le JavaScript. Vous devrez peut-être le configurer différemment.


1 commentaires

J'ai exclu les classes de test de Surefire Plugin parce que je n'utilise pas le plugin Surefire pour exécuter mes tests. J'utilise un plugin Maven GWT pour cela. J'ai essayé d'utiliser Surefire à un moment donné, mais sans succès. Peut-être que je vais essayer à nouveau d'utiliser Surefire, mais pour l'instant, je reste avec ma configuration actuelle. Merci quand même pour votre réponse.



0
votes

Cette configuration Sunfire a travaillé pour moi.


0 commentaires

9
votes

Pour reproduire la solution utilisée par kevinwong depuis le Maven-GWT -plugin DOC , qui a fonctionné pour moi après avoir perdu plus d'une heure, essayez les autres solutions.

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.6</version>
    <configuration>
      <additionalClasspathElements>
        <additionalClasspathElement>${project.build.sourceDirectory}</additionalClasspathElement>
        <additionalClasspathElement>${project.build.testSourceDirectory}</additionalClasspathElement>
      </additionalClasspathElements>
      <useManifestOnlyJar>false</useManifestOnlyJar>
      <forkMode>always</forkMode>
      <systemProperties>
        <property>
          <name>gwt.args</name>
          <value>-out \${webAppDirectory}</value>
        </property>
      </systemProperties>
    </configuration>
  </plugin>


1 commentaires

Cette configuration crée un dossier appelé \ $ {webappDirectory} . Mais ça ne marche pas si je le change à autre chose. Je ne sais même pas



3
votes

Premièrement exclure les tests GWT à partir de Maven-Surefire-plugin Code>: xxx pré>

puis configure GWT-Maven-plugin Code>: P >

            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <version>2.5.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>test</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                                    <includes>**/*GwtTest.java</includes>
                                    <mode>htmlunit</mode>
            </configuration>
        </plugin>


1 commentaires

Cela a fonctionné pour moi. J'ai des tests unitaires Junit et GWT et cela l'a travaillé.



0
votes

la solution à cette erreur

war {
    // Exclude unneccessery GWT Compiler artifacts
    exclude "**/gwt-unitCache/**"
}

task widgetset << {
    // Create widgetset directory (if needed)
    def created = (new File(gwtBuildDir)).mkdirs()

    // Compile
    ant.java(classname: 'com.google.gwt.dev.Compiler', failOnError: 'yes',  maxmemory: '1000m', fork: 'true')
            {
                classpath {
                    pathElement(path: configurations.compile.asPath)
                    pathElement(path: sourceSets.main.runtimeClasspath.asPath)
                    sourceSets.main.java.srcDirs.each {
                        pathelement(location: it.absolutePath)
                    }
                }

                arg(line: '-war ' + gwtBuildDir)
                arg(line: '-logLevel INFO')
                arg(line: '-style OBF')
                arg(line: '-localWorkers 2')
                arg(line: widgetsetClass)

//                jvmarg(value: '-Djava.awt.headless=true')
//                jvmarg(value: '-XX:MaxPermSize=256M')
//                jvmarg(value: '-Xmx500M')
            }
}


// Require widgetset compilation before WAR is built
war.dependsOn widgetset


0 commentaires