java - Gradle:如何在 Gradle 插件中派生项目目录路径?
问题描述
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);
});
}
}
...和...
包 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());
}
}
现在可以了。
推荐阅读
- robotframework - 测试中的多个日志消息
- android - 使用 PAUL SIEGMANN 库的 Epub 阅读器
- python - VS Code 无法在我的目录中找到我的图像资产
- android-studio - 在 Flutter 的 Android Studio 中启用相对路径自动导入
- sql - 如何在impala中将一行结果拆分为两行
- r - 在 R 中按 ID 创建行计数
- reactjs - create-react-app 的缺点是什么?
- python-3.x - 好吧,我的 django 站点中的发布按钮有问题。它没有执行它的功能
- mysql - 获取组中每个成员最近编辑的行
- javascript - 如何在Javascript中删除字符