Plugins 未找到自定义Gradle插件ID
我正在编写一个Gradle插件,但我无法在使用该插件的Gradle脚本中使用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。我不
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")
}