在同一个项目中本地应用自定义 gradle 插件

Ben*_*Ben 5 java groovy plugins gradle gradle-plugin

我写了一个 gradle 插件,我只想在我自己的项目中使用。这是一个简化的文件结构:

/root project
  |
  + build.gradle
  + settings.gradle
  + build/
  + some module/
      |
      + build.gradle
      + src/
      + build/
      + plugin/
         |
         + build.gradle
         + src/
         + build/
Run Code Online (Sandbox Code Playgroud)

我通过引用 jar 文件将插件添加到模块中

// From '/some module/build.gradle'

buildscript {
  dependencies {
    classpath files('./plugin/build/libs/payload-plugin-0.0.1-SNAPSHOT.jar')
  }
}

apply plugin: 'my-custom-plugin'
Run Code Online (Sandbox Code Playgroud)

起初它工作正常,但有一个问题。如果您清理项目并再次尝试构建它,它会失败,因为它'./plugin/build/libs/payload-plugin-0.0.1-SNAPSHOT.jar'不再存在,并且它不会尝试重建插件模块,因为这算作配置错误。

我尝试仅使用构建插件,gradlew :somemodule:plugin:build但它首先检查了 `:somemodule' 的构建脚本,所以它不起作用。

也试过classpath project(':somemodule:plugin')代替 jar 引用,但它说找不到插件。

Mat*_*and 4

将 gradle 插件的代码与该插件应该帮助构建的项目代码混合可能是一个坏主意。

您应该查看有关组织构建逻辑的gradle 文档,具体来说,我可能会先将插件源粘贴到buildSrc 目录中。

如果您将插件源放在buildSrc按照上述文档调用的目录中,它将自动编译并包含在您的构建类路径中。当您清理项目时它也不会被删除。您真正需要的只是声明apply plugin: x

应该注意的是,尽管buildSrc很方便,但它仍然适用于插件的开发阶段。如果您打算在更多地方更频繁地使用该插件,或者以其他方式共享它,那么使用该插件实际构建一个 jar 可能会更好。