我有一个包含两个 gradle 文件的项目:build.gradle和myPlugin.gradle
该myPlugin.gradle实施的插件接口。该插件还依赖于osdetector-gradle-plugin
我将两个 gradle 文件并排添加,然后尝试将 myPlugin 应用到build.gradle如下:
apply from: 'myPlugin.gradle'
Run Code Online (Sandbox Code Playgroud)
但是,我在myPlugin.gradle文件中收到以下错误:
Plugin with id 'com.google.osdetector' not found
Run Code Online (Sandbox Code Playgroud)
这是myPlugin.gradle文件的代码:
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)
Run Code Online (Sandbox Code Playgroud)
在build.gradle文件中:我只是在做这样的事情:
//定义 buildScript 存储库和依赖项然后
apply from: 'myPlugin.gradle'
task dummy{
println HostingMachineOS.isMacOS()
println HostingMachineOS.isLinux()
println HostingMachineOS.isWindows()
}
Run Code Online (Sandbox Code Playgroud)
如何解决未找到 ID 为“com.google.osdetector”的插件?
这是一个常见的陷阱,要将插件添加到build.gradle文件中,您需要为构建脚本本身添加依赖项,而不是为项目添加依赖项。以下代码段(添加到应用插件的文件中)应该可以解决问题:
buildscript {
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
classpath 'com.google.gradle:osdetector-gradle-plugin:1.4.0'
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
请看这里- 似乎如果您需要apply from第三方脚本,您需要使用完整的类名(带包)。所以文件应该定义如下:
构建.gradle
apply from: 'myPlugin.gradle'
task dummy{
println HostingMachineOS.isMacOS()
println HostingMachineOS.isLinux()
println HostingMachineOS.isWindows()
}
Run Code Online (Sandbox Code Playgroud)
myPlugin.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.gradle:osdetector-gradle-plugin:1.4.0'
}
}
apply plugin: 'groovy'
apply plugin: 'maven'
apply plugin: com.google.gradle.osdetector.OsDetectorPlugin
apply plugin: HostingMachineOSPlugin
class HostingMachineOSPlugin implements Plugin<Project>{
void apply(Project project){
project.plugins.apply(com.google.gradle.osdetector.OsDetectorPlugin);
//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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2579 次 |
| 最近记录: |