使用 Maven Spigot 编译 mysql 依赖

Compiling mysql dependincy with maven Spigot

我个人更喜欢将我的编码问题放在此处,除非我觉得自己被难住了。我正在尝试将 mysql java 依赖项添加到我的项目中(我正在编写 Minecraft-Spigot 1.12.2 插件)。 多年来我一直在编写 MySQL,但直到现在我还从未将它与 Java 一起使用,所以我正在学习本教程:https://www.spigotmc.org/wiki/connecting-to-databases-mysql/

将我重定向到此页面:https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.26 添加 Maven dep 很简单,你只需复制并粘贴即可!除此之外,我不太了解系统的内部运作方式。

每当我编译(它实际上编译而不会引发任何问题)并将其上传到我的服务器时,我都会收到此错误:java.lang.NoClassDefFoundError: com/mysql/cj/jdbc/MysqlDataSource。现在,我知道这与 class 未定义或其他原因有关。很明显,我搜索了错误代码。我看到的很多问题似乎并不适用于我。

我仔细检查了一下,确实在我的 IDE (InteliJ IDEA)

的“外部库”部分看到了 mysql-connector-java

我也看到有人发这个link:How can I create an executable JAR with dependencies using Maven? 其中,答案似乎也没有帮助我(除非我错过了什么)。

我希望有人可以通过发送我的文件来帮助我吗? 我看到有人提到 class 路径可能有问题?我究竟该如何解决这个问题(如果这是问题所在)。我似乎找不到任何可以帮助我解决这个问题的东西(虽然在这种情况下 classpath 有点让我头疼。Def 想在未来更多地阅读它)。

这是我的 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.example</groupId>
    <artifactId>example</artifactId>
    <version>1.12.2-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>example</name>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

    <repositories>
        <repository>
            <id>spigotmc-repo</id>
            <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
        </repository>
        <repository>
            <id>sonatype</id>
            <url>https://oss.sonatype.org/content/groups/public/</url>
        </repository>
        <repository>
            <id>dmulloy2-repo</id>
            <url>https://repo.dmulloy2.net/repository/public/</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot-api</artifactId>
            <version>1.12.2-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.comphenix.protocol</groupId>
            <artifactId>ProtocolLib</artifactId>
            <version>4.6.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>

    </dependencies>
</project>

您是否使用了正确的 SNAPSHOT jar?因为那应该对你有用

jar tf <the snapshot>.jar | find "com/mysql/cj/jdbc/MysqlDataSource"

在 Windows 或

jar tf <the snapshot>.jar | grep "com/mysql/cj/jdbc/MysqlDataSource"

on *nix 应该在 jar

中找到 'missing' class