【问题标题】:Maven test does not completeMaven 测试未完成
【发布时间】:2011-06-17 18:52:16
【问题描述】:

当我运行 mvn 测试 Maven 成功运行所有测试,然后进入等待无限循环 我在任务管理器中看到一个 java 进程,我必须在 maven 返回此错误消息之前将其杀死

测试运行:3,失败:0,错误:0,跳过:0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:33.949s
[INFO] Finished at: Fri Jun 17 14:50:01 EDT 2011
[INFO] Final Memory: 5M/247M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.
4:test (default-test) on project EDIFileHandling: There are test failures.
[ERROR]
[ERROR] Please refer to c:\code\target\surefire-reports for the individual test
results.

任何帮助表示赞赏。

谢谢

R

C:\Users\Raghuveer.Rao>jstack 7256 2011-06-17 15:24:55 Full thread dump Java HotSpot(TM) Client VM (20.0-b11 mixed mode, sharing):

“Thread-2”prio=6 tid=0x03ed3000 nid=0x14d0 等待监视器条目 [0x04ddf00 0] java.lang.Thread.State: BLOCKED (在对象监视器上) 在 org.hsqldb.Session.close(未知来源) - 等待锁定 (一个 org.hsqldb.Session) 在 org.hsqldb.SessionManager.closeAllSessions(未知来源) - 锁定 (一个 org.hsqldb.SessionManager) 在 org.hsqldb.Database.close(未知来源) 在 org.hsqldb.StatementCommand.getResult(未知来源) 在 org.hsqldb.StatementCommand.execute(未知来源) 在 org.hsqldb.Session.executeCompiledStatement(未知来源) 在 org.hsqldb.Session.executeDirectStatement(未知来源) 在 org.hsqldb.Session.execute(未知来源) - 锁定 (一个 org.hsqldb.Session) 在 org.hsqldb.jdbc.JDBCStatement.fetchResult(未知来源) 在 org.hsqldb.jdbc.JDBCStatement.execute(未知来源) - 锁定 (一个 org.hsqldb.jdbc.JDBCStatement) 在 org.springframework.jdbc.datasource.embedded.AbstractEmbeddedDatabase Configurer.shutdown(AbstractEmbeddedDatabaseConfigurer.java:42) 在 org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory。 shutdownDatabase(EmbeddedDatabaseFactory.java:184) 在 org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryB ean.destroy(EmbeddedDatabaseFactoryBean.java:57) 在 org.springframework.beans.factory.support.DisposableBeanAdapter.destr oy(DisposableBeanAdapter.java:184) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroyBean(DefaultSingletonBeanRegistry.java:487) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroySingleton(DefaultSingletonBeanRegistry.java:463) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroySingletons(DefaultSingletonBeanRegistry.java:431) - 锁定 (一个 java.util.LinkedHashMap) 在 org.springframework.context.support.AbstractApplicationContext.destro yBeans(AbstractApplicationContext.java:1048) 在 org.springframework.context.support.AbstractApplicationContext.doClos e(AbstractApplicationContext.java:1022) 在 org.springframework.context.support.AbstractApplicationContext$3.run( AbstractApplicationContext.java:940)

“Thread-1”prio=6 tid=0x03ed2c00 nid=0x1fe0 等待监视器条目 [0x04d8f00 0] java.lang.Thread.State: BLOCKED (在对象监视器上) 在 org.hsqldb.SessionManager.closeAllSessions(未知来源) - 等待锁定 (一个 org.hsqldb.SessionManager) 在 org.hsqldb.Database.close(未知来源) 在 org.hsqldb.StatementCommand.getResult(未知来源) 在 org.hsqldb.StatementCommand.execute(未知来源) 在 org.hsqldb.Session.executeCompiledStatement(未知来源) 在 org.hsqldb.Session.executeDirectStatement(未知来源) 在 org.hsqldb.Session.execute(未知来源) - 锁定 (一个 org.hsqldb.Session) 在 org.hsqldb.jdbc.JDBCStatement.fetchResult(未知来源) 在 org.hsqldb.jdbc.JDBCStatement.execute(未知来源) - 锁定 (一个 org.hsqldb.jdbc.JDBCStatement) 在 org.springframework.jdbc.datasource.embedded.AbstractEmbeddedDatabase Configurer.shutdown(AbstractEmbeddedDatabaseConfigurer.java:42) 在 org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory。 shutdownDatabase(EmbeddedDatabaseFactory.java:184) 在 org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryB ean.destroy(EmbeddedDatabaseFactoryBean.java:57) 在 org.springframework.beans.factory.support.DisposableBeanAdapter.destr oy(DisposableBeanAdapter.java:184) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroyBean(DefaultSingletonBeanRegistry.java:487) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroySingleton(DefaultSingletonBeanRegistry.java:463) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroySingletons(DefaultSingletonBeanRegistry.java:431) - 锁定 (一个 java.util.LinkedHashMap) 在 org.springframework.context.support.AbstractApplicationContext.destro yBeans(AbstractApplicationContext.java:1048) 在 org.springframework.context.support.AbstractApplicationContext.doClos e(AbstractApplicationContext.java:1022) 在 org.springframework.context.support.AbstractApplicationContext$3.run( AbstractApplicationContext.java:940)

