在同一项目

时间:2018-05-23 18:00:23

标签: java gradle groovy plugins gradle-plugin

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

/root project
  |
  + build.gradle
  + settings.gradle
  + build/
  + some module/
      |
      + build.gradle
      + src/
      + build/
      + plugin/
         |
         + build.gradle
         + src/
         + build/

我通过引用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'

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

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

还尝试classpath project(':somemodule:plugin')而不是jar引用,但它说没有找到插件。

2 个答案:

答案 0 :(得分:0)

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

您应该查看organizing your build logic上的gradle文档,具体来说,我可能已经开始将您的插件源插入buildSrc directory

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

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

答案 1 :(得分:0)

这是一个老问题,但对于新访问者:您可以在构建代码的同时构建插件代码。甚至可以有一个构建所有插件的父项目。 请检查this answer