Plugins 未找到自定义Gradle插件ID

Plugins 未找到自定义Gradle插件ID,plugins,build,gradle,Plugins,Build,Gradle,我正在编写一个Gradle插件,但我无法在使用该插件的Gradle脚本中使用apply plugin:命令。我用的是Gradle1.1 我已经用clean build构建了这个插件,现在我正试图通过一个平面repo将它添加到Gradle构建中。这似乎是可行的,但Gradle没有意识到有一个ID为测试插件的插件。插件的settings.gradle中的项目名称是test plugin,而META-INF/gradle plugins中的属性文件也是test plugin.properties。我不

我正在编写一个Gradle插件,但我无法在使用该插件的Gradle脚本中使用
apply plugin:
命令。我用的是Gradle1.1

我已经用
clean build
构建了这个插件,现在我正试图通过一个平面repo将它添加到Gradle构建中。这似乎是可行的,但Gradle没有意识到有一个ID为
测试插件的插件。插件的
settings.gradle
中的项目名称是
test plugin
,而
META-INF/gradle plugins
中的属性文件也是
test plugin.properties
。我不确定还能在哪里指定插件ID

使用测试插件的项目中的
build.gradle
文件:

repositories {
  flatDir name: 'libs', dirs: "../build/libs"
}

dependencies {
  compile 'test:test-plugin:0.1'
}

apply plugin: 'test-plugin'
来自Gradle的错误:

What went wrong:
A problem occurred evaluating root project 'tmp'.
Plugin with id 'test-plugin' not found.

插件Jar必须作为构建脚本依赖项添加:


我也有同样的问题,没有找到自定义插件id。在我的例子中,我只是忘记添加'src/main/resources/META-INF/gradle plugins'属性文件。属性文件的名称必须与扩展名为“.properties”的插件id的名称匹配

该文件必须包含以下行中的字符:

implementation-class=(your fully qualified plugin classpath)
这就是插件id解析为类名的完整机制


此外,正如前面的回答所指出的,插件需要作为依赖项添加。android文档说明您应该使用与唯一域名关联的名称。例如:“test plugin”这个名字的形式并不好,但是像“com.foo.gradle.test plugin”这样的id会更好。

如果你想在构建脚本中实现一个插件,那么你有两个选择

选项1

apply plugin:YourCustomPluginClassName

选项2

plugins {
    id 'your.custom.plugin.id'
}

apply-plugin:
用于通过类名指定插件(例如
apply-plugin:JavaPlugin

plugins{}
用于通过id指定插件(例如
plugins{id'java'}

请参阅以供参考

如果您选择选项1,您的自定义插件将需要通过3种方式中的1种方式加入到构建脚本中。
1.您可以直接在Gradle构建脚本中对其进行编码。
2.您可以将它放在buildSrc下(例如buildSrc/src/main/groovy/MyCustomPlugin)。
3.您可以在
buildscript
方法中将自定义插件作为jar导入。
有关
buildscript
方法的信息,请参阅

如果选择选项2,则需要创建插件id。创建以下文件buildSrc/src/main/resources/META-INF/gradle plugins/[desired.plugin.id].properties。将
implementation class=desired.plugin.id
复制并粘贴到新创建的.properties文件中。用所需的插件id替换
所需的.plugin.id


有关更多信息,请参阅。

确保顶级
build.gradle
使用正确的
类路径来引用生成的
*.jar
文件的路径

一些插件,如,将构建jar并将其保存到
mavenLocal
中的特定位置,但路径可能不清楚

您应该查看jar文件的文件路径,并确保它与您的
类路径相匹配,但映射并不明显:

buildscript{
依赖关系{
//此*必须*匹配mavenLocal中jar文件的本地文件路径,即:
//~/.m2/repository/com/company/product/plugin/product-gradle-plugin/1.0/product-gradle-plugin-1.0.jar
classpath'com.company.product.plugin:product gradle plugin:1.0'
}
}
小心不要使用错误的类路径,它可能引用目录而不是实际的jar文件;像这样:

buildscript{
依赖关系{
//这是错误的,因为它引用了mavenLocal文件夹“product gradle plugin”,
//而不是jar文件“product-gradle-plugin-1.0.jar”
//但是,gradle同步仍然会将其解析为有效的类路径!!
classpath'com.company.product:product gradle插件:1.0'
}
}
更多信息:


    • 在@Bonifacio2编写的内容中添加了一个路径
      META-INF/gradle-plugins
      ,并在IntelliJ中显示为
      META-INF.gradle-plugins
      。无论如何,不要犯我直接将其创建为META-INF.gradle-plugins目录的愚蠢错误,因为您是基于另一个示例的,而且永远不会工作。另一个技巧是从另一个intelliJ项目复制,因为这是添加的:
      gradle插件

      嗯,也许试试吧

          configure <org.jsonschema2pojo.gradle.JsonSchemaExtension> {
           this.sourceFiles = files("${project.rootDir}/schemas")
          }
      
      配置{
      this.sourceFiles=files(“${project.rootDir}/schemas”)
      }
      
      如何添加多个插件?在
      依赖项
      块中添加每个插件的
      类路径
      ,并为每个插件添加一行
      应用插件:“您的插件”
      。如果在多项目中使用,确保buildscript块出现在顶层项目的build.gradle中,而不是子项目的build.gradle中Apply plugin:YourCustomPluginClassName似乎是一种不推荐使用的插件使用方式(2019).
      apply plugin:
      在Gradle教程的许多示例中都有,请避免只发布代码答案,并提供一些解释。
          configure <org.jsonschema2pojo.gradle.JsonSchemaExtension> {
           this.sourceFiles = files("${project.rootDir}/schemas")
          }