Maven tycho-surefire-plugin завершается неудачно с кодом возврата 13
У меня есть OSGI-комплект и теперь я хочу создать для него тестовый комплект. Поскольку существующий комплект использует Tycho, я также хотел провести тестирование Eclipse/Tycho-way, используя tycho-surefire-plugin.
Насколько я понял, тестирование Eclipse-way означает, что у каждого пакета есть соответствующий пакет, содержащий все соответствующие тестовые примеры.
Поэтому я создал новый пакет "xyz.tests" со следующим pom:
<artifactId>xyz.tests</artifactId>
<packaging>eclipse-test-plugin</packaging>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<version>0.21.0</version>
</plugin>
</plugins>
</build>
Я также создал другие стандартные файлы tycho/OSGI-проектов META-INF / MANIFEST.MF
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: xyz
Bundle-Version: 0.0.1.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Fragment-Host: zyx
Import-Package: org.junit;version="4.11.0"
Bundle-ActivationPolicy: lazy
build.properties
output.. = bin/
source.. = src/
bin.includes = META-INF/,\
OSGI-INF/,\
.
и OSGI-INF/l10n/bundle.properties
# META-INF/MANIFEST.MF
Bundle-Name=XYZ Tests
Затем я написал "контрольный пример", так как сначала хотел проверить, правильно ли настроен мой eclipse-test-plugin.
package xyz.tests.xyz;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class XYZTest {
@Test
public void testClasstest() {
assertEquals("Tests", true, true);
}
}
Когда я запускаю mvn package в качестве цели, все компилируется и упаковывается без ошибок. Затем я запустил mvn интеграционный тест как цель (это та часть, с которой начинает работать tycho-surefire). Там я получаю сообщение об ошибке, которое не дает мне никакой полезной информации:
[INFO] --- tycho-surefire-plugin:0.21.0:test (default-test) @ xyz.tests ---
[INFO] Expected eclipse log file: /pathXYZ/target/work/data/.metadata/.log
[INFO] Command line:
[/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java, -Dosgi.noShutdown=false, -Dosgi.os=linux, -Dosgi.ws=gtk, -Dosgi.arch=x86_64, -Dosgi.clean=true, -jar, /home/erdi/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.launcher/1.3.0.v20130327-1440/org.eclipse.equinox.launcher-1.3.0.v20130327-1440.jar, -data, /pathXYZ/target/work/data, -install, /pathXYZ/target/work, -configuration, /pathXYZ/target/work/configuration, -application, org.eclipse.tycho.surefire.osgibooter.headlesstest, -testproperties, /pathXYZ/target/surefire.properties]
xyz: Hello World!!
-------------------------------------------------------
T E S T S
-------------------------------------------------------
xyz: Goodbye World!!
An error has occurred. See the log file
/pathXYZ/target/work/configuration/1432736234573.log.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26.050s
[INFO] Finished at: Wed May 27 16:17:16 CEST 2015
[INFO] Final Memory: 69M/362M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.eclipse.tycho:tycho-surefire-plugin:0.21.0:test (default-test) on project xyz.tests: An unexpected error occured (return code 13). See log for details. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
Сообщения "xyz: Hello/Goodbye World" - это сообщения, которые печатаются при запуске / остановке пакета, который я хотел проверить. Это означает, что моя конфигурация в порядке при запуске пакета, но сразу после него возникает ошибка. К сожалению, просмотр журнала не дает ничего полезного:
!SESSION 2015-05-27 16:17:14.238 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_75
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Framework arguments: -application org.eclipse.tycho.surefire.osgibooter.headlesstest -testproperties /pathXYZ/target/work/data -application org.eclipse.tycho.surefire.osgibooter.headlesstest -testproperties /pathXYZ/target/surefire.properties
!ENTRY org.eclipse.osgi 4 0 2015-05-27 16:17:15.891
!MESSAGE Application error
!STACK 1
org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: null
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.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:123)
at org.eclipse.tycho.surefire.osgibooter.OsgiSurefireBooter.run(OsgiSurefireBooter.java:87)
at org.eclipse.tycho.surefire.osgibooter.HeadlessTestApplication.run(HeadlessTestApplication.java:21)
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.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
Caused by: java.lang.NullPointerException
at java.lang.Class.getAnnotation(Class.java:3217)
at org.apache.maven.surefire.common.junit4.JUnit4TestChecker.isValidJUnit4Test(JUnit4TestChecker.java:63)
at org.apache.maven.surefire.common.junit4.JUnit4TestChecker.accept(JUnit4TestChecker.java:52)
at org.apache.maven.surefire.util.DefaultDirectoryScanner.locateTestClasses(DefaultDirectoryScanner.java:80)
at org.apache.maven.surefire.junit4.JUnit4Provider.scanClassPath(JUnit4Provider.java:174)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:83)
... 28 more
Итак, я знаю, что возникает исключение нулевого указателя, но я понятия не имею, почему / где.
Я думаю, что это действительно помогло бы увидеть весь путь ошибки, который скрыт за "... еще 28", но я не знаю, как это увидеть...
Я также не совсем уверен, правильно ли я все настроил, так как я не нашел никакого полезного учебника и более или менее посмотрел на базу кода тестирования других eclipse-проектов.
1 ответ
Я наконец нашел источник моей проблемы:
Я использовал tycho v0.21.0, где эта проблема сообщалась как ошибка ( https://bugs.eclipse.org/bugs/show_bug.cgi?id=369266) и была исправлена с помощью tycho v0.22.0.
Изменение свойства version для tycho-surefire-plugin решило проблему.