Gradle:如何获取Gradle插件的项目目录路径?

问题描述 投票:0回答:1

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
java gradle gradle-plugin
1个回答
0
投票

根据成员的评论,我可以这样做

根据评论,我在代码中这样做

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()); 
    }       
}           

并且现在可以使用。

© www.soinside.com 2019 - 2024. All rights reserved.