“内存不足检测器”守护进程 prio=6 tid=0x01bdac00 nid=0x1eb0 可运行 [0x000000 00] java.lang.Thread.State: 可运行

“C1 CompilerThread0”守护进程prio=10 tid=0x01bc8400 nid=0x18e8 等待条件 在 [0x00000000] java.lang.Thread.State: 可运行

“附加监听器”守护进程prio=10 tid=0x01bc5400 nid=0x1ac0 等待条件 [0x00000000] java.lang.Thread.State: 可运行

“信号调度程序”守护进程prio=10 tid=0x01bc2400 nid=0x1fbc 可运行[0x0000000 0] java.lang.Thread.State: 可运行

“终结器”守护进程 prio=8 tid=0x01bbb800 nid=0x1c00 in Object.wait() [0x03cdf000 ] java.lang.Thread.State:等待(在对象监视器上) 在 java.lang.Object.wait(本机方法) - 等待 (java.lang.ref.ReferenceQueue$Lock) 在 java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - 锁定 (一个 java.lang.ref.ReferenceQueue$Lock) 在 java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) 在 java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

“引用处理程序”守护进程 prio=10 tid=0x01bba000 nid=0x810 in Object.wait() [0x 03c8f000] java.lang.Thread.State:等待(在对象监视器上) 在 java.lang.Object.wait(本机方法) - 等待 (java.lang.ref.Reference$Lock) 在 java.lang.Object.wait(Object.java:485) 在 java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - 锁定 (一个 java.lang.ref.Reference$Lock)

“main”prio=6 tid=0x00e29800 nid=0x1e20 in Object.wait() [0x001bf000] java.lang.Thread.State:等待(在对象监视器上) 在 java.lang.Object.wait(本机方法) - 等待 (一个 org.springframework.context.support.Abstract tApplicationContext$3) 在 java.lang.Thread.join(Thread.java:1186) - 锁定 (一个 org.springframework.context.support.AbstractApp licationContext$3) 在 java.lang.Thread.join(Thread.java:1239) 在 java.lang.ApplicationShutdownHooks.runHooks(ApplicationShutdownHooks. 爪哇:79) 在 java.lang.ApplicationShutdownHooks$1.run(ApplicationShutdownHooks.jav 答:24) 在 java.lang.Shutdown.runHooks(Shutdown.java:79) 在 java.lang.Shutdown.sequence(Shutdown.java:123) 在 java.lang.Shutdown.exit(Shutdown.java:168) - 锁定 (java.lang.Shutdown 的 java.lang.Class) 在 java.lang.Runtime.exit(Runtime.java:90) 在 java.lang.System.exit(System.java:904) 在 org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.j ava:986)

“VM 线程”prio=10 tid=0x01b7e400 nid=0x1e10 可运行

“VM 周期性任务线程”prio=10 tid=0x01bec800 nid=0x1bac 等待条件

JNI 全局引用:1776

发现一个 Java 级别的死锁:

“线程 2”: 等待锁定监视器 0x0467c1cc(对象 0x23ba76f0,一个 org.hsqldb.Session), 由“Thread-1”持有 “线程 1”: 等待锁定监视器 0x01bbf56c(对象 0x292ce828,一个 org.hsqldb.SessionMan 年龄), 由“Thread-2”持有

上面列出的线程的 Java 堆栈信息:

