使用-Dmaven.surefire.debug和-DforkMode = never运行Maven测试

Kam*_*łys 6 java maven

我正在使用Maven和Surefire插件v.2.11开发一个项目.要运行我使用一个测试-Dtest=TestClass#testMethod-DforkMode=never(不DforkMode=never,我不能跑,因为缺乏空间对象堆测试).我已经习惯了,它对我很好.所以我在跑:

mvn -Dtest=TestClass#testMethod test -DforkMode=never
Run Code Online (Sandbox Code Playgroud)

并且测试运行正常.

但是当我跑步的时候

mvn -Dtest=TestClass#testMethod -Dmaven.surefire.debug test -DforkMode=never
Run Code Online (Sandbox Code Playgroud)

它只是跳过调试"等待"部分并且正在执行测试(我无法使用IDE连接). mvn -Dmaven.surefire.debug test对我来说很适合其他项目(我不需要关心fork模式).

任何想法为什么组合forkMode=never-Dmaven.surefire.debug不能按预期工作?

DB5*_*DB5 7

该属性maven.surefire.debug正在设置debugForkedProcesssurefire插件的参数.

该参数的文档内容如下:

将调试器附加到分叉的 JVM.如果设置为"true",则进程将挂起并等待调试器在端口5005上附加.如果设置为其他字符串,则该字符串将附加到argLine,允许您配置任意可调试性选项(不覆盖其他选项)通过argLine参数指定的选项).

因此它只会调试分叉的JVM,这解释了为什么它在测试没有分叉时不起作用.它无法设置已运行的非分叉JVM进程的调试.

使用 mvnDebug

您可以做的是使用mvnDebug,它允许您调试maven进程本身 - 并且因为您的测试也没有被分叉.

即而不是mvn -Dtest=TestClass#testMethod test -DforkMode=never你会执行mvnDebug -Dtest=TestClass#testMethod test -DforkMode=never.默认情况下,它会在启动maven时侦听端口8000.