Как управляются вложенные стеки maven?

Когда я настраиваю плагин maven surefire для печати полной трассировки стека, используя

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.15</version>
  <configuration>
    <trimStackTrace>false</trimStackTrace>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <useFile>false</useFile>
    <redirectTestOutputToFile>false</redirectTestOutputToFile>
  </configuration>
</plugin>

Похоже, это не влияет на вложенные стеки, так как они все еще вырезаны, например:

org.apache.openejb.OpenEjbContainer$AssembleApplicationException: org.apache.openejb.OpenEJBException: Creating application failed: /mnt/DATA/richter/NetBeansProjects/issue-openwebbeans: couldn't start owb context
at org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:427)
at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:56)
at de.pgalise.issue.openwebbeans.TestUtils.getContainer(TestUtils.java:50)
at de.pgalise.issue.openwebbeans.CityCtrlTest.setUp(CityCtrlTest.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.openejb.OpenEJBException: Creating application failed: /mnt/DATA/richter/NetBeansProjects/issue-openwebbeans: couldn't start owb context
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:901)
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:616)
at org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:423)
... 20 more
Caused by: org.apache.openejb.OpenEJBRuntimeException: couldn't start owb context
at org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:161)
at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:40)
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:803)
... 22 more
Caused by: org.apache.openejb.OpenEJBRuntimeException: javax.enterprise.event.ObserverException: Caught Exception while handling event object with type : org.apache.webbeans.portable.events.discovery.AfterBeanDiscoveryImpl
at org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:187)
at org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:159)
... 24 more
Caused by: javax.enterprise.event.ObserverException: Caught Exception while handling event object with type : org.apache.webbeans.portable.events.discovery.AfterBeanDiscoveryImpl
at org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:501)
at org.apache.webbeans.container.BeanManagerImpl.fireEvent(BeanManagerImpl.java:446)
at org.apache.webbeans.container.BeanManagerImpl.fireLifecycleEvent(BeanManagerImpl.java:436)
at org.apache.webbeans.config.BeansDeployer.fireAfterBeanDiscoveryEvent(BeansDeployer.java:362)
at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:199)
at org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:184)
... 25 more
Caused by: org.apache.webbeans.exception.WebBeansException: java.lang.reflect.InvocationTargetException
at org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:272)
at org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:482)
... 30 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:266)
... 31 more
Caused by: java.lang.NoSuchMethodError: javax.enterprise.inject.spi.BeanManager.getInjectionTargetFactory(Ljavax/enterprise/inject/spi/AnnotatedType;)Ljavax/enterprise/inject/spi/InjectionTargetFactory;
at com.sun.faces.util.cdi11.CDIUtilImpl.createHelperBean(CDIUtilImpl.java:76)
at com.sun.faces.application.view.ViewScopeExtension.afterBeanDiscovery(ViewScopeExtension.java:130)
... 36 more

Я предполагаю, что документация для trimStackTrace " Обрезать ли трассировку стека в отчетах до строк внутри теста или показать полную трассировку". на самом деле этого недостаточно, поскольку он не делает различий между стеками и вложенными стеками. Есть ли возможность контролировать оба?

1 ответ

Решение

Я думаю, вы уже видите полную трассировку стека;) О шаблонах "... еще 24" в предоставленном вами примере, я не знаю и не думаю, что вы можете их получить.

Что касается роли и того, что вы считаете неэффективным, свойства "trimStackTrace" верной конфигурации, я некоторое время боролся, не понимая, почему я вижу основную причину исключения при запуске теста из IntelliJ, а не при запуске из maven. командная строка. Здесь вы увидите, что свойство действительно эффективно для отображения основных причин исключений.

Без верного свойства конфигурации "trimStackTrace" (по умолчанию: false) у меня был такой вывод:

2014-03-27 19: 29: 30,933 [main] Показатели DEBUG.SimpleValueBinder - запуск fillSimpleValue для lastFetchTime
2014-03-27 19:29:30,933 [main] DEBUG  org.hibernate.cfg.Configuration - обработка сопоставлений fk (*ToOne и JoinedSubclass) Выполнено тестов: 2, сбоев: 0, ошибок: 2, пропущено: 0, истекло время: 5,032 с (StorageHelper.java:35) на com.company.foobar.helper.StorageHelper.getInstance(StorageHelper.java:26) в com.company.foobar.StorageHelperTest.foo(StorageHelperTest.java:40) в sun.reflect.NativeMethodAccessorImpl.invoke0(нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAjav_fate.jpg) DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) по адресу java.lang.reflect.Method.invoke(Method.java:483) по адресу org.junit.runners.model.FrameworkMethod$1.runRefethoho.all junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) в org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) в org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) в org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:27jitg) или.runners.BlockJUnit4ClassRunner..junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) в org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) в org.junit.runners.ParentRunner.access$000(ParentRunner.) в org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) в org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) в org.junit.runners.ParentRunner.run(ParentRunner.java:309) по адресу org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:254) по адресу org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet:14idejjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj (0) (0) t org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) в org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.maure.japf..booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) в org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) Результаты: ошибочные тесты: 
  StorageHelperTest.foo:40 "Persistence [Persistence [ по умолчанию-живучесть-у...

Устанавливая свойство "trimStackTrace" в "true", я теперь получаю коренные причины исключений:

2014-03-27 19: 29: 30,933 [main] Охотничьи сообщения отладки. SimpleValueBinder - Запуск fillSimpleValue для lastFetchTime
2014-03-27 19: 29: 30,933 [main] DEBUG org.hibernate.cfg.Configuration - обработка отображений fk (*ToOne и JoinedSubclass)
Выполнено тестов: 2, сбоев: 0, ошибок: 2, пропущено: 0, прошедшее время: 5,032 с (StorageHelper.java:35)
    на com.company.foobar.helper.StorageHelper.getInstance(StorageHelper.java:26)
    на com.company.foobar.StorageHelperTest.foo(StorageHelperTest.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    в java.lang.reflect.Method.invoke(Method.java:483)
    в org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    в org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    в org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:44)
    в org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    в org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    в org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    в org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    в org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    в org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    в org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    в org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    в org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    в org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    в org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    в org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:254)
    в org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:149)
    в org.apache.maven.surefire.junit4.JUnit4Provider.invoke (JUnit4Provider.java:124)
    в org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
    в org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
    в org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Причина: org.hibernate.AnnotationException: внешний ключ, ссылающийся на com.company.foobar.bean.FooBarItemCriterias из com.company.foobar.bean.FooBarOpportunity, имеет неправильный номер столбца. должно быть 22
    в org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:450)
    в org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:117)
    в org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1596)
    в org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1519)
    в org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1420)
    в org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
    в org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
    ... еще 36


Результаты:

Тесты по ошибке: 
  StorageHelperTest.foo:40 "Постоянство [PersistenceUnit: default-persistence-u...

Кстати, эта опция задокументирована как "Обрезать ли трассировку стека в отчетах только до строк в тесте или показать полную трассировку", что неоднозначно. Сначала я думал, что "отчеты" - это только те XML-файлы и текстовые файлы, которые вы можете найти в "${basedir}/target/surefire-reports/", но он в основном обозначает вывод на верную консоль, а также эти файлы по расширению.

Другие вопросы по тегам