“线程 2”: 在 org.hsqldb.Session.close(未知来源) - 等待锁定 (一个 org.hsqldb.Session) 在 org.hsqldb.SessionManager.closeAllSessions(未知来源) - 锁定 (一个 org.hsqldb.SessionManager) 在 org.hsqldb.Database.close(未知来源) 在 org.hsqldb.StatementCommand.getResult(未知来源) 在 org.hsqldb.StatementCommand.execute(未知来源) 在 org.hsqldb.Session.executeCompiledStatement(未知来源) 在 org.hsqldb.Session.executeDirectStatement(未知来源) 在 org.hsqldb.Session.execute(未知来源) - 锁定 (一个 org.hsqldb.Session) 在 org.hsqldb.jdbc.JDBCStatement.fetchResult(未知来源) 在 org.hsqldb.jdbc.JDBCStatement.execute(未知来源) - 锁定 (一个 org.hsqldb.jdbc.JDBCStatement) 在 org.springframework.jdbc.datasource.embedded.AbstractEmbeddedDatabase Configurer.shutdown(AbstractEmbeddedDatabaseConfigurer.java:42) 在 org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory。 shutdownDatabase(EmbeddedDatabaseFactory.java:184) 在 org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryB ean.destroy(EmbeddedDatabaseFactoryBean.java:57) 在 org.springframework.beans.factory.support.DisposableBeanAdapter.destr oy(DisposableBeanAdapter.java:184) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroyBean(DefaultSingletonBeanRegistry.java:487) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroySingleton(DefaultSingletonBeanRegistry.java:463) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroySingletons(DefaultSingletonBeanRegistry.java:431) - 锁定 (一个 java.util.LinkedHashMap) 在 org.springframework.context.support.AbstractApplicationContext.destro yBeans(AbstractApplicationContext.java:1048) 在 org.springframework.context.support.AbstractApplicationContext.doClos e(AbstractApplicationContext.java:1022) 在 org.springframework.context.support.AbstractApplicationContext$3.run( AbstractApplicationContext.java:940) “线程 1”: 在 org.hsqldb.SessionManager.closeAllSessions(未知来源) - 等待锁定 (一个 org.hsqldb.SessionManager) 在 org.hsqldb.Database.close(未知来源) 在 org.hsqldb.StatementCommand.getResult(未知来源) 在 org.hsqldb.StatementCommand.execute(未知来源) 在 org.hsqldb.Session.executeCompiledStatement(未知来源) 在 org.hsqldb.Session.executeDirectStatement(未知来源) 在 org.hsqldb.Session.execute(未知来源) - 锁定 (一个 org.hsqldb.Session) 在 org.hsqldb.jdbc.JDBCStatement.fetchResult(未知来源) 在 org.hsqldb.jdbc.JDBCStatement.execute(未知来源) - 锁定 (一个 org.hsqldb.jdbc.JDBCStatement) 在 org.springframework.jdbc.datasource.embedded.AbstractEmbeddedDatabase Configurer.shutdown(AbstractEmbeddedDatabaseConfigurer.java:42) 在 org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory。 shutdownDatabase(EmbeddedDatabaseFactory.java:184) 在 org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryB ean.destroy(EmbeddedDatabaseFactoryBean.java:57) 在 org.springframework.beans.factory.support.DisposableBeanAdapter.destr oy(DisposableBeanAdapter.java:184) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroyBean(DefaultSingletonBeanRegistry.java:487) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroySingleton(DefaultSingletonBeanRegistry.java:463) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.destroySingletons(DefaultSingletonBeanRegistry.java:431) - 锁定 (一个 java.util.LinkedHashMap) 在 org.springframework.context.support.AbstractApplicationContext.destro yBeans(AbstractApplicationContext.java:1048) 在 org.springframework.context.support.AbstractApplicationContext.doClos e(AbstractApplicationContext.java:1022) 在 org.springframework.context.support.AbstractApplicationContext$3.run( AbstractApplicationContext.java:940)

发现 1 个死锁。

C:\Users\Raghuveer.Rao>

【问题讨论】:

    标签: maven-3 maven-surefire-plugin


    【解决方案1】:

    Maven surefire 插件默认生成一个新进程来运行测试。这可能是您正在杀死的过程。当 maven 注意到它的子进程被中断时,它可能会认为测试失败了。

    查看/target/surefire-reports 进行确认。你可以做些什么来帮助我们诊断问题是找到surefire进程ID(你正在杀死的那个)并运行:

    $ jstack ID
    

    堆栈转储会告诉您导致测试挂起的原因。

    【讨论】:

    • 我看到一个死锁的 hsqldb 进程
    • 我不得不将 hsqldb 的版本从 2.0 降到 1.8.0.10 来解决这个问题。感谢您的帮助
    猜你喜欢
    • 2016-12-08
    • 2023-03-18
    • 2018-04-20
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2022-01-04
    • 2019-05-08
    相关资源
    最近更新 更多