как развернуть веб-приложение на пристани - PullRequest
0 голосов
/ 12 января 2011

У меня есть веб-приложение (на самом деле приложение gwt), и я хочу развернуть его на сервере Jetty для тестирования селена, я использовал maven, maven-jetty-plugin, gwt-maven-plugin и selenium-maven-plugin,я наконец-то запустил причал и селен, но тесты на селен провалились из-за знаменитой ошибки 404:

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

я не уверен, что моя конфигурация пристани правильная, так как я новичок, вот она (maven-jetty-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>

когда я запустил mvn clean install, я вижу вывод из командного окна:

[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}]

и моя структура папок выглядит следующим образом:

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

вещь, которую я не понимаю, это то, что я вижу страницу index.html прямо в папке 'sample-console-0.1-SNAPSHOT', почему он не может ее найти?это потому, что я установил 'contextPath' неправильно?Я попытался установить его в '/', затем я получил 503 службы недоступна ошибка.кто-нибудь может помочь?большое спасибо !!

1 Ответ

0 голосов
/ 11 февраля 2011

Похоже, вы пытаетесь запустить приложение из каталога webapp, которое не будет работать в приложении GWT.Попробуйте установить в вашем плагине Jetty Maven цель «run-war вместо run», например:

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

Это приведет к запуску compile и gwt-compile.они правильно настроены.

Если ваша конфигурация выглядит следующим образом, вы можете просто запустить mvn clean integration-tests и ваш скрипт будет:

  1. Скомпилировать ваш код
  2. gwt: скомпилируйте ваш код
  3. Создайте файл войны
  4. Запустите Jetty и разверните файл войны на Jetty
  5. Запустите сервер Selenium
  6. Попытайтесь запустить любые тестыв любом подкаталоге пакета интеграции в вашем тестовом каталоге.
...