Запуск mvn install с параллельным запуском плагина tomcat

В проекте есть модульные тесты и html-тесты внешнего интерфейса, для которых требуется запуск веб-сервера. Чтобы mvn install пройти хорошо, мне нужно, чтобы оба этих теста прошли хорошо. Я использую встроенный сервер tomcat, который запускается через плагин tomcat для maven:

mvn tomcat7:run

Итак, я запускаю tomcat (он нужен для моих html-тестов интерфейса), затем пытаюсь запустить: mvn install в командной строке, но получаю следующую ошибку:

D:\PROJECTS\SpringMvcExample>mvn install
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:741]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)

в то же время, когда tomcat запущен, я могу запустить mvn install через плагин Intellij Idea для maven, и он отлично работает без каких-либо ошибок.

Мой вопрос, как настроить, чтобы запустить maven в командной строке?

Это многомодульный проект maven, вот pom.xml веб-модуля:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 

http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.savdev</groupId>
    <artifactId>SpringMvcExample</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>
<artifactId>web</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SpringMvcExample Webapp</name>

<properties>
    <spring.version>3.2.4.RELEASE</spring.version>
    <selenium.version>2.37.1</selenium.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <!--modules dependency start-->
    <dependency>
        <groupId>com.savdev</groupId>
        <artifactId>model</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.savdev</groupId>
        <artifactId>service</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--modules dependency end-->

    <!--web dependency start-->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>runtime</scope>
    </dependency>
    <!--web dependency end-->

    <!--tests dependency-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
        <scope>test</scope>
    </dependency>
    <!--<dependency>-->
        <!--<groupId>org.mockito</groupId>-->
        <!--<artifactId>mockito-all</artifactId>-->
        <!--<version>1.9.5</version>-->
        <!--<scope>test</scope>-->
    <!--</dependency>-->
    <dependency>
        <groupId>net.sourceforge.jwebunit</groupId>
        <artifactId>jwebunit-core</artifactId>
        <version>3.1</version>
        <scope>test</scope>
    </dependency>
    <!--<dependency>-->
        <!--<groupId>net.sourceforge.jwebunit</groupId>-->
        <!--<artifactId>jwebunit-htmlunit-plugin</artifactId>-->
        <!--<version>3.1</version>-->
    <!--</dependency>-->
    <!--<dependency>-->
        <!--<groupId>net.sourceforge.htmlunit</groupId>-->
        <!--<artifactId>htmlunit</artifactId>-->
        <!--<version>2.13</version>-->
    <!--</dependency>-->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>${selenium.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-firefox-driver</artifactId>
        <version>${selenium.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-chrome-driver</artifactId>
        <version>${selenium.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-htmlunit-driver</artifactId>
        <version>${selenium.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <finalName>SpringMvcExample</finalName>
    <!--to run into debug mode set:-->
    <!--export MAVEN_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n-->
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <path>/SpringMvcExample</path>
                <url>http://localhost:8080/manager/text</url>
                <server>tomcat7</server>
            </configuration>
        </plugin>
    </plugins>
</build>


person Alexandr    schedule 10.11.2013    source источник
comment
пожалуйста, включите свой pom.xml.   -  person Michał Rybak    schedule 10.11.2013


Ответы (1)


Попробуйте привязать tomcat run/shutdown к подходящим <execution> фазам:

<phase>pre-integration-test</phase>
<goals>
  <goal>run</goal>
</goals>

и

<phase>post-integration-test</phase>
<goals>
  <goal>shutdown</goal>
</goals>

При такой настройке вы не должны запускать tomcat вручную (т. е. с помощью mvn tomcat7:run). Он должен запускаться автоматически перед тестами и выключаться после них.

person Michał Rybak    schedule 10.11.2013