导出使用 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 之间存在不匹配。确保它们相同或至少足够接近。
我正在开发一个使用 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 之间存在不匹配。确保它们相同或至少足够接近。