Reputation: 16673
Gradle v2.9 (Old, we're upgrading soon)
I'm trying to create a Gradle plugin by following Writing Gradle Plugins. How can I have the plugin "derive" the project's top directory, that is where build.gradle
file is? if the plugin creates an hello
task, I want it to do this
$ pwd
/some_path/project1
$ ls
build.gradle gradlew gradle gradle.properties src
$ ./gradlew hello
Hello /some_path/project1
Upvotes: 1
Views: 1563
Reputation: 16673
Per the members' comments, I'm able to do this
Per the comments, I did this in the code
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);
});
}
}
...and...
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());
}
}
and it works now.
Upvotes: 1