导出使用 postgresql 的 javaFx 项目后出现问题

Problem after exporting javaFx project that use postgresql

我正在开发一个使用 postgresql 的小 javaFx。 当我通过 IDE(Intellij) 执行 main 时没有问题并且一切正常,但是当我导出可执行 jar 时它不再工作了。我尝试使用 sqlite 作为数据库,即使导出后也没有问题。 这些是错误:

    WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @58daf476'
java.lang.ClassNotFoundException: org.postgresql.Driver
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:375)
        at main.db_controll.DbConnection.connect(DbConnection.java:11)
        at main.db_controll.QueryAdmin.fetchAdminData(QueryAdmin.java:15)
        at main.Controller.<init>(Controller.java:75)
.....
....
...

这是我的数据库连接器:

public class DbConnection {
    public static Connection connect(){
        try {
            /*
            This work fine for sqlite
            Class.forName("org.sqlite.JDBC");
            String url = "jdbc:sqlite:DbLibri.db";
            return DriverManager.getConnection(url, user, psw);
             */

            Class.forName("org.postgresql.Driver");
            String url = "jdbc:postgresql://127.0.0.1:5432/DbLibri";
            String user = "postgres";
            String psw = "pass";

            return DriverManager.getConnection(url, user, psw);
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

项目中的所有库都已正确导入,因为 它从 IDE 开始工作。

我想到了两件事。如果您使用的是 ant build,请确保 lib 文件夹与您的 jar 位于同一位置。 如果您使用的是 Maven,请确保您正在使用依赖项进行构建。 运行 来自您工作目录中的 cmd mvn clean compile assembly:single。你也可以添加你的 pom.xml,

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass><your.main.class></mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>                         
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

此外,有时 IDE java 和用于 运行 jar 文件的 java 之间存在不匹配。确保它们相同或至少足够接近。