2016-12-05 39 views
0

比方說,我有:重用搖籃構建腳本在其他項目

  • 項目將包含哪些應用另一個腳本集結A.gradle包含了一堆的任務的build.gradle腳本
  • 項目B,其中我要使用任務從集結A.gradle

集結A.gradle看起來是這樣的:

task someTask << { 
    // do stuff 
} 

看來解決方案是創建一個獨立的定製Gradle插件,所以我爲此創建了項目C.它包含copypasted build-A.gradle腳本和MyPlugin類,用apply(Project project)方法擴展插件。

  1. 有沒有什麼辦法可以引用我的build-A.gradle中從MyPlugin聲明的任務?
  2. 如果不是,我該如何將腳本「轉換」爲任務類?例如。如何從類中獲得像configurations,ant等屬性?

回答

1

有什麼辦法來指代從 爲myplugin在我的集結A.gradle聲明的任務?

既然你已經創建項目C,這樣它的包裝插件罐子,可在類路徑中,你可以把在ProjectC/src/main/resources/build-A.gradlebuild-A.gradle。然後,你可以做以下的ProjectC/src/main/groovy/.../MyPlugin.groovy

class MyPlugin implements Plugin<Project> { 
    void apply(Project project) { 
     applyFromClasspath(project, 'build-A.gradle') 
    } 

    void applyFromClasspath(Project project, String path) { 
     InputStream in = getClass().classloader.getResourceAsStream(path) 
     if (in == null) throw new RuntimeException("No such resource $path") 
     in.withStream { InputStream stream -> 
      File localFile = project.file("${project.buildDir}/MyPlugin/$path") 
      localFile.parentFile.mkdirs() 
      localFile.bytes = stream.bytes 
     } 
     project.apply(from: localFile) 
    } 
} 

怎麼能得到這樣的配置,螞蟻等,從 的類屬性保持?

這些可從Project實例獲得(例如project.configurationsproject.ant等)。 Project對象隱含在build.gradle文件中,因此configurations將委託給project.configurations等。如果您想在插件中使用相同的內容,則可以使用project.with { ... }。例如:

void apply(Project project) { 
    project.with { 
     configurations { ... } 
     ant.echo(message: 'Hello') 
    } 
} 

@see Object.with(Closure)