2010-01-22 83 views
3

我有一堆綁定到pre-integration-test階段的SQL命令,其作用是創建一個「測試」數據庫並將應用程序指向它。在命令行上運行目標的所有綁定實例

有時,我只想「重建」我的測試數據庫,而沒有生命週期中的所有其他東西。例如,如果我的測試是災難性的失敗並且搞砸了測試數據庫,那麼我可能需要重建幾次,直到我找出問題所在。

這裏是我的POM樣子:

<profile> 
    <id>test-setup-teardown</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>sql-maven-plugin</artifactId> 
        <version>1.3</version> 

        <dependencies> 
         <dependency> 
          <groupId>${database-dependency-groupId}</groupId> 
          <artifactId>${database-dependency-artifactId}</artifactId> 
          <version>${database-dependency-version}</version> 
         </dependency> 
        </dependencies> 

        <configuration> 
         <url>${test-database-admin-url}</url> 
         <username>${test-database-admin-username}</username> 
         <password>${test-database-admin-password}</password> 
         <driver>${database-driver}</driver> 
         <autocommit>true</autocommit> 
        </configuration> 

        <executions> 
         <execution> 
          <id>test-database-pre-setup</id> 
          <phase>pre-integration-test</phase> 
          <goals> 
           <goal>execute</goal> 
          </goals> 
          <configuration> 
           <sqlCommand>${test-database-teardown}</sqlCommand> 
           <onError>continue</onError> 
          </configuration> 
         </execution> 

         <execution> 
          <id>test-database-setup</id> 
          <phase>pre-integration-test</phase> 
          <goals> 
           <goal>execute</goal> 
          </goals> 
          <configuration> 
           <sqlCommand>${test-database-setup}</sqlCommand> 
          </configuration> 
         </execution> 

         <execution> 
          <id>test-database-schema</id> 
          <phase>pre-integration-test</phase> 
          <goals> 
           <goal>execute</goal> 
          </goals> 
          <configuration> 
           <url>${test-database-url}</url> 
           <username>${database-user}</username> 
           <password>${database-password}</password> 
           <srcFiles> 
            <srcFile>${basedir}/metadata/build/database/${database-engine}/appx.sql</srcFile> 
           </srcFiles> 
          </configuration> 
         </execution> 

         <execution> 
          <id>test-database-teardown</id> 
          <phase>post-integration-test</phase> 
          <goals> 
           <goal>execute</goal> 
          </goals> 
          <configuration> 
           <sqlCommand>${test-database-teardown}</sqlCommand> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

我怎樣才能運行這個文件的所有執行?像mvn sql:execute只能運行其中一個執行(我認爲最後一個)。

我試圖使綁定階段是一個屬性,然後允許用戶指定其他配置文件其更改默認從pre-integration-testvalidate,但爲什麼重建的執行正是如此解釋給別人:

mvn validate -Pforce-rebuild,test-setup-teardown 

只是強制實施非玩具項目在POM中有很多魔力的事實。請給我指路!

<ed>也許一個好的解決方案是從命令行通過id運行執行的一種方法? </ed >

回答

1

也許一個很好的解決辦法是通過ID在命令行中運行執行的方法嗎?

這是不可能的。執行是爲了綁定到生命週期。

,並呼籲sql:execute並通過在命令行上所有參數似乎並沒有成爲一個可行的選擇(這可能是在一個批處理腳本完成,但會有與srcFiles可選參數的問題反正)。

所以,在我看來,「少雪上加霜」的辦法是複製(嘆氣)其他配置文件中的sql-maven-plugin設置,例如rebuild,結合對validate階段所需的執行,並宣告validate目標作爲此配置文件中的默認目標。這將允許像這種類型的東西:

mvn -Prebuild 

也許一些優化是可能的,以避免重複(由variablelizing執行階段像你這樣),但是這意味着更多的黑魔法我(這可能不是理想的)。

+0

良好的默認目標調用。我也不喜歡重複,但同意這可能是最差的解決方案。謝謝! – 2010-01-28 15:36:09

0

「預集成測試」是您可以直接調用的階段。

mvn -Ptest-setup-teardown pre-integration-test 

這仍然會經過編譯的生命週期,複製資源,單元測試等,您可以嘗試添加-DskipTests=true到命令(不知道這是否會跳過集成測試階段太):

mvn -Ptest-setup-teardown pre-integration-test -DskipTests=true 
+2

我特別試圖避免經歷生命週期,因爲它需要3-4分鐘才能進行預集成測試。我已經嘗試將所有插件添加到配置文件中,以便它們可以輕鬆關閉,但是當嘗試進行分支行爲時(例如有時執行此操作,有時執行此操作等),這會增加很多複雜性。 – 2010-01-22 22:17:29

+0

這種類型的任務聽起來像是在maven之外完成的最好的任務類型,因爲它實際上與構建主應用程序沒有多大關係 – 2010-01-23 03:28:40

相關問題