kotlin-eclipse-2022
kotlin-eclipse-2022 copied to clipboard
[BUG] java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file mmbmods/kotlin/KotlinMod
Steps to reproduce:
- Create a new Kotlin project
- Download MultiMachineBuilder (https://github.com/MultiMachineBuilder/MultiMachineBuilder) into an Eclipse workspace
- Add MultiMachineBuilder as dependency
- Write a simple test mod (https://github.com/MultiMachineBuilder/MultiMachineBuilder/wiki/Writing-a-mod)
- Export the mod as library JAR and put it into 'mods' directory
- Run the game from Eclipse
Expected behavior:
'Kotlin Mod' throws NullPointerException during loading
Your mod works
Actual behavior:
'Kotlin Mod' throws:
(MOD - kotlin.jar) Invalid class file: mmbmods/kotlin/KotlinMod.class (MOD - kotlin.jar) java.lang.ClassFormatError (MOD - kotlin.jar) Absent Code attribute in method that is not native or abstract in class file mmbmods/kotlin/KotlinMod (MOD - kotlin.jar) java.lang.ClassLoader.defineClass1(Native Method) (MOD - kotlin.jar) java.lang.ClassLoader.defineClass(Unknown Source) (MOD - kotlin.jar) java.lang.ClassLoader.defineClass(Unknown Source) (MOD - kotlin.jar) io.github.micwan88.helperclass4j.ByteClassLoader.findClass(ByteClassLoader.java:43) (MOD - kotlin.jar) java.lang.ClassLoader.loadClass(Unknown Source) (MOD - kotlin.jar) java.lang.ClassLoader.loadClass(Unknown Source) (MOD - kotlin.jar) io.github.micwan88.helperclass4j.ByteClassLoader.loadClass(ByteClassLoader.java:53) (MOD - kotlin.jar) mmb.MODS.loader.AddonLoader.interpretClassFile(AddonLoader.java:214) (MOD - kotlin.jar) mmb.MODS.loader.AddonLoader.processFile(AddonLoader.java:179) (MOD - kotlin.jar) mmb.MODS.loader.AddonLoader.lambda$2(AddonLoader.java:163) (MOD - kotlin.jar) java.util.Hashtable.forEach(Unknown Source) (MOD - kotlin.jar) mmb.MODS.loader.AddonLoader.whenWorking(AddonLoader.java:162) (MOD - kotlin.jar) mmb.MODS.loader.AddonLoader.init(AddonLoader.java:123) (MOD - kotlin.jar) mmb.MODS.loader.AddonLoader.lambda$0(AddonLoader.java:74) (MOD - kotlin.jar) java.lang.Thread.run(Unknown Source)
Your mod might throw the same exception
Description: When a class file is loaded, the class loader throws java.lang.ClassFormatError:
- Write a simple test mod
Give me please a mod, with which this error has aquired.
- Download entire repository: https://github.com/MultiMachineBuilder/MultiMachineBuilder
- Paste https://github.com/MultiMachineBuilder/MultiMachineBuilder/releases/download/d0.4.0_/Machine.Builder.0.4-pre.jar into game directory
- Run the Machine Builder 0.4-pre.jar file
- 'kotlin.jar' mod will have its state as 'Crashed'
I think, this problem has nothing common with eclipse-plugin. The reasons:
- Files .classpath and .project (eclipse-specific) not contains kotlin-nature
- Project not contains Files *.kt -- kotlin source files
Problem can be in Machine.Builder.0.4-pre source code, but this is not a eclipse-project. Runtime-ready jar not contains it
Here is bytecode. Notice that it has missing definition for main() but not main(String[]):
// Compiled from KotlinMod.kt (version 1.6 : 50.0, super bit)
public final class mmbmods.kotlin.KotlinModKt {
// Method descriptor #6 ()V
public static final void main();
// Method descriptor #7 ([Ljava/lang/String;)V
// Stack: 0, Locals: 1
public static synthetic void main(java.lang.String[] arg0);
0 invokestatic mmbmods.kotlin.KotlinModKt.main() : void [9]
3 return
}
The game uses ByteClassLoader, which can be found at: https://github.com/micwan88/helperclass4j
Note that if you inspect bytecode, override methods do not have bodies.