当前位置: 首页 > 知识库问答 >
问题:

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

龙佐
2023-03-14

我写了一个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”的buildscript,所以它不起作用。

还尝试了类路径项目(“:somemodule:plugin”)而不是jar引用,但它说找不到插件。

共有2个答案

严安志
2023-03-14

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

司马璞
2023-03-14

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

您应该查看gradle文档中关于组织构建逻辑的内容,特别是我可能会从将插件源代码粘贴到buildSrc目录开始。

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

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

 类似资料:
  • 我为gradle创建了一个简单的基于groovy的插件。 在我的毕业典礼上。构建文件我有以下内容: 一切都很好,我得到了一个构建目录和一个. jar在lib文件夹中生成,我想这是独立的插件。 现在我想知道如何将这个新插件注册到我的gradle安装中,这样我就可以应用插件了:“myPlugin”我做了以下工作: 将插件放入安装中的插件文件夹 创建了myplugin.properties文件并将其包含

  • 我有一个Gradle插件,可以按预期编译和工作。我想与源代码一起发布一个使用Gradle插件的示例应用程序,它还允许我轻松测试插件的更改。现在要做到这一点,我必须向buildScript块添加一个类路径依赖项。是否可以添加将与示例项目一起编译的依赖本地插件?我现在面临的主要问题是,当尝试同步示例项目时,插件不存在,导致失败。

  • 我正在编写一个自定义Gradle插件来为所有项目添加公共资源。例如,所有微服务都使用SpringBoot web、sleuth和其他常见的依赖项。 因此,决定将创建一个独立的项目,并将插件导出为jar,然后将插件应用于其他项目。

  • 在另一个项目中,我使用/应用这个插件: 但是如何从MyGradlePlugin.groovy中的apply方法中迭代公共依赖项并打印它们的坐标(artifactId、groupId、version)?

  • 我已经构建了一个Gradle插件,它在另一个Gradle项目的buildSrc下工作得很好。现在,我已经将其移动到了自己的项目中,并希望将其发布到我的本地Maven repo中,以便我可以在原始项目中使用(buildSrc中没有它)。当然,长期目标是为其他人发布。 问题是发布后,其他项目找不到它。我可以看到~/. m2/repository中的文件,它们似乎是正确的(据我所知最好)。我在两个项目中

  • 问题内容: 我正在一个较大的项目中,其中包含许多子项目,这些子项目都是用gradle构建的。通常所有项目都是java项目,因此在主build.gradle脚本中 为所有项目指定。 但是,我需要为项目的某个子树删除插件,或者从插件中明确排除项目。 这里是项目布局的粗略概述 Android / *不需要Java插件。实现此目标的最佳解决方案是什么?注意:我无法更改项目结构。 问题答案: 这应该可以解决