6

重複の可能性:
Java エラー (適切なドライバーが見つかりません)

私は PostgreSQL DB で動作する非常に小さなものも持っています。それを単一の 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 は、上で書いたとおりです (検閲されたアドレスを除いて :) )。私は何が欠けていますか?

ありがとう!

4

1 に答える 1

14

ドライバーを手動でロードするために使用Class.forName(...)しない場合は、悪名高い問題に直面したと思います。maven-assembly-plugin異なるjarsからのファイルは、同じ名前のファイルを上書きします。

この場合、JDBCドライバー検出メカニズムは、という名前のファイルに依存しており、依存関係にそのようなファイルを含むファイルが/META-INF/services/java.sql.Driver少なくとも2つjarあるため(OracleおよびPostgresドライバー)、実行後にそのうちの1つが失われますmaven-assembly-plugin

ここでmaven-shade-plugin説明するように、代わりにmaven-assembly-pluginこれらのファイルを正しくマージするために使用できます。

Class.forName(...)または、失敗した自動検出メカニズムを回避するために使用できます。

于 2012-09-06T11:00:02.877 に答える