0

我使用 Maven 的build-helper-maven-plugin目标reserve-network-port是稍后在我的 Maven 构建中分配端口以启动 Cargo 容器,以运行一些集成测试

问题是,即使该端口似乎已被插件打开并保留,Cargo 容器也无法启动,告诉我分配的端口已在使用中。这个错误是随机发生的,所以很难重现

当我在本地运行 Maven 构建时它可以工作,但是当我在 Jenkins 的服务器上运行它时通常会失败

这是我的reserve-network-port配置:

<plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>build-helper-maven-plugin</artifactId>
   <version>${build-helper-maven-plugin.version}</version>
   <executions>
      <execution>
         <id>reserve-cargo-network-ports</id>
         <phase>pre-integration-test</phase>
         <goals>
            <goal>reserve-network-port</goal>
         </goals>
         <configuration>
            <minPortNumber>42000</minPortNumber>
            <maxPortNumber>42999</maxPortNumber>
            <randomPort>true</randomPort>
            <portNames>
               <portName>cargo.debug.port</portName>
               <portName>cargo.rmi.port</portName>
               <portName>cargo.servlet.port</portName>
               <portName>cargo.tomcat.ajp.port</portName>
            </portNames>
         </configuration>
      </execution>
   </executions>
</plugin>

这是我的货物容器的配置部分

<configuration>
   <configuration>
      <home>${cargo.configuration.home}</home>
      <properties>
         <cargo.logging>medium</cargo.logging>
         <cargo.rmi.port>${cargo.rmi.port}</cargo.rmi.port>
         <cargo.servlet.port>${cargo.servlet.port}</cargo.servlet.port>
         <!-- The following JVM arguments are only applied to non-embedded containers -->
         <cargo.start.jvmargs>${cargo.debug}
                                    ${jvmOptions}
                                    -Dcom.sun.management.jmxremote.authenticate=false
                                    -Dcom.sun.management.jmxremote.local.only=false
                                    -Dcom.sun.management.jmxremote.port=${failsafe.sa.management.port}
                                    -Dcom.sun.management.jmxremote.ssl=false</cargo.start.jvmargs>
         <cargo.tomcat.ajp.port>${cargo.tomcat.ajp.port}</cargo.tomcat.ajp.port>
      </properties>
      <type>standalone</type>
   </configuration>
</configuration>

最后是我在启动容器时遇到的错误:

09-Dec-2021 01:36:15.570 SEVERE [main] org.apache.catalina.core.StandardServer.await Failed to create server shutdown socket on address [localhost] and port [42130] (base port [42130] and offset [0])
    java.net.BindException: Address already in use (Bind failed)
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
        at java.net.ServerSocket.bind(ServerSocket.java:390)
        at java.net.ServerSocket.<init>(ServerSocket.java:252)
        at org.apache.catalina.core.StandardServer.await(StandardServer.java:584)
        at org.apache.catalina.startup.Catalina.await(Catalina.java:864)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:810)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)

有谁知道为什么港口的预订失败?

还有其他替代方法可以使用它build-helper-maven-plugin来保留端口吗?

4

0 回答 0