2012-09-06 18 views
5

thể trùng lặp:
java error (No suitable driver found)Không lái xe phù hợp được tìm thấy khi bao gồm các trình điều khiển cần thiết với maven-lắp ráp-plugin

Tôi có một rất nhỏ quá mà làm việc với một DB PostgreSQL và nó sẽ rất thuận tiện để sử dụng nó như một cái bình. Vì vậy, thực sự tôi đã cố gắng sử dụng maven-lắp ráp-plugin như vậy:

<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> 

Và nó hoạt động hoàn toàn tốt đẹp, tôi có thể xem tất cả các tập tin tôi yêu cầu thêm vào file jar, bao gồm các file của người lái xe nhưng khi tôi đang cố gắng để chạy nó tôi nhận được một:

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

tôi có điều này:

<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> 

Trong sự phụ thuộc và URL là chính xác như tôi đã viết ở trên (trừ các địa chỉ bị kiểm duyệt :)). Tôi đang thiếu gì?

Cảm ơn!

+0

bạn cần thêm trình điều khiển đó vào các phụ thuộc của bạn – ant

+0

Trình điều khiển ** là ** trong các phụ thuộc ... Và cú pháp là chính xác. – Scis

+0

Bạn có 'Class.forName (...)' để tải trình điều khiển? – axtavt

Trả lời

10

Nếu bạn không sử dụng Class.forName(...) để tải trình điều khiển theo cách thủ công, thì tôi nghĩ bạn gặp phải sự cố khét tiếng với maven-assembly-plugin - nó ghi đè lên các tệp có cùng tên khi chúng đến từ jar s khác nhau.

Trong trường hợp JDBC cơ chế tài xế phát hiện của bạn dựa vào một file có tên /META-INF/services/java.sql.Driver, và bạn có ít nhất hai jar s chứa một tập tin như vậy trong sự phụ thuộc của bạn (Oracle và Postgres trình điều khiển), do đó một trong số họ bị mất sau khi chạy maven-assembly-plugin.

Bạn có thể sử dụng maven-shade-plugin thay vì maven-assembly-plugin để hợp nhất các tệp này một cách chính xác, như được mô tả here.

Hoặc, bạn có thể sử dụng Class.forName(...) để bỏ qua cơ chế tự động phát hiện lỗi.

+0

Cảm ơn, plugin bóng râm đã làm rất tốt. Đó là một "vấn đề đã biết" quan trọng đối với plugin maven-assembly, chúng ta có thể tránh xa nó ... – Scis

Các vấn đề liên quan