I have a main zone extension jar "myZoneExtension.jar". I have a room extension jar "myRoomExtension.jar". I have a "common.jar" which contains an interface say ITraceable. I intend to use ITraceable interface in both my zone and room extension so I have placed my "common.jar" in /extensions/MyGame/_lib_ folder. So my final folder hierarchy is:
/extensions/MyGame/
/extensions/MyGame/myZoneExtension.jar
/extensions/MyGame/_lib_/common.jar
/extensions/MyGame/_lib_/myRoomExtension.jar
ITraceable interface:
Code: Select all
package game.common;
public interface ITraceable {
public void trace(Object... a_args);
}
In zone jar, i have below class structure:
Code: Select all
publc class BaseServerEventListener_C implements ISFSEventListener, ITraceable {
@Override
public void trace(string a_msg) {
...doing something here.
}
}
public class GameHandler extends BaseServerEventListener_C {
...
}
public class myZoneExtensionextends SFSExtension {
@Override
public void init() {
GameHandler m_gameCreatorRef = new GameHandler(); <-------------- CRASHING HERE.
addEventListener(SFSEventType.SERVER_READY, m_gameCreatorRef);
}
}
Issue: When starting server i am getting NoClassDefFoundError error:
Code: Select all
java.lang.NoClassDefFoundError: game/common/ITraceable
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at game.zone.myZoneExtension.init(myZoneExtension.java:54)
at com.smartfoxserver.v2.entities.managers.SFSExtensionManager.createExtension(SFSExtensionManager.java:303)
at com.smartfoxserver.v2.entities.managers.SFSZoneManager.createZone(SFSZoneManager.java:426)
at com.smartfoxserver.v2.entities.managers.SFSZoneManager.initializeZones(SFSZoneManager.java:239)
at com.smartfoxserver.v2.SmartFoxServer.start(SmartFoxServer.java:297)
at com.smartfoxserver.v2.Main.main(Main.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
at com.exe4j.runtime.WinLauncher.main(Unknown Source)
at com.install4j.runtime.launcher.WinLauncher.main(Unknown Source)
Caused by: java.lang.ClassNotFoundException: game/common.ITraceable
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Can you please tell me what am I doing wrong?
I read the classloader concept and put the common jar in _lib_ folder to share ITraceable interface across zone and all room extensions.