Il a fallu un peu de bidouillage, mais je l'ai eu pour déposer, créer et créer le schéma pour H2 et MySQL. Encore besoin de le terminer pour Oracle et SQL Server 2008. J'ai placé les commandes DROP et CREATE exactes dans les propriétés et dans certains cas (comme H2) nécessaires pour ignorer complètement la base de données de création. Voici à quoi il ressemble:
<plugin>
<!-- Used to automatically drop (if any) and create a database prior to running integration test cases. -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<dependencies>
<dependency>
<!-- Adds the correct JDBC driver as a dependency of this plugin -->
<groupId>${database.groupId}</groupId>
<artifactId>${database.artifactId}</artifactId>
<version>${database.version}</version>
</dependency>
</dependencies>
<configuration>
<!-- common configuration shared by all executions -->
<driver>${database.class}</driver>
<username>${database.username}</username>
<password>${database.password}</password>
<url>${database.url}</url>
</configuration>
<executions>
<execution>
<!-- Start by dropping the database (we'll leave it intact when finished) -->
<id>drop-db</id>
<phase>pre-integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<!-- Can't use regular URL in case database doesn't exist -->
<url>${database.url.alternate}</url>
<skip>${database.sqlDrop.skip}</skip>
<autocommit>true</autocommit>
<sqlCommand>${database.sqlDrop};</sqlCommand>
<onError>continue</onError>
</configuration>
</execution>
<execution>
<!-- then create a new database -->
<id>create-db</id>
<phase>pre-integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<!-- Can't use regular URL in case database doesn't exist -->
<url>${database.url.alternate}</url>
<skip>${database.sqlCreate.skip}</skip>
<autocommit>true</autocommit>
<sqlCommand>${database.sqlCreate};</sqlCommand>
<onError>continue</onError>
</configuration>
</execution>
<execution>
<!-- and finally run the schema creation script we just made with the hibernate3-maven-plugin -->
<id>create-schema</id>
<phase>pre-integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<skip>${database.sqlSchema.skip}</skip>
<autocommit>true</autocommit>
<srcFiles>
<srcFile>target/hibernate3/sql/create-${database.vendor}-schema.sql</srcFile>
</srcFiles>
<onError>continue</onError>
</configuration>
</execution>
</executions>
</plugin>
Pourriez-vous donner un exemple d'état incohérent de DB? Il sera abandonné lors des tests suivants ou en cours de nettoyage de toute façon. De plus, si vous utilisez la base de données de création dans le script de construction, vous perdez la possibilité d'exécuter un test spécifique à partir de l'EDI (au moins Eclipse), car vous devrez créer une base de données de test à la main. –