Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KotlinTest and Spek2 conflict over classgraph in Java11 #1022

Closed
akurdyukov opened this issue Sep 30, 2019 · 4 comments · Fixed by #1032
Closed

KotlinTest and Spek2 conflict over classgraph in Java11 #1022

akurdyukov opened this issue Sep 30, 2019 · 4 comments · Fixed by #1032
Labels
enhancement ✨ Suggestions for adding new features or improving existing ones. good-first-issue 👶 Suitable for newcomers looking to contribute to the project.

Comments

@akurdyukov
Copy link

Using both io.kotlintest:kotlintest-runner-junit5:3.4.2 and org.spekframework.spek2:spek-dsl-jvm:2.0.7 in a single project with Java11 causes errors like

Exception in thread "main" java.lang.annotation.AnnotationFormatError: java.lang.IllegalArgumentException: Wrong type at constant pool index
	at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:78)
	at java.base/java.lang.Class.createAnnotationData(Class.java:3758)
	at java.base/java.lang.Class.annotationData(Class.java:3747)
	at java.base/java.lang.Class.getDeclaredAnnotations(Class.java:3714)
	at kotlin.reflect.jvm.internal.components.ReflectClassStructure.loadClassAnnotations(ReflectKotlinClass.kt:83)
	at kotlin.reflect.jvm.internal.components.ReflectKotlinClass$Factory.create(ReflectKotlinClass.kt:55)
	at kotlin.reflect.jvm.internal.components.ReflectKotlinClassFinder.findKotlinClass(ReflectKotlinClassFinder.kt:30)
	at kotlin.reflect.jvm.internal.components.ReflectKotlinClassFinder.findKotlinClassOrContent(ReflectKotlinClassFinder.kt:33)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope$classes$1.invoke(LazyJavaPackageScope.kt:62)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope$classes$1.invoke(LazyJavaPackageScope.kt:42)
	at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:440)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope.findClassifier(LazyJavaPackageScope.kt:142)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope.getContributedClassifier(LazyJavaPackageScope.kt:132)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.JvmPackageScope.getContributedClassifier(JvmPackageScope.kt:52)
	at kotlin.reflect.jvm.internal.impl.resolve.scopes.ChainedMemberScope.getContributedClassifier(ChainedMemberScope.kt:33)
	at kotlin.reflect.jvm.internal.impl.resolve.scopes.AbstractScopeAdapter.getContributedClassifier(AbstractScopeAdapter.kt:44)
	at kotlin.reflect.jvm.internal.impl.descriptors.FindClassInModuleKt.findClassAcrossModuleDependencies(findClassInModule.kt:25)
	at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor$2.invoke(KClassImpl.kt:51)
	at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor$2.invoke(KClassImpl.kt:44)
	at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:92)
	at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:31)
	at kotlin.reflect.jvm.internal.KClassImpl$Data.getDescriptor(KClassImpl.kt)
	at kotlin.reflect.jvm.internal.KClassImpl.getDescriptor(KClassImpl.kt:179)
	at kotlin.reflect.jvm.internal.KClassImpl.isAbstract(KClassImpl.kt:268)
	at org.spekframework.spek2.runtime.JvmDiscoveryContextFactory.create(JvmDiscoveryContextFactory.kt:25)
	at org.spekframework.ide.Spek2ConsoleLauncher.run(console.kt:17)
	at org.spekframework.ide.ConsoleKt$main$1.invoke(console.kt:35)
	at org.spekframework.ide.ConsoleKt$main$1.invoke(console.kt)
	at shadow.com.xenomachina.argparser.SystemExitExceptionKt.mainBody(SystemExitException.kt:74)
	at shadow.com.xenomachina.argparser.SystemExitExceptionKt.mainBody$default(SystemExitException.kt:72)
	at org.spekframework.ide.ConsoleKt.main(console.kt:33)
Caused by: java.lang.IllegalArgumentException: Wrong type at constant pool index
	at java.base/jdk.internal.reflect.ConstantPool.getClassAt0(Native Method)
	at java.base/jdk.internal.reflect.ConstantPool.getClassAt(ConstantPool.java:37)
	at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:245)
	at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:121)
	at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:73)
	... 30 more

I used this thread spekframework/spek#707 to find that it's a conflict over classgraph dependency version. Dependency graph show that kotlin test runner wants io.github.classgraph:classgraph:4.8.1, and spek2 wants io.github.classgraph:classgraph:4.6.18 -> 4.8.37

My workaround is

testImplementation "io.github.classgraph:classgraph:4.8.47"

Maybe classgraph dependency can be updated in the runner?

@LeoColman
Copy link
Member

Yes, we can update it.
It should be pretty straight forward

@LeoColman LeoColman added enhancement ✨ Suggestions for adding new features or improving existing ones. good-first-issue 👶 Suitable for newcomers looking to contribute to the project. Hacktoberfest labels Oct 1, 2019
@sksamuel
Copy link
Member

sksamuel commented Oct 1, 2019

Let's upgrade and release 3.4.3

@cueo
Copy link
Contributor

cueo commented Oct 2, 2019

Is this open? Can I take this up?

@LeoColman
Copy link
Member

Sure! Go ahead

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement ✨ Suggestions for adding new features or improving existing ones. good-first-issue 👶 Suitable for newcomers looking to contribute to the project.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants