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.
Réponses
Trop de publicités?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
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>
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");
}
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.
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>