2013-01-06 25 views
5

Chciałbym poprosić o pomoc dotyczącą sql-mvn-plugin. Zgodnie z documentation, jeśli plik pom.xml nie ma nic na temat kolejności plików - znacznik orderFile - pliki będą wykonywane w kolejności, w jakiej zostały wymienione. Ale to nie jest prawda! Jeśli usuniemy tag zamówienia orderFile, pliki będą domyślnie wykonywane rosnąco.sql-mvn-plugin wykonuje pliki w dokładnej kolejności, ponieważ są one wymienione w pom.xml

Szczerze mówiąc, chciałem użyć tej wtyczki do utworzenia bazy danych i importowania danych podczas instalacji. Z uwagi na fakt, że pracuję więcej niż 20 tabel - skrypty, tabela i sekwencja oraz ograniczenia są rozdzielane na pojedyncze pliki - nie mogę pracować z plikami, które nie mają znaczącej nazwy. Byłoby to samo piekło i użycie tej wtyczki byłoby bezwartościowe. Z drugiej strony nie chcę tego robić na zewnątrz od maven, ponieważ w mojej głowie maven jest narzędziem do budowania, testowania i wdrażania mojej aplikacji i narzędzia, aby uniknąć scenariusza piekła.

Jak widać w poniższym przykładzie, kolejność wykonywania nie jest zdefiniowana i pomimo tego podczas wykonywania pierwszego pliku, który jest wykonywany, * procedury/test_activate_all_partners.sql *, który jest przedostatnim w kolejności plików! W moim rozumieniu pierwszym wykonanym plikiem powinny być * tables/datapoint_component_types/table.sql *.

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

Wyjście:

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> 

Dzięki za wszelką pomoc z góry!

Odpowiedz

9

Może nie rozumieją do rzeczy ale excerpt from the docs mówi:

plik (i) zawierający instrukcje SQL do załadowania. Zestawu plików można używać tylko wtedy, gdy chcesz używać plików mrówek, w przeciwnym razie użyj srcFiles. Kolejność jest oparta na występowaniu dopasowania podczas skanowania katalogu (nie kolejność obejmuje!)

co oznacza, że ​​należy użyć srcFiles zamiast includes. Oznacza coś takiego:

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

BTW: bezwzględną ścieżkę w was konfiguracji: należy unikać

d:/PRIVAT/Projects/java/bigProject/ 

.

+0

Masz rację w obu przypadkach! :) Dzięki za pomoc! – SayusiAndo