JRakNet icon indicating copy to clipboard operation
JRakNet copied to clipboard

java.lang.NoSuchMethodError

Open KocTu4eK opened this issue 3 years ago • 9 comments

I try to run the code from the README example:

public static void main(String[] args) throws RakNetException {
    RakNetServer server = new RakNetServer(19132, 10);
    server.setIdentifier(new MinecraftIdentifier("JRakNet Example Server", 354, "1.11", 0, 10,
        server.getGloballyUniqueId(), "New World", "Survival"));

    server.start();
}

I get this error:

java.lang.NoSuchMethodError: 'java.lang.String org.apache.logging.log4j.util.PropertiesUtil.getStringProperty(java.lang.String[], java.lang.String, org.apache.logging.log4j.util.Supplier)'
    at org.apache.logging.log4j.core.util.BasicAuthorizationProvider.<init> (BasicAuthorizationProvider.java:45)
    at org.apache.logging.log4j.core.config.ConfigurationFactory.authorizationProvider (ConfigurationFactory.java:216)
    at org.apache.logging.log4j.core.config.ConfigurationFactory.getInstance (ConfigurationFactory.java:189)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure (LoggerContext.java:687)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure (LoggerContext.java:708)
    at org.apache.logging.log4j.core.LoggerContext.start (LoggerContext.java:263)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext (Log4jContextFactory.java:243)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext (Log4jContextFactory.java:45)
    at org.apache.logging.log4j.LogManager.getContext (LogManager.java:174)
    at org.apache.logging.log4j.LogManager.getLogger (LogManager.java:648)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:174)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:595)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:653)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:672)
    at ru.koctu4ek.Main.main (Main.java:9)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:833)

My dependencies:

<dependencies>
    <dependency>
        <groupId>com.whirvis</groupId>
        <artifactId>jraknet</artifactId>
        <version>2.12.3</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.17.2</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.17.2</version>
    </dependency>
</dependencies>

I use:

  • Windows 11
  • openjdk-18

KocTu4eK avatar Jun 21 '22 22:06 KocTu4eK

This looks like an issue with the Log4J dependencies. Could you try removing the dependencies for Log4J and see if it runs then?

whirvis avatar Jun 22 '22 17:06 whirvis

Okay, I removed the Log4J dependencies:

<dependencies>
    <dependency>
        <groupId>com.whirvis</groupId>
        <artifactId>jraknet</artifactId>
        <version>2.12.3</version>
    </dependency>
</dependencies>

But it did not help. Now, as I understand it, it requires the Log4J library to be installed. Full log:

[INFO] 
[INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ raktest ---
[WARNING] 
java.lang.NoClassDefFoundError: org/apache/logging/log4j/spi/LoggerContextShutdownAware
    at java.lang.ClassLoader.defineClass1 (Native Method)
    at java.lang.ClassLoader.defineClass (ClassLoader.java:1013)
    at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:150)
    at java.net.URLClassLoader.defineClass (URLClassLoader.java:524)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:427)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:421)
    at java.security.AccessController.doPrivileged (AccessController.java:712)
    at java.net.URLClassLoader.findClass (URLClassLoader.java:420)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:588)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:521)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.createContextSelector (Log4jContextFactory.java:106)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.<init> (Log4jContextFactory.java:59)
    at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance (DirectConstructorHandleAccessor.java:67)
    at java.lang.reflect.Constructor.newInstanceWithCaller (Constructor.java:499)
    at java.lang.reflect.ReflectAccess.newInstance (ReflectAccess.java:128)
    at jdk.internal.reflect.ReflectionFactory.newInstance (ReflectionFactory.java:341)
    at java.lang.Class.newInstance (Class.java:677)
    at org.apache.logging.log4j.LogManager.<clinit> (LogManager.java:94)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:174)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:595)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:653)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:672)
    at ru.koctu4ek.Main.main (Main.java:9)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:833)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.spi.LoggerContextShutdownAware
    at java.net.URLClassLoader.findClass (URLClassLoader.java:445)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:588)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:521)
    at java.lang.ClassLoader.defineClass1 (Native Method)
    at java.lang.ClassLoader.defineClass (ClassLoader.java:1013)
    at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:150)
    at java.net.URLClassLoader.defineClass (URLClassLoader.java:524)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:427)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:421)
    at java.security.AccessController.doPrivileged (AccessController.java:712)
    at java.net.URLClassLoader.findClass (URLClassLoader.java:420)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:588)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:521)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.createContextSelector (Log4jContextFactory.java:106)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.<init> (Log4jContextFactory.java:59)
    at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance (DirectConstructorHandleAccessor.java:67)
    at java.lang.reflect.Constructor.newInstanceWithCaller (Constructor.java:499)
    at java.lang.reflect.ReflectAccess.newInstance (ReflectAccess.java:128)
    at jdk.internal.reflect.ReflectionFactory.newInstance (ReflectionFactory.java:341)
    at java.lang.Class.newInstance (Class.java:677)
    at org.apache.logging.log4j.LogManager.<clinit> (LogManager.java:94)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:174)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:595)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:653)
    at com.whirvis.jraknet.server.RakNetServer.<init> (RakNetServer.java:672)
    at ru.koctu4ek.Main.main (Main.java:9)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:833)

KocTu4eK avatar Jun 22 '22 19:06 KocTu4eK

I tested Log4J without the JRakNet dependency and it works great: image

But if I add a JRakNet dependency, then even my code without using JRakNet will throw that error: image

Maybe this will help somehow.

KocTu4eK avatar Jun 23 '22 00:06 KocTu4eK

Yes, this info is very helpful! Thank you. Try changing the version of Log4J from 2.17.2 to 2.17.1, and see if that helps.

<!-- Logging interface -->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.17.1</version>
</dependency>

<!-- Logging implementation -->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.17.1</version>
</dependency>

whirvis avatar Jun 23 '22 01:06 whirvis

I have already tried doing this. Did not help.

KocTu4eK avatar Jun 23 '22 14:06 KocTu4eK

I was able to find a solution to the problem! (Changing Log4J version from 2.17.2 to 2.17.1 did not help.)

If the JRakNet dependency is added after the Log4J dependencies, then the error will disappear: image image

This also works with code without using JRakNet: image

KocTu4eK avatar Jun 23 '22 14:06 KocTu4eK

Thanks for trying to help. Issue can be closed. But it would be nice if you could fix this problem or report a possible solution in the README or somewhere else.

KocTu4eK avatar Jun 23 '22 14:06 KocTu4eK

Alrighty! Thanks so much for the heads up, I really appreciate it. I'll leave the issue open as it feels like something that could be better fixed.

If you have any questions how to use JRakNet, feel free to open a new issue or DM me on Discord at Whirvis#0001

whirvis avatar Jun 23 '22 20:06 whirvis

Okay. Good luck!

KocTu4eK avatar Jun 23 '22 20:06 KocTu4eK