2013-01-06 6 views
5

Vorrei chiedere aiuto per quanto riguarda sql-mvn-plugin. Secondo lo documentation se il file pom.xml non ha nulla sull'ordine del file - orderFile tag - che i file verranno eseguiti nell'ordine esatto in cui sono elencati. Ma non è vero! Se rimuovo il tag orderFile, i file verranno eseguiti in ordine crescente.sql-mvn-plugin esegue i file nell'ordine esatto in cui sono elencati in pom.xml

Per essere onesti, volevo utilizzare questo plugin per creare il database e importare i dati durante l'installazione. A causa del fatto che sto lavorando a più di 20 tabelle - gli script, la tabella e la sequenza e i vincoli, sono separati in singoli file - Non posso lavorare su file che non hanno un nome significativo. Sarebbe l'inferno in sé e l'utilizzo di questo plugin sarebbe inutile. D'altra parte non voglio avere questo passaggio da parte di Maven perché nella mia testa il maven è lo strumento per costruire, testare e distribuire la mia applicazione e lo strumento per evitare l'inferno dello script.

Come si può vedere nell'esempio seguente, l'ordine di esecuzione non è definito, e nonostante ciò durante l'esecuzione il primo file che viene eseguito * procedure/test_activate_all_partners.sql *, che è il penultimo nell'ordine dei file! A mio avviso, il primo file eseguito dovrebbe essere * tables/datapoint_component_types/table.sql *.

mio pom.xml:

   <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>sql-maven-plugin</artifactId> 
       <version>1.5</version> 
       <dependencies> 
        <dependency> 
         <groupId>postgresql</groupId> 
         <artifactId>postgresql</artifactId> 
         <version>9.1-901.jdbc4</version> 
        </dependency>    
       </dependencies> 
       <configuration> 
        <driver>org.postgresql.Driver</driver> 
        <url>jdbc:postgresql://localhost:5432/database</url> 
        <username>postgres</username> 
        <password>postgres</password> 
       </configuration> 
       <executions> 
        <execution> 
         <id>default-cli</id> 
         <goals> 
          <goal>execute</goal> 
         </goals> 
         <configuration> 
          <delimiter>/</delimiter> 
          <delimiterType>normal</delimiterType> 
          <autocommit>true</autocommit> 
          <fileset> 
           <!-- at home --> 
           <basedir>d:/PRIVAT/Projects/java/bigProject/</basedir> 
           <includes> 
            <!-- tables --> 
            <include>tables/datapoint_component_types/table.sql</include> 
            <include>tables/datapoint_datapoint_components/table.sql</include> 
            <include>tables/datapoint_java_result_types/table.sql</include> 
            <include>tables/datapoint_postgres_result_types/table.sql</include> 
            <include>tables/datapoint_result_types/table.sql</include> 
            <include>tables/datapoints/table.sql</include> 
            <include>tables/datatype_descs/table.sql</include> 
            <include>tables/datatypes/table.sql</include> 
            <include>tables/disabled_period/table.sql</include> 
            <include>tables/file_extensions/table.sql</include> 
            <include>tables/logs/table.sql</include> 
            <include>tables/partner_datatypes/table.sql</include> 
            <include>tables/partner_processes/table.sql</include> 
            <include>tables/partner_protocols/table.sql</include> 
            <include>tables/partner_protocols_attributes_details/table.sql</include> 
            <include>tables/partners/table.sql</include> 
            <include>tables/process_step/table.sql</include> 
            <include>tables/process_step_actions/table.sql</include> 
            <include>tables/process_steps_param/table.sql</include> 
            <include>tables/process_steps_partner_processes/table.sql</include> 
            <include>tables/processes/table.sql</include> 
            <include>tables/protocol_attributes/table.sql</include> 
            <include>tables/protocols/table.sql</include> 
            <include>tables/result_tables/table.sql</include> 
            <include>tables/valid_period/table.sql</include> 
            <!-- constrains --> 
            <include>tables/datapoint_component_types/sequences.sql</include> 
            <include>tables/datapoint_datapoint_components/sequences.sql</include> 
            <include>tables/datapoint_java_result_types/sequences.sql</include> 
            <include>tables/datapoint_postgres_result_types/sequences.sql</include> 
            <include>tables/datapoint_result_types/sequences.sql</include> 
            <include>tables/datapoints/sequences.sql</include> 
            <include>tables/datatype_descs/sequences.sql</include> 
            <include>tables/datatypes/sequences.sql</include> 
            <include>tables/disabled_period/sequences.sql</include> 
            <include>tables/file_extensions/sequences.sql</include> 
            <include>tables/logs/sequences.sql</include> 
            <include>tables/partner_datatypes/sequences.sql</include> 
            <include>tables/partner_processes/sequences.sql</include> 
            <include>tables/partner_protocols/sequences.sql</include> 
            <include>tables/partner_protocols_attributes_details/sequences.sql</include> 
            <include>tables/partners/sequences.sql</include> 
            <include>tables/process_step/sequences.sql</include> 
            <include>tables/process_step_actions/sequences.sql</include> 
            <include>tables/process_steps_param/sequences.sql</include> 
            <include>tables/process_steps_partner_processes/sequences.sql</include> 
            <include>tables/processes/sequences.sql</include> 
            <include>tables/protocol_attributes/sequences.sql</include> 
            <include>tables/protocols/sequences.sql</include> 
            <include>tables/result_tables/sequences.sql</include> 
            <include>tables/valid_period/sequences.sql</include> 
            <!-- sequences --> 
            <include>tables/datapoint_component_types/constraints.sql</include> 
            <include>tables/datapoint_datapoint_components/constraints.sql</include> 
            <include>tables/datapoint_java_result_types/constraints.sql</include> 
            <include>tables/datapoint_postgres_result_types/constraints.sql</include> 
            <include>tables/datapoint_result_types/constraints.sql</include> 
            <include>tables/datapoints/constraints.sql</include> 
            <include>tables/datatype_descs/constraints.sql</include> 
            <include>tables/datatypes/constraints.sql</include> 
            <include>tables/disabled_period/constraints.sql</include> 
            <include>tables/file_extensions/constraints.sql</include> 
            <include>tables/logs/constraints.sql</include> 
            <include>tables/partner_datatypes/constraints.sql</include> 
            <include>tables/partner_processes/constraints.sql</include> 
            <include>tables/partner_protocols/constraints.sql</include> 
            <include>tables/partner_protocols_attributes_details/constraints.sql</include> 
            <include>tables/partners/constraints.sql</include> 
            <include>tables/process_step/constraints.sql</include> 
            <include>tables/process_step_actions/constraints.sql</include> 
            <include>tables/process_steps_param/constraints.sql</include> 
            <include>tables/process_steps_partner_processes/constraints.sql</include> 
            <include>tables/processes/constraints.sql</include> 
            <include>tables/protocol_attributes/constraints.sql</include> 
            <include>tables/protocols/constraints.sql</include> 
            <include>tables/result_tables/constraints.sql</include> 
            <include>tables/valid_period/constraints.sql</include> 
            <!-- procedures --> 
            <include>procedures/test_activate_all_partners.sql</include> 
            <!-- testdata --> 
            <include>testdata/data.sql</include> 
           </includes> 
          </fileset> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

