Sto cercando di compilare il mio pom.xml in modo da poter creare automaticamente lo schema del mio database quando si esegue 'mvn install'. Sto usando il "plugin di maven-cayenne" per fare questo. Questo è il plugin che viene chiamato (nella fase di test di integrazione), come posso vedere l'output. Ma il mojo fallisce con l'eccezione: (ho usato il flag -e e -X per vedere questo).Quale ambito di dipendenza per i driver JDBC Derby nell'interfaccia di integrazione (caienna)
java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDriver
(ottengo lo stesso se provo e uso l'EmbeddedDriver e se non includo 'derbyclient' o semplicemente 'derby' come la mia dipendenza).
Ecco un pom.xml che dovrebbe replicare il problema. Sto usando MVN 3 su Windows. [Apache 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>
Questo richiede anche un file "datamap.map.xml" cayenne valido (in src/main/risorse), ecco quello che ho fatto in precedenza:
<?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>
EDIT:
Aggiunta di ulteriori informazioni.
Il file derbyclient-10.10.1.1.jar contiene la classe 'org.apache.derby.jdbc.ClientDriver' (ha appena espanso il JAR da Netbeans).
La bandiera -X sembra dimostrare che il CLASSPATH sia correttamente riferimento alla JAR:
[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]
SOLUZIONE: lavora pom.xml (vedi risposta e il mio commento):
<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>
1) Sei sicuro che 'org.apache.derby.jdbc.ClientDriver' si trova effettivamente nella dipendenza' derbyclient'? 2) Provare a eseguire con il parametro '-X' della riga di comando e vedere se classpath sull'esecuzione del plugin in questione contiene questa dipendenza. –
Puoi sapere se gli strumenti di ricerca stanno recuperando una copia di derbyclient.jar dal repository di Maven? Generalmente non utilizzo Maven, ma penso che a volte il numero di versione sia codificato nel nome del jar, quindi forse è necessario recuperare qualcosa come derbyclient_10_10_1_1.jar? –
Modifica il mio post originale - ma la risposta rapida a 1) e 2) è "sì" (è nel JAR) e 2) Sono abbastanza sicuro che il percorso di classe sia corretto (dall'output -X). – monojohnny