73 votes

Port alternatif pour Tomcat (pas 8080) lors du démarrage avec Maven ?

Existe-t-il un moyen simple de spécifier un port alternatif pour Tomcat dans le fichier pom ou sur la ligne de commande ? J'aimerais que plusieurs projets soient exécutés sur la même machine.

105voto

Vincent Demeester Points 1531

Je sais que ce fil est vieux mais

Le lien vers la documentation, fourni par Greg, est intéressant :

port:
The port to run the Tomcat server on.
    Type: int
    Required: No
    Expression: ${maven.tomcat.port}
    Default: 8080

L'expression est ce que maven utilise pour obtenir la valeur dans son code. Elle peut provenir d'un fichier de configuration, ou de la ligne de commande.

Tu pourrais courir

mvn -Dmaven.tomcat.port=8181 tomcat:run-war

29voto

Greg Points 61

En utilisant la syntaxe donnée sur tomcat-maven-plugin vous pouvez spécifier directement le port :

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>tomcat-maven-plugin</artifactId>            
  <configuration>          
    <server>tomcat-development-server</server>
    <port>9966</port>
  </configuration>
</plugin>

28voto

redsolo Points 313

J'ai eu un problème similaire lorsque j'avais plusieurs petites servlets qui exécutaient leur phase de test d'intégration en même temps, ce qui est devenu un problème car celles-ci étaient configurées pour utiliser le même port. Mais grâce à la build-helper-maven-plugin:reserve-network-port il est possible d'obtenir des numéros de port aléatoires qui sont disponibles. Ensuite, je peux créer une URL contenant http://localhost :[port]/[nom du servlet] qui est s'alimenter en la classe de test Java.

Récupération du port aléatoire :

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
    <execution>
        <id>reserve-network-port</id>
        <goals>
            <goal>reserve-network-port</goal>
        </goals>
        <phase>pre-integration-test</phase>
        <configuration>
            <portNames>
                <portName>tomcat.http.port</portName>
            </portNames>
        </configuration>
    </execution>
</executions>

Démarrer tomcat avec le port

<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<configuration>
    <port>${tomcat.http.port}</port>
    <useTestClasspath>true</useTestClasspath>
</configuration>
....
</plugin>

Alimentation de l'URL au test d'intégration Java qui est exécuté par le plugin failsafe.

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12.3</version>
....
<configuration>
    <systemPropertyVariables>
        <integration-test.url>http://localhost:${tomcat.http.port}/${project.build.finalName}/</integration-test.url>
    </systemPropertyVariables>
</configuration>
</plugin>

Code Java

public class DownloadAreaIT {
    private static final String URL = System.getProperty("integration-test.url");
}

2voto

Pascal Thivent Points 295221

Si vous utilisez le plugin maven tomcat, vous pouvez spécifier un context.xml en ajoutant un bloc de configuration de plugin au pom.xml :

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>tomcat-maven-plugin</artifactId>
        <version>1.0-beta-1</version>
        <configuration>
          <mode>both</mode>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

Le fichier context.xml utilisé par défaut se trouve à l'adresse suivante src/main/webapp/META-INF/context.xml .

Définissez des ports différents à cet endroit.

1voto

MariuszS Points 7842

Je pense que la meilleure et la plus simple est la suivante (si vos tests sont correctement liés à la phase d'intégration) :

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>reserve-network-port</id>
            <goals>
                <goal>reserve-network-port</goal>
            </goals>
            <phase>pre-integration-test</phase>
            <configuration>
                <portNames>      
                    <portName>maven.tomcat.port</portName>
                </portNames>
            </configuration>
        </execution>
    </executions>
</plugin>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X