Maven线程在运行测试时永远等待

时间:2014-02-24 20:18:46

标签: maven maven-2 maven-3

我在使用maven进行测试时遇到问题。它只适用于项目本身。几周前我没有遇到这个问题,所以我不确定是什么引入它。

我有一个等待线程的堆栈跟踪。我尝试使用maven-2.0.11和3.0.4构建相同的结果。

"main" prio=5 tid=7fb301801000 nid=0x10e6d9000 in Object.wait() [10e6d7000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f3078728> (a java.lang.UNIXProcess)
    at java.lang.Object.wait(Object.java:485)
    at java.lang.UNIXProcess.waitFor(UNIXProcess.java:115)
    - locked <7f3078728> (a java.lang.UNIXProcess)
    at org.codehaus.plexus.util.cli.CommandLineUtils.executeCommandLine(CommandLineUtils.java:151)
    at org.codehaus.plexus.util.cli.CommandLineUtils.executeCommandLine(CommandLineUtils.java:88)
    at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:191)
    at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:98)
    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:200)
    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAllProviders(AbstractSurefireMojo.java:177)
    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:135)
    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:98)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)

有没有人看过这个或有什么想法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

测试可能会在执行期间卡住。

您可以尝试使用surefire插件的debugForkedProcess选项。配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <debugForkedProcess>true</debugForkedProcess>
    </configuration>
</plugin>

然后在您的单元测试代码中添加断点并附加调试器。

另一种选择是为测试添加超时。对于JUnit 4,添加以下内容:

@Test(timeout=10000)
public void testMe()
{
    ...
}

您也可以suggested here全局执行此操作:

@Rule
public Timeout globalTimeout = new Timeout(10000);

然后,如果一个或多个测试卡住,您可以查看测试失败并确切地确定测试失败的位置。虽然如果测试卡在@Before@After中,超时可能无法解决此问题。

相关问题