2012-03-21 88 views
3

我遇到一个奇怪的问题,从maven运行单元测试。如果逐个运行,我有一套完美的单元测试。但是,当我从maven运行(mvn测试)它挂起(块永远)。maven测试挂起

它总是挂在本次测试使用的A类中的同一点(相同的测试类)。我尝试从A.class中删除日志创建,测试开始成功运行。这是该行:

private static final Logger log = LoggerFactory.getLogger(A.class); 

这里的线程转储:

"main" prio=6 tid=0x00446c00 nid=0x1278 runnable [0x00a2f000] 
    java.lang.Thread.State: RUNNABLE 
     at java.lang.ProcessImpl.waitFor(Native Method) 
     at org.codehaus.plexus.util.cli.CommandLineUtils.executeCommandLine(CommandLineUtils.java:173) 
     at org.codehaus.plexus.util.cli.CommandLineUtils.executeCommandLine(CommandLineUtils.java:114) 
     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:231) 
     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.runSuitesForkOnce(ForkStarter.java:125) 
     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:109) 
     at org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugin.java:619) 
     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:319) 
     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

ThreadDump来自maven进程。它表明,一个命令行过程被产生。 – 2012-03-21 14:57:20

+0

Maven在子进程中产生测试 - 你能得到这个子进程的线程转储吗? – Kkkev 2012-03-21 17:54:59

回答

0

可能是一个资源死锁?考虑到另一个产生的Maven进程的评论,这可能是一个迹象表明应该去哪里。你可以试着把你的测试同步到某处(或所有的方法),看看它是否消失。如果是这样,那么它可能是死锁。