如何将Gradle插件(及其依赖项)加载到build.Gradle中?
我有一个项目有两个gradle文件:如何将Gradle插件(及其依赖项)加载到build.Gradle中?,gradle,Gradle,我有一个项目有两个gradle文件:build.gradle和myPlugin.gradle myPlugin.gradle实现了插件接口。该插件还依赖于 我将两个gradle文件并排添加,然后尝试将myPlugin应用于build.gradle,如下所示: apply from: 'myPlugin.gradle' 但是,我在myPlugin.gradle文件中遇到以下错误: Plugin with id 'com.google.osdetector' not found apply pl
build.gradle
和myPlugin.gradle
myPlugin.gradle
实现了插件接口。该插件还依赖于
我将两个gradle文件并排添加,然后尝试将myPlugin应用于build.gradle
,如下所示:
apply from: 'myPlugin.gradle'
但是,我在myPlugin.gradle
文件中遇到以下错误:
Plugin with id 'com.google.osdetector' not found
apply plugin: 'groovy'
apply plugin: 'maven'
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile 'com.google.gradle:osdetector-gradle-plugin:1.4.0'
}
import org.gradle.api.tasks.TaskAction
import org.gradle.api.DefaultTask
import org.gradle.api.Plugin
import org.gradle.api.Project
apply plugin: 'com.google.osdetector'
apply plugin: HostingMachineOSPlugin
class HostingMachineOSPlugin implements Plugin<Project>{
void apply(Project project){
project.plugins.apply("com.google.osdetector");
//project.configurations.files('com.google.osdetector')
println project.osdetector.os
/* Extend the project property to have the class HostingMachineOS */
project.ext.HostingMachineOS = HostingMachineOS
}
}
public class HostingMachineOS {
static family = "Unkown"
static def setFamilyName(name){
family = name
}
static def isLinux (){
family == "linux"
}
static def isWindows (){
family == "windows"
}
static def isMacOS(){
family == "osx"
}
}
HostingMachineOS.setFamilyName(osdetector.os)
以下是myPlugin.gradle
文件的代码:
Plugin with id 'com.google.osdetector' not found
apply plugin: 'groovy'
apply plugin: 'maven'
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile 'com.google.gradle:osdetector-gradle-plugin:1.4.0'
}
import org.gradle.api.tasks.TaskAction
import org.gradle.api.DefaultTask
import org.gradle.api.Plugin
import org.gradle.api.Project
apply plugin: 'com.google.osdetector'
apply plugin: HostingMachineOSPlugin
class HostingMachineOSPlugin implements Plugin<Project>{
void apply(Project project){
project.plugins.apply("com.google.osdetector");
//project.configurations.files('com.google.osdetector')
println project.osdetector.os
/* Extend the project property to have the class HostingMachineOS */
project.ext.HostingMachineOS = HostingMachineOS
}
}
public class HostingMachineOS {
static family = "Unkown"
static def setFamilyName(name){
family = name
}
static def isLinux (){
family == "linux"
}
static def isWindows (){
family == "windows"
}
static def isMacOS(){
family == "osx"
}
}
HostingMachineOS.setFamilyName(osdetector.os)
如何解决id为'com.google.osdetector'的插件找不到?这是一个常见的陷阱,要将插件添加到
build.gradle
文件,您需要为构建脚本本身添加依赖项,而不是为项目添加依赖项。以下代码(添加到应用插件的文件中)应该可以解决此问题:
buildscript {
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
classpath 'com.google.gradle:osdetector-gradle-plugin:1.4.0'
}
}
编辑
请看一看-如果您需要从第三方脚本应用,您需要使用完整的类名(与包一起)。因此,文件应定义如下:
apply from: 'myPlugin.gradle'
格雷德尔先生
myPlugin.gradle
buildscript{
存储库{
mavenCentral()
}
依赖关系{
classpath'com.google.gradle:osdetector gradle插件:1.4.0'
}
}
应用插件:“groovy”
应用插件:“maven”
应用插件:com.google.gradle.osdetector.OsDetectorPlugin
应用插件:HostingMachineOSPlugin
类HostingMachineOSPlugin实现插件{
无效申请(项目){
project.plugins.apply(com.google.gradle.osdetector.OsDetectorPlugin);
//project.configurations.files('com.google.osdetector')
println project.osdetector.os
/*扩展项目属性以使类HostingMachineOS*/
project.ext.HostingMachineOS=HostingMachineOS
}
}
公共类主机{
静态族=“未知”
静态def setFamilyName(名称){
姓
}
静态def isLinux(){
family==“linux”
}
静态窗口(){
族==“windows”
}
静态定义isMacOS(){
系列==“osx”
}
}
HostingMachineOS.setFamilyName(osdetector.os)
听起来像你的myPlugin.gradle
找不到id为com.google.osdetector
的插件,也许你应该在你的myPlugin.gradle
中添加一个buildscript部分(带有适当的存储库部分)?我确实在myPlugin.gradle中添加了buildscript部分,但仍然有相同的错误?main build.gradle和myPlugin.gradle中的依赖项之间有关系吗?你是说我应该在myPlugin.gradle或build.gradle中添加这段代码?我已经添加到myPlugin.gradle中,但仍然得到了相同的结果error@WaelShowair,在应用插件的文件中-据我所知,它是myPlugin.gradle
-请注意,依赖项的范围是classpath
而不是compile
。我将您的代码复制粘贴到myPlugin.gradle中,但仍然有相同的错误,有什么建议吗?顺便说一句:如果我在buildscript部分内的build.gradle中添加类路径->dependencies@WaelShowair,我已经编辑了答案,请看一下。