2016-09-21 63 views
0

我想創建一個自定義插件,我可以在gradle.build文件中應用。有幾種方法可以做到這一點,但我使用buildSrc文件夾來做到這一點。這意味着該插件將被綁定到我的構建,而不是便攜式。 從docs的buildSrc文件夾應具有以下特性:無法加載在Android Studio中的自定義Gradle插件的類

buildSrc項目 你可以把源在rootProjectDir/buildSrc/src目錄/主/常規目錄的任務類。 Gradle將負責編譯和測試任務類並使其在構建腳本的類路徑中可用。任務類對構建使用的每個構建腳本都可見。但是,它在構建版之外是不可見的,因此您不能在構建它的構建之外重用任務類。使用buildSrc項目方法會將任務聲明(即任務應該執行的任務聲明)從任務實現中分離出來,也就是說,任務是如何實現的。

但無論如何,我的問題是下面:

我已經創造了根項目路徑buildSrc目錄,創建了由IDE識別的常規文件夾。

下面

是我的摺疊結構,而我得到的錯誤:現在,這裏

enter image description here

是任務和插件本身:

RenameAppVersionNameTask.groovy:

package com.myplugins 
import org.gradle.api.DefaultTask 
import org.gradle.api.tasks.TaskAction 

class RenameAppVersionNameTask extends DefaultTask { 

    @TaskAction 
    def run() { 
     project.configure(project) { 
      // Check if plugin works on an Android module 
      if (it.hasProperty("android")) { 
       // Iterate over app build variants (build types + flavors) 
       project.android.applicationVariants.all { variant -> 
        // Only change debug build type variants 
        if (variant.buildType.name == project.android.buildTypes.debug.name) { 
         // Rename versionName 
         def customVersionName = variant.mergedFlavor.versionName 
         variant.mergedFlavor.versionName = customVersionName + " custom" 
        } 
       } 
      } 
     } 
    } 

    RenameAppVersionNameTask() { 
     group = 'customPlugin' 
     description = 'Renames versionName of the app depends on the current git branch name' 

    } 
} 

CustomPlugin.groovy:

package com.myplugins 
import org.gradle.api.Plugin 
import org.gradle.api.Project 

class CustomPlugin implements Plugin<Project> { 

    @Override 
    void apply(Project project) { 
     project.task('renameAppVersionName', type: RenameAppVersionNameTask) 
     project.tasks.getByName('preBuild').dependsOn('renameAppVersionName') 
    } 

} 

我對gradle這個同步接收的錯誤是:

Failed to sync Gradle project 'My GradlePluginApplication' 
Error:Unable to load class 'CustomPlugin'. 
Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.) 
<a href="syncProject">Re-download dependencies and sync project (requires network)</a></li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem. 
<a href="stopGradleDaemons">Stop Gradle build processes (requires restart)</a></li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes. 

還我發現我甚至不能應用插件:

enter image description here

我確認Android Studio中使用gradle這個包裝。 也如果需要,下面gradle-wrapper.properties是:

distributionBase = GRADLE_USER_HOME distributionPath =包裝紙/ dists中 zipStoreBase = GRADLE_USER_HOME zipStorePath =包裝紙/ dists中 distributionUrl = HTTPS://services.gradle.org/distributions /gradle-2.10-all.zip

回答

2

看起來好像您錯過了位於buildSrc目錄內的build.gradle文件。這將告訴buildSrc項目使用哪些插件以及需要依賴哪些依賴項。

它看起來類似於這樣

apply plugin: 'groovy' 

repositories { 
    jcenter() 
} 

dependencies { 
    compile localGroovy() 
    compile gradleApi() 
} 

的東西,將住在的buildSrc

根我也真不知道你需要創建一個自定義插件,並且可以改用你的任務在你的項目的gradle文件中。

+1

我正在關注演示。這就是爲什麼我這樣構建它。顯然它可以通過一項任務完成。我沒有意識到我需要一個build.gradle文件。這解決了我的問題。謝謝。 – j2emanue

+0

在我的情況下,我丟失了「jcenter()」存儲庫,只有「mavenCentral」,thx要求我添加jcenter(當然這是在buildSrc目錄中的build.gradle) – xiaoyee

相關問題