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

このタスクは、現在のタスク名の開始パラメータ内にあります。開始パラメータを介して呼び出された場合は、タスク名に現在のプロジェクト名が接頭辞として含まれているかどうかがチェックされ、現在のプロジェクトパスまたはルートプロジェクトパスが出力されます。

残念ながら、私はあなたのケースに対して他の解決策を知りません。確かに、正確な目的のために修正する必要があるかもしれません。

関連する問題