2014-11-04 44 views
0

我有一個需求,其中gradle腳本(或gradle插件)必須解析gradle文件並打印所有特定類型的任務;我試着引用gradle工具API,但沒有成功。閱讀gradle腳本並找到其中定義的任務

這裏是我的嘗試:

ProjectConnection connection = GradleConnector.newConnector().forProjectDirectory(new File(System.env.REPO_ROOT)).connect() 
try { 
    BuildEnvironment environment = connection.model(BuildEnvironment.class).get() 
    connection.model(GradleProject.class).get().getTasks().each { 
     if (it instanceof EMTest) { 
      println it 
     } 
    } 
} finally { 
    connection.close() 
} 

打印在我目前的build.gradle,因爲無處我指定的目標文件的gradle,預計任務列表。

當我試圖用下面的代碼運行(而不是打印/查找任務)。有用。

ProjectConnection connection = GradleConnector.newConnector().forProjectDirectory(new File(System.env.REPO_ROOT)).connect() 
try { 
    BuildEnvironment environment = connection.model(BuildEnvironment.class).get() 
    def build = connection.newBuild() 
    /* This is where the gradle script location is provided */ 
    build.withArguments("--continue", "-b", System.env.REPO_ROOT + "/tests/suites/${project.lrgs}.gradle", 
      "-PlrgName=${project.lrgs}", "-PlrgMetadataLoc=${lrgMetadataLoc}") 
    build.forTasks(project.lrgs) 
    build.setStandardOutput(System.out) 
    build.run() 
} finally { 
    connection.close() 
} 

我檢查了gradle tooling API但沒有成功。請幫忙。

回答

1

工具API允許外部工具(例如IDE)與Gradle構建進行交互。 Gradle構建腳本或插件可以遍歷project.tasks

+0

行同意當它同gradle這個文件中。我的要求是這樣的: 運行:gradle runSuite -PtestScriptFile = foo 這將在build.gradle中運行runSuite任務;但runSuite將不得不在'foo.gradle'中運行類型爲MyTest的所有任務(由項目屬性提供)。 MyTest是自定義測試任務類型,用於運行定製gradle插件中定義的perl腳本/ shell腳本。 – 2014-11-04 08:59:37

0

只是也許使用GradleBuild將工作?從http://www.gradle.org/docs/current/userguide/organizing_build_logic.html60.4。運行的另一個搖籃從構建

建立在你的情況的東西沿着

task othertasks(type: GradleBuild) { 
    buildFile = 'other.gradle' 
    tasks = ['tasks'] 
} 
+0

這將打印other.gradle的所有任務。我的要求是從other.gradle查詢某些類型的任務並打印/運行它們。 – 2014-11-04 13:42:16

+0

您可以爲此創建一個特定的任務 – judoole 2014-11-04 13:55:20

+0

實際上,這就是我當前的other.gradle的結構。例如,如果它有兩個類型爲EMTest的任務,那麼還有另一個任務只是將dependsOn標記爲任務。 然後從我的build.gradle我運行這個特定的任務other.gradle 但我想看看gradle提供了一種方式來閱讀other.gradle和查詢類型EMTest的任務,以便額外的特殊任務是不是必需的。 – 2014-11-04 14:31:11