2012-09-06 4 views
5

संभव डुप्लिकेट:
java error (No suitable driver found)कोई उपयुक्त ड्राइवर जब Maven-विधानसभा-प्लगइन के साथ की जरूरत चालकों सहित पाया

मैं भी एक बहुत छोटा है कि एक PostgreSQL DB और यह साथ काम करता है इसे एक जार के रूप में उपयोग करने के लिए बहुत सुविधाजनक होगा। तो वास्तव में मैं बहुत की तरह Maven-विधानसभा-प्लगइन का उपयोग कर की कोशिश की है:

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

और यह पूरी तरह से ठीक काम करता है, मैं सभी फाइलों को मैं जार फ़ाइल को जोड़ा गया आवश्यकता देखते हैं, चालक की फ़ाइलों लेकिन सहित कर सकते हैं जब मैं 'इसे चलाने के लिए कोशिश कर रहा हूँ मैं एक मिलता है:

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> 

निर्भरता में और यूआरएल है, वह है के रूप में मैं ऊपर लिखा था (सेंसर पता :) को छोड़कर)। मुझे क्या याद आ रही है?

धन्यवाद!

+0

आपको उस ड्राइवर को अपनी निर्भरताओं में जोड़ने की आवश्यकता है – ant

+0

चालक ** निर्भरता में ** ** है और वाक्यविन्यास सही है। – Scis

+0

क्या आपके पास ड्राइवर को लोड करने के लिए 'class.forName (...) 'है? – axtavt

उत्तर

10

आप Class.forName(...) उपयोग नहीं करते हैं ड्राइवर लोड करने के लिए मैन्युअल रूप से है, तो मुझे लगता है कि आप maven-assembly-plugin साथ एक कुख्यात समस्या का सामना करना पड़ा है - यह एक ही नाम के साथ फ़ाइलों को अधिलेखित कर देता है, जब वे अलग jar रों से आते हैं।

अपने मामले JDBC ड्राइवर खोज तंत्र में /META-INF/services/java.sql.Driver नाम की एक फ़ाइल पर निर्भर करता है, और आप अपने निर्भरता (Oracle और Postgres ड्राइवरों) में इस तरह के एक फ़ाइल वाले कम से कम दो jar रों है, इसलिए उनमें से एक maven-assembly-plugin चलाने के बाद खो दिया है।

here वर्णित अनुसार, इन फ़ाइलों को संक्षेप में मर्ज करने के लिए maven-assembly-plugin के बजायका उपयोग कर सकते हैं।

वैकल्पिक रूप से, आप असफल ऑटोोडिसवरी तंत्र को हटाने के लिए Class.forName(...) का उपयोग कर सकते हैं।

+0

धन्यवाद, छाया प्लगइन बहुत अच्छा था। यह मेवेन-असेंबली-प्लगइन के लिए एक महत्वपूर्ण "ज्ञात मुद्दा" है, हम शायद इससे दूर रहें ... – Scis

संबंधित मुद्दे