Gradle v2.9(旧,我们即将升级)
我正在尝试按照Writing Gradle Plugins创建Gradle插件。如何使插件“派生”到项目的顶层目录,即build.gradle
文件所在的目录?如果插件创建了hello
任务,我希望它执行此操作
$ pwd
$ /some_path/project1
$ ls
build.gradle gradlew gradle gradle.properties src
$ ./gradlew hello
Hello /some_path/project1
根据成员的评论,我可以这样做
根据评论,我在代码中这样做
package org.example.greeting;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
public class GreetingPlugin implements Plugin<Project> {
public void apply(Project project) {
project.getTasks().create("hello", Greeting.class, (task) -> {
task.setMessage("Hello");
task.setRecipient("World");
// Added this line per comments from members
task.setProjectDir(project);
});
}
}
...和...
package org.example.greeting;
import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.Project;
import java.io.*;
public class Greeting extends DefaultTask {
private String message;
private String recipient;
private File projectDir;
private Project project;
public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
public String getRecipient() { return recipient; }
public void setRecipient(String recipient) { this.recipient = recipient; }
public File getProjectDir() { return projectDir; }
public void setProjectDir(File projectDir) { this.projectDir = projectDir; }
public Project getProject() { return project; }
public void setProject(Project project) { this.project = project; }
@TaskAction
void sayGreeting() {
System.out.printf("%s, %s, %s!\n", getProject().getRootDir().toString(), getMessage(), getRecipient());
}
}
并且现在可以使用。