2013-08-22 3 views
5

में डर्बी जेडीबीसी ड्राइवरों के लिए निर्भरता का दायरा मैं अपना pom.xml बनाने की कोशिश कर रहा हूं ताकि मैं 'mvn install' चलाते समय स्वचालित रूप से अपना डेटाबेस स्कीमा बना सकूं। मैं ऐसा करने के लिए "मेवेन-केयेन-प्लगइन" का उपयोग कर रहा हूं। यह प्लगइन कहा जाता है (एकीकरण-परीक्षण चरण में), क्योंकि मैं आउटपुट देख सकता हूं। लेकिन मोजो अपवाद के साथ विफल रहता है: (मैंने इसे देखने के लिए -ई और -एक्स ध्वज का उपयोग किया)।इंटरबैक्शन स्कोप (कैयेन)

java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDriver 

(मैं एक ही मिलता है अगर मैं कोशिश करते हैं और EmbeddedDriver का उपयोग करें और या नहीं, मैं अपने निर्भरता के रूप में 'derbyclient' या बस 'डर्बी' शामिल हैं)।

यहां एक pom.xml है जो समस्या को दोहराना चाहिए। मैं विंडोज़ पर एमवीएन 3 का उपयोग कर रहा हूं। [अपाचे Maven 3.0.4 (r1232337; 2012-01-17 08: 44: 56 + 0000)]

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany</groupId> 
    <artifactId>myproject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.cayenne.plugins</groupId> 
       <artifactId>maven-cayenne-modeler-plugin</artifactId> 
       <version>3.2M1</version> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.cayenne.plugins</groupId> 
       <artifactId>maven-cayenne-plugin</artifactId> 
       <version>3.2M1</version> 
       <executions> 
        <execution> 
         <id>cgen</id> 
         <configuration> 
          <superPkg>com.mycompany.model.generated</superPkg> 
          <map>${project.build.sourceDirectory}/../resources/datamap.map.xml</map> 
          <destDir>${project.build.sourceDirectory}</destDir> 
         </configuration> 
         <goals> 
          <goal>cgen</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>cdbgen</id> 
         <configuration> 
          <map>${project.build.sourceDirectory}/../resources/datamap.map.xml</map> 
          <driver>org.apache.derby.jdbc.ClientDriver</driver> 
          <url>jdbc:derby:memory:tracedb;create=true</url> 
          <username>test</username> 
         </configuration> 
         <goals> 
          <goal>cdbgen</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
<dependency> 
      <groupId>org.apache.derby</groupId> 
      <artifactId>derbyclient</artifactId> 
      <version>10.10.1.1</version> 
      <scope>compile</scope> 
     </dependency> 

    </dependencies> 
</project> 

यह भी एक वैध लाल "datamap.map.xml" फ़ाइल (src/मुख्य में की आवश्यकता है/संसाधन), यहाँ एक मैंने पहले बनाया है:

<?xml version="1.0" encoding="utf-8"?> 
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd" 
    project-version="6"> 
    <db-entity name="TEST"> 
     <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/> 
    </db-entity> 
</data-map> 

संपादित करें:

अधिक जानकारी जोड़ना।

डर्बीक्लिएंट -1010.1.1.जर में कक्षा 'org.apache.derby.jdbc.ClientDriver' (केवल नेटबीन्स से जेएआर का विस्तार किया गया है) शामिल है।

[DEBUG] (f) classpathElements = [<PROJECT-PATH>\mvn\target\classes, <HOME-DIR>\.m2\repository\org\apache\derby\derbyclient\10.10.1.1\derbyclient-10.10.1.1.jar] 

समाधान:

-X झंडा दिखाने के लिए कि CLASSPATH सही ढंग से जार संदर्भित कर रहा है लगता है काम कर pom.xml (उत्तर और मेरी टिप्पणी देखें):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany</groupId> 
    <artifactId>myproject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.cayenne.plugins</groupId> 
       <artifactId>maven-cayenne-modeler-plugin</artifactId> 
       <version>3.2M1</version> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.cayenne.plugins</groupId> 
       <artifactId>maven-cayenne-plugin</artifactId> 
       <version>3.2M1</version> 
