Maven是否启动了两个不同的JVM?

时间:2018-12-27 09:02:14

标签: java maven

我有一个项目,其中使用Java后端(X),需要启动另一个Maven项目(Y)(类似mvn test)。使用ProcessBuilder可以正常工作。

我最近还添加了JMX配置来监视Y-JVM,因为可以运行多个Y项目。 JMX配置作为环境变量MAVEN_OPS传递,我有一种方法来生成范围内的唯一随机端口。我还可以从X后端通过随机生成的端口连接到JMX,但是问题是,这仅在项目处于构建状态时才有效。在构建完成之后,行家应该“启动”服务,我得到了这个错误:

  

[INFO] --- gatling-maven-plugin:2.2.4:execute(test1)@ xxxxxxx-由于CompileSetup不兼容,因此修剪了先前的分析源。

     

[INFO] -------------------------------------------- ----------------------------

     

[INFO]内置故障

     

[INFO] -------------------------------------------- ----------------------------

     

[INFO]总时间:15.388 s

     

[INFO]完成于:2018-12-27T09:31:10 + 01:00

     

[INFO]最终内存:15M / 363M

     

[INFO] -------------------------------------------- ----------------------------

     

[错误]无法在项目xxxxxxx上执行目标io.gatling:gatling-maven-plugin:2.2.4:execute(test1):Xxxxxx失败。进程退出并出现错误:1(退出值:1)-> [帮助1]   [错误]

     

[ERROR]要查看错误的完整堆栈跟踪,请使用-e开关重新运行Maven。

     

[错误]使用-X开关重新运行Maven以启用完整的调试日志记录。

     

[错误]

     

[ERROR]有关错误和可能的解决方案的更多信息,请阅读以下文章:

     

[错误] [帮助1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException   错误:代理抛出异常:java.rmi.server.ExportException:端口已在使用中:xxxx;嵌套的   例外是:java.net.BindException:地址已在使用中(绑定失败)

在此之前,我能够使用JMX获得指标。所以现在,我的问题是,maven在构建和执行状态下使用不同的JVM吗?为什么我的端口已被使用??

2 个答案:

答案 0 :(得分:1)

每个Java程序都将在其自己的 JVM 中执行,因此回答您的问题是,Maven将在其自己的JVM中执行。

在后端详细说明,是春季启动还是其他应用程序。您可能需要为每个后端明确定义端口。您在Gatling上下文中需要任何帮助吗,正如我在代码段中看到的Gatling日志一样。

答案 1 :(得分:0)

在项目Y上创建唯一范围的端口,并不能保证与项目X所使用的端口不会发生冲突。除了预先创建一系列端口之外,您还可以在需要时动态创建它们连接到他们。只需确保捕获任何异常,然后使用其他端口重试即可。例如。尝试连接到8080,如果连接失败,则尝试8081,然后尝试8082,直到建立连接。