L'output:

d:/PRIVAT/Projects/java/bigProject>mvn sql:execute 
[INFO] Scanning for projects... 
... 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building EJB 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- sql-maven-plugin:1.5:execute (default-cli) @ DiLibCoreEJB --- 
[INFO] Executing file: sql\procedures\test_activate_all_partners.sql 
[INFO] Executing file: sql\tables\datapoints\constraints.sql 
[ERROR] Failed to execute: 
ALTER TABLE 
datapoints 
ADD 
CONSTRAINT datapoints_pkey PRIMARY KEY (datapoint_id); 

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 2.503s 
[INFO] Finished at: Sun Jan 06 17:49:40 CET 2013 
[INFO] Final Memory: 4M/77M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli) on project DiLibCoreEJB: ERROR: relation "datapoints" does not exist -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 
d:/PRIVAT/Projects/java/bigProject> 

Grazie per qualsiasi aiuto in anticipo!

risposta

9

Forse mi fraintendono un paio di cose, ma un excerpt from the docs dice:

File (s) contenente istruzioni SQL per caricare. Utilizzare un set di file solo se si desidera utilizzare schemi file ant-like, altrimenti utilizzare srcFiles. L'ordine si basa su un evento corrispondente durante la scansione della directory (non l'ordine di include!)

il che significa che si dovrebbe usare srcFiles invece di includes. Significa qualcosa come questo:

<configuration> 
    <srcFiles> 
    <srcFile>first.sql</srcFile> 
    <srcFile>second.sql</srcFile> 
    <srcFile>a.sql</srcFile> 
    .. 
    </srcFiles> 
    . 
</configuration> 

BTW: percorso assoluto in voi configurazione:

d:/PRIVAT/Projects/java/bigProject/ 

dovrebbe essere evitato.

+0

Hai ragione in entrambi i casi! :) Grazie per l'aiuto! – SayusiAndo