2015-03-31 19 views
4

我有一個多項目構建。子項目採用樹形結構(不平坦)。 在root build.gradle文件中,我有一個方法爲編譯階段做了一些常見的事情。獲取gradle中任務的項目名稱

我想爲每個子項目分開目標目錄。所以,當我編譯整個項目時,我會爲每個子項目創建自己的工件。 上面提到的方法會編譯,所以它需要知道它編譯的是哪個項目。

如果我使用「gradle:subproject1:subsubproject1:compile」命令,那麼project.name仍然包含根項目名稱。但我需要在運行時才知道調用方法的任務項目。

的問題是:

  1. 是不是好主意,在所有有單獨目標的子項目?
  2. 如何理解此方法內調用方法的任務的項目?
+0

爲什麼你需要運行模塊/子項目特定的任務?如果你從根目錄運行編譯,它應該建立所有的子項目。 – mushfek0001 2015-03-31 13:10:09

+0

是的,但我也想有能力只編譯子項目(有依賴關係)來加快速度 – mrzodiak 2015-04-02 13:03:30

回答

6

如果任務是在子項目中定義的,那麼您可以簡單地使用project.name來獲取運行任務的項目名稱。 您可以通過添加以下代碼的build.gradle位於根項目嘗試一下,例如:

allprojects { 
    task printProjName << { 
     println ">> " + project.name 
    } 
} 

然後,執行任務printProjName會導致類似下面的一個輸出:

:printProjName 
>> Gradle 
:projA:printProjName 
>> projA 
:projB:printProjName 
>> projB 
:projA:projA1:printProjName 
>> projA1 
:projA:projA2:printProjName 
>> projA2 
+0

Thx。但方法是在root項目中定義的,如果我嘗試從方法中打印project.name,它會返回根項目名稱。我假設唯一的出路是將project.name作爲參數傳遞給方法 – mrzodiak 2015-04-02 13:01:17

+0

右鍵 - 您可以將項目對象傳遞給該函數,然後您將可以訪問所有項目屬性。 – 2015-04-02 14:46:51