是否有一种简单的方法可以在pom或命令行中为Tomcat指定备用端口。我想在同一台计算机上运行多个项目。
Answers:
我知道这个线程很旧,但是…
Greg提供的文档链接很有趣:
port:
The port to run the Tomcat server on.
Type: int
Required: No
Expression: ${maven.tomcat.port}
Default: 8080
表达式是maven在其代码中获取值的方式。它可能来自配置文件,也可能来自命令行。
你可以跑
mvn -Dmaven.tomcat.port=8181 tomcat:run-war
mvn -Dmaven.tomcat.port=8181 tomcat:run
使用tomcat-maven-plugin上给出的语法,您可以直接指定端口:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<server>tomcat-development-server</server>
<port>9966</port>
</configuration>
</plugin>
当我有几个同时运行其集成测试阶段的小型servlet时,我遇到了类似的问题,这成为问题,因为它们被配置为使用相同的端口。但是由于build-helper-maven-plugin:reserve-network-port目标,可以获取可用的随机端口号。然后,我可以创建一个包含http:// localhost:[port] / [servletname]的URL,该URL将被馈送到Java测试类中。
检索随机端口:
<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>
用端口启动tomcat
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<configuration>
<port>${tomcat.http.port}</port>
<useTestClasspath>true</useTestClasspath>
</configuration>
....
</plugin>
将URL馈送到由故障安全插件运行的Java集成测试
<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>
Java代码
public class DownloadAreaIT {
private static final String URL = System.getProperty("integration-test.url");
}
下面为我工作:
<properties>
<maven.tomcat.port>9090</maven.tomcat.port>
</properties>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>${maven.tomcat.port}</port>
</configuration>
</plugin>
您可以通过向其添加属性端口来永久添加端口配置。
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<port>9090</port>
</configuration>
</plugin>
</plugins>
</build>
从Maven启动时,有一种最佳且简便的方法来更改Tomcat(而非8080)
只需编辑application.properties(如果没有application.properties文件,然后在maven项目的resources目录中创建application.properties文件)文件,然后在
server.port = 8181行下方设置 //您可以选择端口号。
如果使用的是maven tomcat插件,则可以通过在pom.xml中添加插件配置块来指定context.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>
使用的默认context.xml文件位于src/main/webapp/META-INF/context.xml
。
在此处设置不同的端口。
我认为最好和最简单的方法是(如果您的测试已正确绑定到集成阶段):
<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>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<server>tomcat-development-server</server>
<port>9090</port>
</configuration>
</plugin>
在花了大约3个小时的时间来更改POM.xml中的端口之后,这是我的最新解决方案。
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<maven.tomcat.port>8081</maven.tomcat.port>
</configuration>
</plugin>
使用justport
不起作用,因为这不是您可以设置的属性<configuration>
。我们需要了解导致问题的原因。就我而言,错误8080
是占用了端口。我将端口更改为server.xml
,8081
但maven并没有从那里接走。我们需要在configuration
现场具体说明。这就是<maven.tomcat.port>8081</maven.tomcat.port>
救援的地方。注意:您可以将端口8081更改为您喜欢的其他端口。
我知道这是一个非常老的问题,尚无答案。
当我需要将使用外部tomcat的旧项目转换为使用tomcat7-maven-plugin的嵌入式tomcat时,我也遇到了类似的问题。
我需要构建一个可执行jar。但是现有的答案对我不起作用……无论我java -jar project-name.jar
追求什么mvn package
。它总是在8080
我不想要的端口上运行...然后我搜索文档可执行战争,
而我固定的只是在命令中添加一个参数
java -jar my_project.jar -httpPort 9091
在文档中:
用法:java -jar [您的exec war jar的路径] ...
-httpPort要使用的http端口
-httpsPort使用的https端口...
希望它有用。
java -Dserver.port=8888 -jar target/demo-0.0.1-SNAPSHOT.war
或者java -Dserver.port=8888 -jar target/demo-0.0.1-SNAPSHOT.jar
如果使用spring boot(docs.spring.io/spring-boot/docs/current/reference/htmlsingle/…)