试图了解如何创建自定义插件。但我无法完成新任务。我收到这个错误:
无法应用插件[id' code4reference']
没有这样的属性:类的printTask:libs.gradle.NewPlugin
但是当我从NewPlugin类运行println时它正在工作。 有两个groovy文件,一个用于插件初始化,一个用于任务。它们位于:
/home/boilerplate/boilerPlate/src/main/groovy/libs/gradle/build.groovy
package libs.gradle;
import org.gradle.api.*;
apply plugin: NewPlugin
class NewPlugin implements Plugin<Project> {
void apply(Project project) {
project.task('myTask', type: printTask)
}
}
/home/boilerplate/boilerPlate/src/main/groovy/libs/gradle/printTask.groovy
package libs.gradle;
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class printTask extends DefaultTask {
@TaskAction
def showMessage() {
println '------------showMessage-------------------'
}
}
实现:
/home/boilerplate/boilerPlate/src/main/resources/META-INF/gradle-plugins/code4reference.properties
implementation-class=libs.gradle.NewPlugin
更新 现在我在执行新任务时面临另一个问题,该任务应该对路径中找到的所有RPM进行签名。我知道在build.gradle中这很好用:
package libs.gradle;
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class Sign extends DefaultTask {
def workdir = project.projectDir.getPath()
@TaskAction
def showMessage() {
ext.signfiles = files{
fileTree(dir: "$workdir").matching{ include 'build/**/*.rpm' }
}
doLast {
signfiles.each{ File file->
def args = /echo -e "spawn rpm --resign ${file}\nexpect \"Enter pass phrase:\"\nsend \"\\r\"\nexpect" | expect/
exec {
commandLine 'bash', '-c', "$args"
}
}
}
}
}
无法在任务&#39;:myTask&#39;上找到参数[libs.gradle.Sign$_showMessage_closure1@4bf8b77]的方法文件()。类型为libs.gradle.Sign。
答案 0 :(得分:0)
ext.signfiles = project.fileTree(dir: "$workdir").matching{ include 'build/**/*.rpm' }
但不确定工作目录是什么。 下面的exec也应该是
project.exec {
commandLine 'bash', '-c', "$args"
}