从Maven启动时,Tomcat的备用端口(不是8080)吗?


77

是否有一种简单的方法可以在pom或命令行中为Tomcat指定备用端口。我想在同一台计算机上运行多个项目。


4
mvn -Dmaven.tomcat <版本> .port = <1024–49151> tomcat <版本>:run示例mvn -Dmaven.tomcat7.port = 8585 tomcat7:run在POM.XML <插件> ... <配置> < port> 8585 </ port> </ configuration> </ plugin>
Rafiq

Answers:


109

我知道这个线程很旧,但是…

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

8
绝对! mvn -Dmaven.tomcat.port=8181 tomcat:run
lrkwz 2012年

1
我们应该在哪里运行?
bks4line 2015年

@ bks4line,您好:您可以在选择项目时输入上面的命令,然后转到运行方式选项->运行配置->运行配置->目标
Srinivas Gadilli

32

使用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>

可以在settings.xml中指定吗?如果他们的tomcat在不同的端口上运行,此配置将破坏其他人使用它的能力。
德鲁


28

当我有几个同时运行其集成测试阶段的小型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");
}

9

下面为我​​工作:

        <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>

这与现有答案有何不同?
Leigh

$ {maven.tomcat.port}->我应该在哪里放置maven.tomcat.port的值?

4

您可以通过向其添加属性端口来永久添加端口配置。

<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>

tomcat 7,相同的tomcat7-maven-plugin
iMysak

3
以tomcat7:run的身份运行,而不是tomcat:run的运行

4

从Maven启动时,有一种最佳且简便的方法来更改Tomcat(而非8080)

只需编辑application.properties(如果没有application.properties文件,然后在maven项目的resources目录中创建application.properties文件)文件,然后在
server.port = 8181行下方设置 //您可以选择端口号。


2

如果使用的是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

在此处设置不同的端口。


1

我认为最好和最简单的方法是(如果您的测试已正确绑定到集成阶段):

<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>

1
<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>

0

在花了大约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.xml8081但maven并没有从那里接走。我们需要在configuration现场具体说明。这就是<maven.tomcat.port>8081</maven.tomcat.port>救援的地方。注意:您可以将端口8081更改为您喜欢的其他端口。


0

我知道这是一个非常老的问题,尚无答案。

当我需要将使用外部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/…
Sasha Bond
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.