2013-08-22 15 views
5

'mvn install' çalıştırırken veritabanı şemasını otomatik olarak oluşturabilmem için pom.xml adımı oluşturmaya çalışıyorum. Bunu yapmak için "maven-cayenne-plugin" kullanıyorum. Bu çıktıyı görebildiğim için eklenti (entegrasyon testi aşamasında) çağrılıyor. Ancak mojo istisna ile başarısız olur: (Bunu görmek için -e ve -X bayrağını kullandım). Geçiş kapsamındaki Derby JDBC sürücüleri için bağımlılık kapsamı (cayenne)

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

(denemek ve EmbeddedDriver kullanabilir ve olsun veya olmasın benim bağımlılık olarak 'derbyclient' ya da basitçe 'derby' eklerseniz aynı olsun).

Sorunu çoğaltması gereken bir pom.xml dosyası. Windows'ta MVN 3 kullanıyorum. [Apache Maven'in 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> 

Bu, ana src/geçerli cayenne "datamap.map.xml" dosyası (gerektirir/kaynaklar), burada daha önce yapılmış bir tane:

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

DÜZENLEME:

fazla bilgi ekleme.

derbyclient-10.10.1.1.jar sınıfı 'org.apache.derby.jdbc.ClientDriver' sınıfını içerir (Netbeans'ten JAR'yi genişletir).

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

ÇÖZÜM:

-X bayrak CLASSPATH'E doğru JAR başvuruda bulunuyor gösteriyor gibi çalışan pom.xml (cevabı ve yorumumu bakınız):

<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' aslında' derbyclient 'bağımlılığında bulunduğundan emin misiniz? 2) '-X' komut satırı parametresiyle çalışmaya çalışın ve söz konusu eklentinin yürütülmesi üzerine sınıf yolunun bu bağımlılığı içerip içermediğini görün. –

+0

Maven araçlarının maven deposundan derbyclient.jar dosyasının bir kopyasını başarıyla alıp almadığını söyleyebilir misiniz? Ben genellikle Maven kullanmıyorum, ama bazen sürüm numarasının jar isminde kodlandığını düşünüyorum, belki de derbyclient_10_10_1_1.jar gibi bir şey almanız gerekebilir. –

+0

Orijinal Yazımımı düzenlerim - ancak 1) ve 2) 'ye olan hızlı cevap, "evet" dir (JAR'dadır) ve 2) Sınıf yolunun doğru olduğundan (-X çıkışından) emin olun. – monojohnny

cevap

5

sağlamak Derby sürücüsü eklenti yürütme sırasında kullanılabilir (kod derleme sırasında vs), eklentinin kendisinin bir bağımlılığı olarak eklemeniz gerekir:

<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

Büyük - Ben aslında 'derby' (sadece derbyclient'in aksine) bağımlılığı yapmak ve JDBC sürücüsünü EmbeddedDriver'a çevirmek için geri dönmek zorunda kaldım. (İstemci JAR, bellek içi veritabanını gerçekten oluşturamaz). – monojohnny

+0

Çıkar: Bu, Maven veya Plugin ile ilgili bir sorun mu? Proje bağımlılıkları için '' metninin 'olması, eklentinin bağımlılığı görmesini sağlamak için yeterli midir? – monojohnny

+0

Anladığım şekilde bu bir Maven özelliği ve bu tasarım gereğidir. "Düzenli" bağımlılıklar kendi kodunuzun derlenmesi veya yürütülmesi için gerekenleri tanımlar. kapsamındaki bağımlılıklar eklentinin neye ihtiyacı olduğunu tanımlar.Bunlar tamamen farklı şeyler. –