首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使android-app模块识别和使用gradle-plugin模块源

如何使android-app模块识别和使用gradle-plugin模块源
EN

Stack Overflow用户
提问于 2019-10-21 10:46:38
回答 2查看 421关注 0票数 4

我已经创建了一个独立的插件和一个简单的演示应用程序,我需要开发。这两种功能都添加到了与app-module和plugin-module相同的项目中,这样我就可以轻松地开发和测试我用插件编写的特性。我假设如果我将插件的源代码添加到buildSrc/build.gradle.kts中,我将能够引用应用程序中的插件源(我需要它来构建和应用插件)。完整的演示项目可以在这里找到:https://github.com/oizo/gradle-plugin-sample

目前看来,当我在app/build.gradle.kts中应用插件时,它是可用的(自动完成正在工作),但是当我尝试用./gradlew build进行构建时,它失败了,这条消息是:

代码语言:javascript
复制
FAILURE: Build failed with an exception.

* Where:
Build file '/Users/MyUser/github/gradle-plugin-sample/app/build.gradle.kts' line: 10

* What went wrong:
Script compilation error:

  Line 10: apply<io.hvam.android.plugin.StringPlugin>()
                 ^ Unresolved reference: io

很明显,我漏掉了什么。

我尝试过在这个后https://stackoverflow.com/a/42263532/1181023中提出的解决方案,这似乎是一个类似的问题,但当我运行./gradlew build --include-build plugin/时,它也无法构建,具体如下:

代码语言:javascript
复制
FAILURE: Build failed with an exception.

* What went wrong:
Included build in /Users/MyUser/github/gradle-plugin-sample/plugin has a root project whose name 'plugin' is the same as a project of the main build.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-23 11:18:24

我似乎误解了gradle如何使用buildSrc文件夹。我已经将buildscript的内容移到了buildSrc/build.gradle.kts中,但忽略了实际的buildscript扩展。这在某种程度上解决了app-module在构建时无法识别plugin源的问题。与修复相关的特定更改可以在int 此承诺中查看。回购程序中的示例代码现在按预期进行构建。

这使buildSrc文件夹:https://stackoverflow.com/a/13875350/1181023的用途更加清晰。

票数 0
EN

Stack Overflow用户

发布于 2019-10-22 09:30:52

我认为有两个问题:

  • 您的插件必须以这样的方式打包,即您的Plugin实现类作为入口点对插件的使用者是可见的。一个简单的方法是使用gradlePlugin {}块。我建议至少升级到5.5.1级,并使用build init插件为您自动化所有这些。 请尝试gradle init --type kotlin-gradle-plugin生成插件项目。这将在插件build.gradle中添加类似于下面的代码,这将确保用户可以使用apply plugin: "stringPlugin"应用插件。
代码语言:javascript
复制
gradlePlugin {
   plugins {
     stringPlugin {
         id = "stringPlugin"
         implementationClass = "com.example.StringPlugin"
     }
   }
}
  • 其次,您的插件必须对buildscript类路径可见,这样它才能应用您的插件。如果您已经将插件发布到maven,那么您可以在项目级别的build.gradle中添加下面的内容,让gradle发现您的插件。
代码语言:javascript
复制
buildscript {
    ...
    dependencies {
       classpath "com.example:stringplugin"
    }
}

在开发过程中,向maven发布可能不方便。您可以利用Gradle的复合构建在这方面提供帮助。在项目级别的settings.gradle中,添加以下内容:

代码语言:javascript
复制
includeBuild('./plugin') {
    dependencySubstitution {
        substitute module('com.example:stringplugin') with project(':plugin')
    }
}

这将指示gradle在请求:plugin时使用本地存在的com.example:stringplugin模块。这将有利于发展。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58484684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档