我已经创建了一个独立的插件和一个简单的演示应用程序,我需要开发。这两种功能都添加到了与app-module和plugin-module相同的项目中,这样我就可以轻松地开发和测试我用插件编写的特性。我假设如果我将插件的源代码添加到buildSrc/build.gradle.kts中,我将能够引用应用程序中的插件源(我需要它来构建和应用插件)。完整的演示项目可以在这里找到:https://github.com/oizo/gradle-plugin-sample。
目前看来,当我在app/build.gradle.kts中应用插件时,它是可用的(自动完成正在工作),但是当我尝试用./gradlew build进行构建时,它失败了,这条消息是:
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/时,它也无法构建,具体如下:
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.发布于 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的用途更加清晰。
发布于 2019-10-22 09:30:52
我认为有两个问题:
Plugin实现类作为入口点对插件的使用者是可见的。一个简单的方法是使用gradlePlugin {}块。我建议至少升级到5.5.1级,并使用build init插件为您自动化所有这些。
请尝试gradle init --type kotlin-gradle-plugin生成插件项目。这将在插件build.gradle中添加类似于下面的代码,这将确保用户可以使用apply plugin: "stringPlugin"应用插件。gradlePlugin {
plugins {
stringPlugin {
id = "stringPlugin"
implementationClass = "com.example.StringPlugin"
}
}
}build.gradle中添加下面的内容,让gradle发现您的插件。buildscript {
...
dependencies {
classpath "com.example:stringplugin"
}
}在开发过程中,向maven发布可能不方便。您可以利用Gradle的复合构建在这方面提供帮助。在项目级别的settings.gradle中,添加以下内容:
includeBuild('./plugin') {
dependencySubstitution {
substitute module('com.example:stringplugin') with project(':plugin')
}
}这将指示gradle在请求:plugin时使用本地存在的com.example:stringplugin模块。这将有利于发展。
https://stackoverflow.com/questions/58484684
复制相似问题