How to use Maven in my plugin? (Trying to use JodaTime within my plugin)

Discussion in 'Plugin Development' started by TheWolfBadger, Jan 20, 2017.

Thread Status:
Not open for further replies.
  1. Offline

    TheWolfBadger

    The project with all directories opened in IDE (and showing the pom.xml):
    [​IMG]
    Error I get within console when plugin is in /plugins directory:
    Code:
    [15:07:17 ERROR]: Could not load 'plugins/zExpiredDonateMessage.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: Cannot find main class `com.jaredscarito.zexpireddonatemessage.main.ZExpiredDonateMessage.java'
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:42) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:328) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.craftbukkit.v1_11_R1.CraftServer.loadPlugins(CraftServer.java:298) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.craftbukkit.v1_11_R1.CraftServer.<init>(CraftServer.java:260) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at net.minecraft.server.v1_11_R1.PlayerList.<init>(PlayerList.java:73) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at net.minecraft.server.v1_11_R1.DedicatedPlayerList.<init>(SourceFile:14) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at net.minecraft.server.v1_11_R1.DedicatedServer.init(DedicatedServer.java:185) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:521) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_111]
    Caused by: java.lang.ClassNotFoundException: com.jaredscarito.zexpireddonatemessage.main.ZExpiredDonateMessage.java
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_111]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:77) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:62) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_111]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_111]
        at java.lang.Class.forName0(Native Method) ~[?:1.8.0_111]
        at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_111]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:40) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        ... 10 more
    Plugin.yml:
    Code:
    name: zExpiredDonateMessage
    main: com.jaredscarito.zexpireddonatemessage.main.ZExpiredDonateMessage.java
    version: 1.0
    commands:
      zExpired:
        usage: ./zExpired <player> <rank> <yyyy/mm/dd>
        description: ./zExpired <player> <rank> <yyyy/mm/dd>
     
  2. Offline

    Zombie_Striker

    @TheWolfBadger
    Remove the ".java". Bukkit already adds the extension to it.
     
  3. @TheWolfBadger
    I don't think the issue has to do with maven.. You have just put ".java" at the end of the path to the main class in the plugin.yml. Remove it, and it should work just fine.
     
  4. Offline

    TheWolfBadger

    Updated pom:
    Code:
    <?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.jaredscarito.zexpireddonatemessage.main</groupId>
        <artifactId>zExpiredDonateMessage</artifactId>
        <version>1.0</version>
    
        <repositories>
            <repository>
                <id>bukkit-repo</id>
                <url>http://repo.bukkit.org/content/groups/public/</url>
            </repository>
        </repositories>
    
        <dependencies>
            <dependency>
                <groupId>org.bukkit</groupId>
                <artifactId>bukkit</artifactId>
                <version>1.11.2-R0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.9.7</version>
            </dependency>
        </dependencies>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
    </project>
    Structure:
    [​IMG]
    Error:
    Code:
    [15:46:56 ERROR]: Could not load 'plugins/zExpiredDonateMessage.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:328) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.craftbukkit.v1_11_R1.CraftServer.loadPlugins(CraftServer.java:298) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.craftbukkit.v1_11_R1.CraftServer.reload(CraftServer.java:727) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.Bukkit.reload(Bukkit.java:549) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.craftbukkit.v1_11_R1.CraftServer.dispatchCommand(CraftServer.java:629) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.craftbukkit.v1_11_R1.CraftServer.dispatchServerCommand(CraftServer.java:615) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at net.minecraft.server.v1_11_R1.DedicatedServer.aM(DedicatedServer.java:397) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:361) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:650) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:554) [craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_111]
    Caused by: java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant
        at java.lang.Class.forName0(Native Method) ~[?:1.8.0_111]
        at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_111]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:40) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        ... 14 more
    Caused by: java.lang.ClassNotFoundException: org.joda.time.ReadableInstant
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_111]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:77) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:62) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_111]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_111]
        at java.lang.Class.forName0(Native Method) ~[?:1.8.0_111]
        at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_111]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:40) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit-1.11.2.jar:git-Bukkit-775f1e1]
        ... 14 more
    plugin.yml:
    Code:
    name: zExpiredDonateMessage
    main: com.jaredscarito.zexpireddonatemessage.main.ZExpiredDonateMessage
    version: 1.0
    commands:
      zExpired:
        usage: ./zExpired <player> <rank> <yyyy/mm/dd>
        description: ./zExpired <player> <rank> <yyyy/mm/dd>

    @Zombie_Striker @AlvinB Didn't change anything :(
     
  5. @TheWolfBadger
    Well, something did change, the error is different. It's unable to find the class "org.joda.time.ReadableInstant". Are you using this class anywhere?

    EDIT: I didn't see you had a dependency for this in your maven project. You need to actually include the joda time library in your jar. To do this you need to do something called shading. Here's a shading guide for maven:
    https://maven.apache.org/plugins/maven-shade-plugin/
     
  6. Offline

    TheWolfBadger

    Yah in most of my plugin I am

    How do I include it in the jar?
    Here is my pom:
    Code:
    <?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.jaredscarito.zexpireddonatemessage</groupId>
        <artifactId>zExpiredDonateMessage</artifactId>
        <packaging>jar</packaging>
        <name>zExpiredDonateMessage</name>
        <version>1.0</version>
    
        <repositories>
            <repository>
                <id>bukkit-repo</id>
                <url>http://repo.bukkit.org/content/groups/public/</url>
            </repository>
        </repositories>
    
        <dependencies>
            <dependency>
                <groupId>org.bukkit</groupId>
                <artifactId>bukkit</artifactId>
                <version>1.11.2-R0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.9.7</version>
                <type>jar</type>
            </dependency>
        </dependencies>
        <build>
            <resources>
                <resource>
                    <directory>${basedir}/src/main/resources</directory>
                    <filtering>true</filtering>
                    <includes>
                        <include>plugin.yml</include>
                        <include>config.yml</include>
                        <include>players.yml</include>
                    </includes>
                </resource>
            </resources>
        </build>
    </project>
    Here is structure:
    [​IMG]

    @Zombie_Striker @AlvinB
    I just keep getting the error that it can't find the Joda-Time ClassDef error still....

    Code:
    <?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.jaredscarito.zexpireddonatemessage</groupId>
        <artifactId>zExpiredDonateMessage</artifactId>
        <name>zExpiredDonateMessage</name>
        <version>1.0</version>
    
        <dependencies>
            <!-- In order to use Spigot via Maven, you need it to install as local repository. Download BuildTools.jar from
             the official spigot page. Make sure you have the correct version installed. -->
            <dependency>
                <groupId>org.bukkit</groupId>
                <artifactId>bukkit</artifactId>
                <version>1.11.2-R0.1-SNAPSHOT</version>
                <scope>provided</scope>
            </dependency>
    
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.9.7</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>2.4</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <artifactSet>
                                    <includes>
                                        <include>joda-time:joda-time:2.9.7</include>
                                    </includes>
                                </artifactSet>
                                <relocations>
                                    <relocation>
                                        <!-- If you want to relocate shaded files -->
                                    </relocation>
                                </relocations>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <outputDirectory>Desktop/minecraft/plugins</outputDirectory>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    Still does not work, same error as before whole time too...
    [​IMG]
    [​IMG]
    plugin.yml:

    Code:
    name: zExpiredDonateMessage
    main: com.jaredscarito.zexpireddonatemessage.main.ZExpiredDonateMessage
    version: 1.0
    commands:
      zExpired:
        usage: ./zExpired <player> <rank> <yyyy/mm/dd>
        description: ./zExpired <player> <rank> <yyyy/mm/dd>
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jan 20, 2017
Thread Status:
Not open for further replies.

Share This Page