Maven在运行Spring JUnit测试后挂起

时间:2012-04-25 18:31:11

标签: spring maven junit

使用maven对Spring应用程序进行单元测试后完成构建时遇到问题。我注意到mvn安装没有完成,并且它在运行所有单元测试后似乎挂起。从cmd行开始,如果我运行mvn install,我会完成测试,但构建会挂起

Results :

Tests run: 34, Failures: 0, Errors: 0, Skipped: 0

14:20:15,588 [Thread-3] INFO  GenericApplicationContext  - Closing org.springframework.context.support.GenericApplicationContext@10a3b24: startup date [Wed Apr 25 14:20:08 EDT 2012]; root of context hierarchy
14:20:15,589 [Thread-3] INFO  DefaultListableBeanFactory  - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@16c163f: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,sysModel,alarmList,resourcePool,sysParams,stationHelper,commandTracker,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy
14:20:15,595 [Thread-7] INFO  GenericApplicationContext  - Closing org.springframework.context.support.GenericApplicationContext@c5577c: startup date [Wed Apr 25 14:20:10 EDT 2012]; root of context hierarchy
14:20:15,596 [Thread-7] INFO  DefaultListableBeanFactory  - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@10952e8: defining beans [alarmDao,purgeDao,xactionDao,dataSource,sysModel,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy

这就结束了。两个线程运行,不知道我在那里做了什么。无论如何,要解决问题,我删除了所有的测试并完成了程序的构建。如果我运行mvn install -DskipTests,我就可以完成它。最后,我添加了一个基本上是system.out.println(“hello world”);的JUnit测试。我可以通过注释掉JUnit注释“@RunWith(SpringJUnit4ClassRunner.class)”来安装运行测试并完成安装。我正在使用Spring 3.1.0.RELEASE。

构建的问题来自我在Windows7上的开发机器,但是我们基于Linux(Ubuntu 11.10)。 Hudson CI服务器使用相同的SVN存储库在同一个项目上成功运行Maven install以进行每小时构建。

2 个答案:

答案 0 :(得分:1)

可能你的一个Spring bean正在产生一个线程。使用jconsole连接到卡住的进程,看看有什么问题。您可以通过在违规bean上使用@PreDestroy来解决它,以在关闭时取消线程。

答案 1 :(得分:0)

在Spring应用程序上下文关闭期间,线程之间似乎存在争用。您可以尝试将Spring框架的日志记录调试到调试级别以查看争用的位置,并在可能的情况下将其消除。

如果在应用程序上下文中似乎没有问题,另一个选择是调整插件配置。 surefire插件用于执行测试,它具有在多个线程中运行测试的选项。首先运行带有-X的mvn,看看哪些值用于线程选项(parallel,threadCount,perCoreThreadCount等)。调整surefire插件配置(执行ID为default-test)以确保只有一个线程正在执行,并查看是否可以让{7}在Windows 7上运行。

一旦你在Windows中工作:你当前的surefire配置(可能是超级POM提供的默认配置)在你的CI环境中正常工作。所以我会创建一个profile, activated if running on the Windows 7 environment,并将标识的surefire插件配置移动到配置文件中。