2011-01-12 8 views
0

Ich habe eine Web-App (eigentlich eine gwt app), und ich möchte es auf Jetty-Server für Selen-Test bereitstellen, habe ich maven, maven-jetty-plugin, gwt-maven-plugin und Selen-maven-Plugin, ich habe endlich Steg und Selen Sever läuft aber die Selen Tests fehlschlagen, weil der berühmten 404 eror:Wie Web App an Jetty zu implementieren

com.thoughtworks.selenium.SeleniumException: XHR ERROR: URL = http://127.0.0.1:8080/index.html Response_Code = 404 Error_Message = Not Found 

im nicht sicher, ob meine Anlegestelle Konfiguration, da im Art neu, es ist richtig hier ist es (maven-Anlegestelle-Plugin):

<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 

    <configuration> 
    <contextPath>/sample-console</contextPath> 
    <webAppSourceDirectory>${basedir}/target/${project.artifactId}-${project.version}</webAppSourceDirectory> 
    <webXml>${basedir}/target/${project.artifactId}-${project.version}/WEB-INF/web.xml</webXml> 
    </configuration> 
      <executions> 
      <execution> 
       <id>start-jetty</id> 
       <phase>pre-integration-test</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
       <configuration> 
        <daemon>true</daemon> 
       </configuration> 
      </execution> 
      <execution> 
       <id>stop-jetty</id> 
       <phase>post-integraion-test</phase> 
       <goals> 
        <goal>stop</goal> 
       </goals> 
      </execution> 
      </executions> 
</plugin> 

wenn ich mvn saubere Installation lief, i die Ausgabe von c sehen ommand Fenster:

[INFO] Configuring Jetty for project: DYI sample Console 
[INFO] Webapp source directory = /Users/dyi/Documents/workspace/sample/console/target/sample-console-0.1-SNAPSHOT 
[INFO] Reload Mechanic: automatic 
[INFO] Classes = /Users/dyi/Documents/workspace/sample/console/target/classes 
log4j:WARN No appenders could be found for logger (org.mortbay.log). 
log4j:WARN Please initialize the log4j system properly. 
[INFO] Context path = /sample-console 
[INFO] Tmp directory = determined at runtime 
[INFO] Web defaults = org/mortbay/jetty/webapp/webdefault.xml 
[INFO] Web overrides = none 
[INFO] web.xml file = /Users/dyi/Documents/workspace/sample/console/target/sample-console-0.1-SNAPSHOT/WEB-INF/web.xml 
[INFO] Webapp directory = /Users/dyi/Documents/workspace/sample/console/target/sample-console-0.1-SNAPSHOT 
[INFO] Starting jetty 6.1.22 ... 
[INFO] Started Jetty Server 
[INFO] [selenium:start-server {execution: start}] 

und meine Ordnerstruktur sieht wie folgt aus:

--sample/ 
    -- console/ 
     -- src/ 
     -- target/ 
      -- classes/ 
      -- sample-console-0.1-SNAPSHOT/ 
        -- css/ 
        -- images/ 
        -- img/ 
        -- index.html 
        -- js/ 
        -- META-INF/ 
        -- security/ 
        -- test.html 
        -- WEB-INF/ 
         -- classes/ 
         -- lib/ 
         -- web.xml 

das, was ich nicht verstehe ist, kann ich die index.html-Seite wird genau dort in den Ordner ‚Proben- Konsole-0.1-SNAPSHOT ', warum kann es nicht finden? Ist das so, weil ich den 'contextPath' falsch gesetzt habe? Ich habe versucht, es auf '/', dann habe ich 503 Service nicht verfügbar Fehler. kann jemand helfen? vielen Dank!!

Antwort

0

Es klingt, als ob Sie versuchen, die App aus dem Webapp-Verzeichnis auszuführen, was in einer GWT-App nicht funktioniert. Versuchen Sie, das Ziel in Ihrem Anlegesteg Maven Plugin Einstellung ausgeführt werden soll-Krieg statt laufen, wie folgt aus:

<modelVersion>4.0.0</modelVersion> 
<groupId>org.proj.web</groupId> 
<artifactId>gwtapp</artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>gwtapp</name> 

<properties> 
    ... 
</properties> 
<dependencies> 
    ... 
</dependencies> 
<build> 
    <plugins> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.5</version> 
      <configuration> 
       <excludes> 
        <exclude>**/integration/**</exclude> 
       </excludes> 
      </configuration> 
      <executions> 
       <execution> 
        <id>integration-tests</id> 
        <phase>integration-test</phase> 
        <goals> 
         <goal>test</goal> 
        </goals> 
        <configuration> 
         <skip>false</skip> 
         <excludes> 
          <exclude>none</exclude> 
         </excludes> 
         <includes> 
          <include>**/integration/** 
        </include> 
         </includes> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <!-- Selenium and integration testing support --> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>selenium-maven-plugin</artifactId> 
      <version>1.1</version> 
      <executions>     
       <execution> 
        <phase>pre-integration-test</phase> 
        <goals> 
         <goal>start-server</goal> 
        </goals> 
        <configuration> 
         <background>true</background> 
        </configuration> 
       </execution> 
       <execution> 
        <id>stop</id> 
        <phase>post-integration-test</phase> 
        <goals> 
         <goal>stop-server</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>7.2.2.v20101205</version> 
      <configuration> 
       <webAppConfig> 
        <contextPath>/${project.name}</contextPath> 
       </webAppConfig> 
       <scanIntervalSeconds>5</scanIntervalSeconds> 
       <stopPort>9966</stopPort> 
       <stopKey>foo</stopKey> 
       <connectors> 
        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> 
         <port>9080</port> 
         <maxIdleTime>60000</maxIdleTime> 
        </connector> 
       </connectors> 
      </configuration> 
      <executions> 
       <execution> 
        <id>start-jetty</id> 
        <phase>pre-integration-test</phase> 
        <goals> 
         <goal>run-war</goal> 
        </goals> 
        <configuration> 
         <daemon>true</daemon> 
        </configuration> 
       </execution> 
       <execution> 
        <id>stop-jetty</id> 
        <phase>post-integration-test</phase> 
        <goals> 
         <goal>stop</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>gwt-maven-plugin</artifactId> 
      <version>2.1.0-1</version> 
      <configuration> 
       <logLevel>INFO</logLevel> 
       <style>PRETTY</style> 
       <runTarget>/gwtapp.html</runTarget> 
       <hostedWebapp>${project.build.directory}/${project.build.finalName}</hostedWebapp> 
       <modules> 
        <module>${project.groupId}.gwtapp</module> 
       </modules> 
       <copyWebapp>true</copyWebapp> 
      </configuration> 
      <executions> 
       <execution> 
        <id>gwtcompile</id> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory> 
</build> 

Dies wird die Kompilierung verursachen und GWT-kompilieren zu laufen, vorausgesetzt, Sie haben diejenigen, konfiguriert. korrekt.

Wenn Sie Ihre Konfiguration wie folgt aussieht, können Sie einfach laufen mvn clean integration-tests und Ihr Skript:

  1. Stellen Sie sich Ihren Code
  2. gwt: kompilieren Sie den Code
  3. Erstellen Sie die WAR-Datei
  4. Start Anlegesteg und stellen Sie die WAR-Datei an den Anlegesteg
  5. Starten Sie den Selenium-Server
  6. versuchen Sie, alle Tests in einem Unterverzeichnis von auszuführen das Integrationspaket in Ihrem Testverzeichnis.