Запустите Jetty с внешней войной изнутри (JUnitRunner), интеграционные тесты

Мне нужно запустить причал с внешним (возможно, удаленным) файлом .war (приложение T) в качестве ресурса веб-приложения изнутри моего теста, чтобы моя тестируемая система (приложение A) могла подключаться к нему для выполнения вызовов через его интерфейс REST .

Я нашел много руководств о том, как запустить пристань для войны с тестируемой системой (приложение A). Я также нашел кое-что о том, как запустить maven-причал для внешнего .war (приложение T) как часть цикла сборки. Однако я не могу понять, возможно ли это сделать.

В идеале я добавляю проект AppT как зависимость от maven и получаю к нему доступ через путь к классам.


person Pete    schedule 21.06.2012    source источник


Ответы (1)


Что ж, я не знаю, как бы вы это сделали, если бы это был удаленный файл войны (вам, вероятно, нужно было бы загрузить его перед запуском плагина пристани), но вот как это сделать, когда вы он уже есть где-то в вашей файловой системе:

        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${version.jetty}</version>
            <configuration>

                <contextHandlers>
                    <contextHandler implementation="org.eclipse.jetty.webapp.WebAppContext">
                        <war>${project.build.directory}/webapps/foo-bar.war</war>
                        <contextPath>/foo</contextPath>
                    </contextHandler>
                </contextHandlers>

            </configuration>
        </plugin>

Я советую добавить эту войну как зависимость от scope: provided.

<dependencies>

    <!-- Webapps which will not be included in the final WAR artifact: -->
    <dependency>
        <groupId>com.foo.bar</groupId>
        <artifactId>foo-bar</artifactId>
        <version>${version.foo.bar}</version>
        <type>war</type>
        <scope>provided</scope>
    </dependency>

</dependencies>

Кроме того, вам, скорее всего, понадобится что-то вроде:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.3</version>

            <executions>
                <execution>
                    <!-- Used to copy the foo bar war to the webapps folder -->
                    <id>copy-dependency-foo-bar</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>

                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.foo.bar</groupId>
                                <artifactId>foo-bar</artifactId>
                                <version>${version.foo.bar}</version>
                                <type>war</type>
                                <overWrite>true</overWrite>
                                <outputDirectory>${project.build.directory}/webapps</outputDirectory>
                                <destFileName>foo-bar.war</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Этот последний бит выше гарантирует, что разрешенный артефакт будет скопирован в подпапку webapps вашего целевого каталога до того, как плагин Jetty попытается его загрузить.

person carlspring    schedule 21.06.2012
comment
Спасибо за работу, которую вы вложили в это, но я боюсь, что вы неправильно прочитали мой вопрос ... Я также нашел кое-что о том, как использовать maven start jetty для внешнего .war. Ваш путь хорошо описан здесь: javasplitter.blogspot.de / 2012/01 / Но я не этого хочу. - person Pete; 21.06.2012
comment
На самом деле, я не понимаю, какую часть из того, что вы описали, нельзя делать так. У вас не может быть теста, который заставит Jetty запуститься. Однако у вас может быть несколько <contextHandler/>-s для разных файлов войны. Если вы сделаете свой war-файл для приложения T доступным в своем репозитории, я действительно не вижу проблемы в том, чтобы сделать это таким образом. Если я все еще не понял вас, возможно, вы могли бы доработать свой вопрос. - person carlspring; 21.06.2012