<dependencies> 
     <dependency> 
     <groupId>org.apache.derby</groupId> 
     <artifactId>derby</artifactId> 
     <version>10.10.1.1</version> 
     </dependency> 
    </dependencies> 
       <executions> 
        <execution> 
         <id>cgen</id> 
         <configuration> 
          <superPkg>com.mycompany.model.generated</superPkg> 
          <map>${project.build.sourceDirectory}/../resources/datamap.map.xml</map> 
          <destDir>${project.build.sourceDirectory}</destDir> 
         </configuration> 
         <goals> 
          <goal>cgen</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>cdbgen</id> 
       <configuration> 
          <map>${project.build.sourceDirectory}/../resources/datamap.map.xml</map> 
          <driver>org.apache.derby.jdbc.EmbeddedDriver</driver> 
          <url>jdbc:derby:memory:tracedb;create=true</url> 
          <username>test</username> 
         </configuration> 
         <goals> 
          <goal>cdbgen</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
<dependency> 
      <groupId>org.apache.derby</groupId> 
      <artifactId>derbyclient</artifactId> 
      <version>10.10.1.1</version> 
      <scope>compile</scope> 
     </dependency> 

    </dependencies> 
</project> 
+0

1) क्या आप सुनिश्चित हैं कि 'org.apache.derby.jdbc.ClientDriver' वास्तव में' derbyclient' निर्भरता में स्थित है? 2) '-X' कमांड लाइन पैरामीटर के साथ चलाने की कोशिश करें और देखें कि प्लगइन के निष्पादन पर क्लासपाथ इस निर्भरता में है या नहीं। –

+0

क्या आप बता सकते हैं कि मेवेन उपकरण मैवेन रिपोजिटरी से derbyclient.jar की एक प्रति सफलतापूर्वक पुनर्प्राप्त कर रहे हैं या नहीं? मैं आम तौर पर मेवेन का उपयोग नहीं करता, लेकिन मुझे लगता है कि कभी-कभी संस्करण संख्या को जार नाम में एन्कोड किया जाता है, तो शायद आपको derbyclient_10_10_1_1.jar जैसे कुछ लाने की आवश्यकता है? –

+0

मैं अपना मूल पोस्ट संपादित करूंगा - लेकिन 1) और 2 का त्वरित उत्तर) "हां" है (यह जार में है) और 2) बहुत यकीन है कि क्लासपाथ सही है (-एक्स आउटपुट से)। – monojohnny

उत्तर

5

सुनिश्चित करने के लिए कि डर्बी ड्राइवर प्लगइन निष्पादन (आपके कोड संकलन के दौरान बनाम) के दौरान उपलब्ध है, आपको इसे प्लगइन की निर्भरता के रूप में जोड़ने की आवश्यकता है:

<plugin> 
    <groupId>org.apache.cayenne.plugins</groupId> 
    <artifactId>maven-cayenne-plugin</artifactId> 
    <version>3.2M1</version> 
    <dependencies> 
     <dependency> 
     <groupId>org.apache.derby</groupId> 
     <artifactId>derbyclient</artifactId> 
     <version>10.10.1.1</version> 
     </dependency> 
    </dependencies> 
    .... 
</plugin> 
+1

ग्रेट - मुझे वास्तव में निर्भरता के लिए 'डर्बी' (केवल डर्बीक्लिएंट के विपरीत) बनाने और जेडीबीसी चालक को एंबेडेडड्रिवर पर स्विच करने के लिए बदलना पड़ा - केवल त्रुटियों के बिना पोम चलाने के लिए। (क्लाइंट जेएआर वास्तव में इन-मेमोरी डेटाबेस बनाने में सक्षम नहीं है)। – monojohnny

+0

ब्याज से बाहर: क्या यह मेवेन, या प्लगइन के साथ एक समस्या है? परियोजना निर्भरताओं के लिए ' टेक्स्ट' नहीं होना चाहिए ताकि प्लगइन निर्भरता को देख सके? – monojohnny

+0

जिस तरह से मैं इसे समझता हूं यह एक मैवेन सुविधा है और यह डिज़ाइन द्वारा है। "नियमित" निर्भरता परिभाषित करती है कि आपके स्वयं के कोड को संकलित या निष्पादित करने की आवश्यकता है। जबकि के तहत निर्भरता परिभाषित करती है कि प्लगइन की क्या ज़रूरत है।वे पूरी तरह से अलग चीजें हैं। –

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