JAVA应用程序连接到Docker中的Postgres时未加载JDBC驱动程序类

JAVA应用程序连接到Docker中的Postgres时未加载JDBC驱动程序类,java,postgresql,docker,centos,Java,Postgresql,Docker,Centos,我用CentOS和Boot2Docker在本地设置了一个docker容器。目标是安装一个连接到Postgres的JAVA应用程序。安装了Java JDK和JRE for 1.8。博士后已经开始运作。我能够用psql连接到它并进行工作 Java应用程序通过Intellij编译为jar文件。附件是POM.xml文件。一切都很好。但是,当我尝试在docker中使用以下命令行运行应用程序:java-jar app_NAME.jar时,会收到以下错误消息: “PostgreSQL 9.4.1212.jre

我用CentOS和Boot2Docker在本地设置了一个docker容器。目标是安装一个连接到Postgres的JAVA应用程序。安装了Java JDK和JRE for 1.8。博士后已经开始运作。我能够用psql连接到它并进行工作

Java应用程序通过Intellij编译为jar文件。附件是POM.xml文件。一切都很好。但是,当我尝试在docker中使用以下命令行运行应用程序:java-jar app_NAME.jar时,会收到以下错误消息:

“PostgreSQL 9.4.1212.jre7

在:jar:file:/demo\u data/out/artifacts/demo\u data\u jar/demo\u data.jar!/org/postgresql/Driver.class中找到

PgJDBC驱动程序不是可执行的Java程序

必须根据应用程序/container/appserver的JDBC驱动程序安装说明安装它,然后通过指定表单的JDBC URL来使用它 jdbc:postgresql:// 或者使用特定于应用程序的方法

请参阅PgJDBC文档:

此命令无效。”

以下是POM: http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>com.align</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>demo_data</name>
<description>Program to create demo data for align care.</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

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

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.9</version>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
com.align
演示
0.0.1-快照
罐子
演示数据
为align care创建演示数据的程序。
org.springframework.boot
spring启动程序父级
1.4.3.1发布
UTF-8
UTF-8
1.8
org.springframework.boot
弹簧靴起动器
org.postgresql
postgresql
运行时
org.springframework.boot
弹簧起动试验
测试
通用编解码器
通用编解码器
1.9
org.springframework.boot
springbootmaven插件

您创建的jar使用PostgreSql jdbc驱动程序中的
main
类(该类仅用于警告试图像
java-jar-PostgreSql\u jdbc.jar那样运行它的人,它没有意义)


因此,在创建jar时,请确保指定了正确的主类。

主类在清单文件中被正确引用为“main class:com.align.DemoDataApplication”“。但是,Intellij将此文件放到src/java/META-INF/下的目录中。这不适用于Maven项目。它需要位于:src/resources/META-INF/下。由于JRE找不到我的主类,它在postgres驱动程序中找到了主类,并尝试运行它。我手动将清单复制到resources文件夹,重新编译后,它就工作了。谢谢你的帮助。