java.lang.ClassNotFoundException:终端中的org.postgresql.Driver

问题描述 投票:0回答:2

我看到了很多关于同一主题的问题,但老实说,经过几个小时的调试后,没有任何效果。 我有一个带有maven的java项目,它调用postgres DB来读取和写入数据。该代码在 IntelliJ 上构建并运行良好。我正在尝试在终端上运行它(以便我可以使用确定有效的命令并将其用于我的 dockerfile)。 编译用:

$mvn clean install

跑步:

$java -jar target/posthogdata-1.0-SNAPSHOT.jar  

我看到以下错误:

java.lang.ClassNotFoundException: org.postgresql.Driver
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:383)
    at java.base/java.lang.Class.forName(Class.java:376)
    at luminai.data.PostgresClient.createConnection(PostgresClient.java:19)
    at luminai.data.DataProcessor.main(DataProcessor.java:38)

代码在这一行被破坏:

Class.forName("org.postgresql.Driver");

我现在很困惑,不知道问题出在哪里。我有正确的依赖:

<dependency>
   <groupId>org.postgresql</groupId>
   <artifactId>postgresql</artifactId>
   <version>42.3.1</version>
</dependency>

这是我的插件:

<build>
    <plugins>
        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                   <manifest>
                      <addClasspath>true</addClasspath>
                      <classpathPrefix>lib/</classpathPrefix>
                      <mainClass>luminai.data.DataProcessor</mainClass>
                   </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

编辑:

我尝试过的命令:

$java -classpath org.postgresql:postgresql:42.3.1 -jar target/posthogdata-1.0-SNAPSHOT.jar

$java -classpath org.postgresql:postgresql:42.3.1:* -jar target/posthogdata-1.0-SNAPSHOT.jar

$java -cp .:org.postgresql:postgresql:42.3.1 -jar target/posthogdata-1.0-SNAPSHOT.jar

当 postgres jar 存在于 pom 和外部库列表中时,为什么它不会自动成为类路径的一部分?

这是我的项目的结构,我正在从 >posthogdata 运行命令

java postgresql maven
2个回答
0
投票

我找到了解决办法。根据评论和错误本身,Postgres 驱动程序 jar 不在类路径中。经过一定的尝试后,我更改了我的 pom 插件,以将所有其他依赖的 jar 组合到其中的方式包含我的项目的 jar。我想 IntelliJ 开箱即用地为我做这件事。

将插件更改为:

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>luminai.data.Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>

并运行以下命令:

$ mvn clean compile assembly:single
$ java -jar target/posthogdata-1.0-SNAPSHOT-jar-with-dependencies.jar

0
投票

通常从 IntellijIdea 重新加载 Gradle / Maven 可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.