2016-08-30 139 views
1

我有父項目和子項目。家長build.gradle是空的,settings.xml包含include 'child'和 兒童的build.gradle我有一個任務執行Gradle任務的項目路徑

task('executionPath') << { 
    println projectDir 
} 

這個任務應該打印到項目上構建啓動的路徑。

如果我通過./gradlew executionPath調用它我希望它顯示根項目,例如的路徑C:\projects\parent

如果我通過./gradlew child:executionPath調用它我希望它顯示子項目,例如的路徑C:\projects\parent\child

我已經試過如下:

  • projectDir總是路徑孩子
  • new File('.')總是路徑父
  • System.getProperty("user.dir")總是路徑父

回答Gradle: get folder from which "gradle" was executed是沒有幫助的我的情況。我如何實現上述目標?

+0

[Gradle:get gradle]執行文件夾的可能的副本(http://stackoverflow.com/questions/16729293/gradle-get-folder-from-which-gradle-was-wascuted) –

+0

@ MichaelEaster這個鏈接不回答我的問題,請參閱我的編輯 –

回答

1

這不是非常簡單的解決方案,但是您可以使用啓動參數來查明是否爲根項目或當前調用任務。類似這樣的:

task('executionPath') << { 

    //find the argument representing current task 
    String calledTaskName = null; 
    for (String taskArgument : project.getGradle().startParameter.taskRequests.get(0).args) { 
     if (taskArgument.equals(name) || taskArgument.endsWith(':'+name)) { 
      calledTaskName = taskArgument; 
     } 
    } 

    if (calledTaskName == null) { 
     println 'Task was not called via arguments' 
     return; 
    } 

    //check, whether task was called on root project or for subproject only 
    if (calledTaskName.startsWith(project.getPath())) { 
     println projectDir 
    } else { 
     println System.getProperty("user.dir") 
    } 
} 

此任務正在查看當前任務名稱的開始參數。如果通過啓動參數調用它,則會檢查任務名稱是否包含當前項目名稱作爲前綴,並根據它打印出當前項目路徑或根項目路徑。

不幸的是,我不知道你的情況有任何其他解決方案。當然,您可能需要對其進行修改以達到確切目的。