2010-03-28 36 views
3

我有這個多模塊項目。在多模塊項目中執行maven的腳本

在每次構建的開始,我想運行一些bat文件。

所以,我做了以下內容:

<profile> 
      <id>deploy-db</id> 
      <build> 
       <plugins> 
<plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.1.1</version> 
     </plugin> 
       </plugins> 
       <pluginManagement> 
        <plugins> 
         <plugin> 
          <groupId>org.codehaus.mojo</groupId> 
          <artifactId>exec-maven-plugin</artifactId> 
          <version>1.1.1</version> 
          <executions> 
           <execution> 
            <phase>validate</phase> 
            <goals> 
             <goal>exec</goal> 
            </goals> 
            <inherited>false</inherited> 
           </execution> 
          </executions> 
          <configuration> 
           <executable>../database/schemas/import_databases.bat</executable> 
          </configuration> 
         </plugin> 
        </plugins> 
       </pluginManagement> 
      </build> 
     </profile> 

當我從根我得到了我的每一個模塊執行一遍又一遍這個腳本運行mvn verify -Pdeploy-db

我希望它只在根模塊中執行一次。

我缺少什麼?

感謝

+1

這是一個「好」的問題。這裏的問題是**配置文件的效果**被繼承,並且maven exec插件也因此也被所有的孩子執行。需要挖掘(但恐怕不會有一個乾淨的解決方案)。 – 2010-03-29 08:54:15

+0

沒有,我非常喜歡Maven,它的想法很棒(像共產主義:-))。但是當談到像那樣簡單的東西時,它絕對會失敗......看起來我必須編寫一個自定義插件才能完成這件事。 – Roman 2010-03-29 14:36:04

回答

1

我可能是錯誤的,但是當你添加一個插件<pluginManagement>部分每個子模塊繼承了它和「跑」了。

我認爲你應該將你的exec-maven-plugin及其<execution>移動到正常<plugins>部分。

+1

這並不完全正確。 PluginManagment只配置插件。不要告訴他任何關於申請的事情。 簡而言之,這是行不通的... – Roman 2010-03-28 12:57:05

+0

當你添加執行部分 - 這確實說了一些關於它的調用... – Yaneeve 2010-03-28 13:03:36

+1

@Roman,從子模塊運行'mvn help:effective-pom'看看是繼承/應用什麼和不是什麼 – 2010-03-28 13:13:23

0

所以你遇到的問題是,你正試圖在父POM中做點什麼。這不是父母們在maven中設計的方式(即不是「maven方式」)。你應該只在「葉節點」poms中執行操作,父母只是爲了聚合,並將共享的行爲放在每個孩子身上。

因此,如何調用您的腳本的簡單答案是分析您的孩子之間的依賴關係,以確定首先發生哪些需求(並強制執行此操作需要依賴),然後將該插件添加到該孩子。如果出於某種原因它不適合那個孩子,你可以讓另一個孩子執行這個動作。

在附註中,永遠不要在maven中引用相關的文件路徑。您正在使用「../database/schemas/import_databases.bat」。如果import_databases.bat不在項目目錄中,那麼假設它在父目錄中要求一團糟。你應該使用諸如「$ {basedir} /src/main/scripts/import_databases.bat」