1

I have 2 java files:

package com.pokebot;

import javax.security.auth.login.LoginException;
import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.JDABuilder;
import net.dv8tion.jda.core.exceptions.RateLimitedException;

public class App {

    public static void main(String[] args)
    {
        try {
            JDA jdaBot = new JDABuilder(AccountType.BOT).setToken("my_token").buildBlocking();
            jdaBot.addEventListener(new Pokebot());
        } catch (LoginException e) {
    //            System.out.println("LoginException");
        } catch (InterruptedException e) {
    //            System.out.println("InterruptedException");
        } catch (RateLimitedException e) {
    //            System.out.println("RateLimitedException");
        }
    }

}

and:

package com.pokebot;

import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.MessageChannel;
import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;

public class Pokebot extends ListenerAdapter {

    @Override
    public void onMessageReceived(MessageReceivedEvent e) {

        //Obtains properties of the received message
        Message objMsg = e.getMessage();
        MessageChannel objChannel = e.getChannel();
        User objUser = e.getAuthor();

        //Responds to any user who says "hello"
        if (objMsg.getContent().equals("hello")) {
            objChannel.sendMessage("Hello, " + objUser.getAsMention() +"!").queue();
        }

    }
}

When I run the application (the main class is App from 1st file) from Netbeans, I get only one notice:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

but the application still works. When I try to run it from command line:

java -jar target/pokebotapp-1.0-SNAPSHOT.jar

then I get an exception like this:

Exception in thread "main" java.lang.NoClassDefFoundError: net/dv8tion/jda/core/exceptions/RateLimitedException

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: net/dv8tion/jda/core/
exceptions/RateLimitedException
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.privateGetMethodRecursive(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: net.dv8tion.jda.core.exceptions.Rat
eLimitedException
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 7 more

And the application does not even start.

I'm using Maven for this project. My pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.pokebot</groupId>
    <artifactId>pokebotapp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <!--<classpathPrefix>lib/</classpathPrefix>-->
                            <mainClass>com.pokebot.App</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.5.1</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/dependency-jars/
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>net.dv8tion</groupId>
            <artifactId>JDA</artifactId>
            <version>3.3.1_291</version>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>jcenter</id>
            <name>jcenter-bintray</name>
            <url>http://jcenter.bintray.com</url>
        </repository>
    </repositories>
    </project>

Before I try to run the project from the console, i run maven compile. I think it might possibly be the fault of the way I run the program, or the way I set up maven for this project. Is there anyone that knows what can be the problem?

Lurker
  • 267
  • 2
  • 4
  • 10
  • read this https://stackoverflow.com/questions/7421612/slf4j-failed-to-load-class-org-slf4j-impl-staticloggerbinder – Lokesh Pandey Oct 18 '17 at 11:28
  • I added maven dependencies for `slf4j-api-1.7.5` and `slf4j-simple-1.7.5`, but still have the same problem, even after mvn clean install – Lurker Oct 18 '17 at 11:42
  • did you update your project and check force updates snapshot and releases ? – Lokesh Pandey Oct 18 '17 at 11:44
  • I tried `mvn clean install -U` and Netbeans' `Download declared dependencies`... still the same. Is there any other way to update the project? – Lurker Oct 18 '17 at 11:46
  • right click on your project->Maven->update project->check force update of snapshot and releases and then click ok – Lokesh Pandey Oct 18 '17 at 11:48
  • I don't have these options in NetBeans 8.2 – Lurker Oct 18 '17 at 11:52
  • Oh!! these steps are for eclipse, check how you could force to update the snapshot and releases in netbeans else delete the .m2 folder and update your maven once again – Lokesh Pandey Oct 18 '17 at 11:54
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/156999/discussion-between-lurker-and-lokesh). – Lurker Oct 18 '17 at 11:56

2 Answers2

1

That's because java doesn't know where to take this libs from. Few options:

  1. Construct jar with all your dependencies included (so called uber-jar). This is done with maven shade plugin. Docs are available here: https://maven.apache.org/components/plugins/maven-shade-plugin/examples/executable-jar.html

  2. Do java -jar -cp Docs are here: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

First option is definitely better :) I guess there should be plenty of examples on stackoverflow how to configure maven-shade-plugin. Like this: What is the maven-shade-plugin used for, and why would you want to relocate java packages?

0

With gradle

This can be fixed by using the shadow plugin and building your jar with shadowJar instead. The jar will then be present in the build/libs directory with a name like example-1.0-all.jar

With Maven

You need the shade plugin in your pom to add dependencies to your package task. You can see the shade plugin being applied in this example pom.xml

From https://jda.wiki/using-jda/troubleshooting/