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ĩ rằng bạn đã gặp phải sự cố khét tiếng với maven-assembly-plugin
- nó ghi đè các tệp có cùng tên khi chúng đến từ các jar
khác nhau s.
Trong trường hợp của bạn, cơ chế khám phá trình điều khiển JDBC dựa vào tệp có tên /META-INF/services/java.sql.Driver
và bạn có ít nhất hai jar
s chứa tệp như vậy trong phần phụ thuộc của bạn (trình điều khiển Oracle và Postgres), do đó một trong số chúng 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ả ở đây.
Ngoài ra, bạn có thể sử dụng Class.forName(...)
để vượt qua cơ chế tự động phát hiện không thành công.