2016-08-30 3 views
1

부모 및 자식 프로젝트가 있습니다. 부모의 build.gradlesettings.xml 내가 작업Gradle 작업이 실행되는 프로젝트 경로

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

이 작업은 빌드가 시작된에 투사 할 수있는 경로를 인쇄하도록되어있는 아이의 build.gradleinclude 'child' 및 을 포함, 비어 있습니다. 내가 ./gradlew executionPath에 의해 루트에 를 호출하면

가 나는 루트 프로젝트, 예를 들어,의 경로를 보여 기대 C:\projects\parent. 내가 ./gradlew child:executionPath에 의해 루트를 호출하면

나는이 아이 프로젝트, 예를 들어,의 경로를 보여 기대 C:\projects\parent\child. 대답 Gradle: get folder from which "gradle" was executed이에 도움이되지 않습니다

부모

  • projectDir 항상 경로 자녀에
  • new File('.') 항상
  • System.getProperty("user.dir") 항상 부모 경로 경로 :

    나는 다음을 시도했습니다 내 경우. 위의 내용을 어떻게 달성 할 수 있습니까?

+0

[Gradle : "gradle"이 실행 된 폴더 가져 오기] 가능한 복제본 (http://stackoverflow.com/questions/16729293/gradle-get-folder-from-which-gradle-was-executed) –

+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") 
    } 
} 

이 태스크는 현재 태스크 이름의 시작 매개 변수 내에서 찾고 있습니다. 시작 매개 변수를 통해 호출 된 경우 작업 이름에 현재 프로젝트 이름이 접두사로 포함되어 있는지 여부를 확인하고 현재 프로젝트 경로 또는 루트 프로젝트 경로를 출력합니다.

불행히도 귀하의 사례에 대한 다른 해결책을 모릅니다. 물론, 정확한 용도로 수정해야 할 수도 있습니다.

관련 문제