当前位置: 首页 > 面试题库 >

将所需的驱动程序包含在maven-assembly-plugin中时,找不到合适的驱动程序。

盖锐
2023-03-14
问题内容

我也有一个非常小的数据库,可与PostgreSQL数据库一起使用,将其作为单个jar使用将非常方便。所以确实我已经尝试过使用maven-assembly-plugin,如下所示:

<artifactId>maven-assembly-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>pack.name.MainClass</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>

它运行得很好,我可以看到我添加到jar文件中的所有文件,包括驱动程序的文件,但是当我尝试运行它时,我得到了:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://<ip>:5432/dbname

我有这个:

<dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency> 
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>

在依赖关系中,URL与我上面写的完全一样(除了经过审查的地址:))。我想念什么?

谢谢!


问题答案:

如果您Class.forName(...)不习惯手动加载驱动程序,那么我认为您会遇到一个臭名昭著的问题maven-assembly- plugin-当文件来自不同jars 时,它会覆盖具有相同名称的文件。

在您的情况下,JDBC驱动程序发现机制依赖于一个名为的文件/META-INF/services/java.sql.Driver,并且您的依赖项中至少有两个jar包含这样的文件(Oracle和Postgres驱动程序),因此其中一个会在运行后丢失maven- assembly-plugin

您可以使用maven-shade-plugin,而不是maven-assembly- plugin作为描述这些文件正确地将合并,在这里。

或者,您可以使用Class.forName(...)躲避失败的自动发现机制。



 类似资料:
  • 问题内容: 我希望有一个人可以帮助我。我正在研究一个与SQLite数据库连接的简单应用程序。以下是我的连接代码: 这只是一个在数据库中加载用户名和密码的窗口。我的问题是,当我单击按钮时,出现以下异常: (我找到了一个有关如何使用Java连接到SQLite数据库的示例,我发现该示例运行良好) 这个程序我正在窗口构建器(日食)中做。我使用的示例中使用的驱动程序相同。我不知道我是否必须使用其他驱动程序。

  • 问题内容: 这个问题已经在这里有了答案 : 臭名昭著的java.sql.SQLException:未找到合适的驱动程序 (13个答案) 4年前关闭。 我有一个Java类,该类通过在Tomcat上运行的JSP中使用的JDBC通过JDBC访问MySQL数据库,并且遇到“未找到驱动程序异常”的问题。 我有一个方法: 这会在“ 这是我从catalina.out的打印输出”上引发错误: 唯一重要的错误是一个

  • 我正在开发一个android应用程序,它从SQL Server导入lat/long以在地图中显示为标记。我已经输入了jtds-1.21。jar到lib的路径,但我得到了错误 这是我的代码图。Java语言

  • 我总是在数据库中发现“没有合适的驱动程序”,我无法确定connect类出了什么问题?有人帮忙吗?我已经把5个罐子都装进去了。我想连接到Microsoft Access数据库。

  • 连接到sqlite数据库时遇到问题。在我的Windows PC上,一切正常,但如果我想在Linux(Raspberry PI)上运行我的程序,我会得到错误,如标题所示。 这是我在Windows上的连接: 在为Linux导出程序之前,我更改了连接字符串: 如果没有数据库,我使用以下代码创建它: 这是我的构建路径 这是我的项目 谁能帮帮我吗?THX

  • 问题内容: 我正在尝试编写一个程序以在eclipse中连接到MySQL数据库,但出现错误 “ java.sql.SQLException:找不到合适的驱动程序” 。 Java代码是: } 控制台选项卡中的输出为: 我已经使用了MySQL Connector / J。将其解压缩到MySQL安装目录中,并将jar文件添加到CLASSPATH中。 另请参阅此图像。有一个 !在项目根目录上标记。image