2016-08-30 143 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") 
    } 
} 

此任务正在查看当前任务名称的开始参数。如果通过启动参数调用它,则会检查任务名称是否包含当前项目名称作为前缀,并根据它打印出当前项目路径或根项目路径。

不幸的是,我不知道你的情况有任何其他解决方案。当然,您可能需要对其进行修改以达到确切目的。