首页 > 解决方案 > 从工具 API 开始调试自定义 Gradle 插件

问题描述

我正在实现一个自定义插件,我想通过 Gradle 工具 API 运行它。我们可以将此项目作为我的问题的确切基线。

我本质上希望能够在插件代码中放置一个断点(在这种情况下,https://github.com/melix/gradle-tapi-demo-artifacts/blob/master/plugin/src/main/java/ org/gradle/demo/plugin/OutgoingArtifactsModelBuilder.java。)

实际的 Gradle 插件是从位于另一个 Gradle 模块中的 Java 文件调用的。在这种情况下App.java

public class App {
    public static void main(String... args) throws Exception {
        GradleConnector connector = GradleConnector.newConnector();
        connector.forProjectDirectory(findProjectPath(args));
        ProjectConnection connection = null;
        try {
            connection = connector.connect();
            ModelBuilder<OutgoingArtifactsModel> customModelBuilder = connection.model(OutgoingArtifactsModel.class);
            customModelBuilder.withArguments("--init-script", copyInitScript().getAbsolutePath());
            OutgoingArtifactsModel model = customModelBuilder.get();
            for (File artifact : model.getArtifacts()) {
                System.out.println("artifact = " + artifact);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
        }
    }

我找不到运行该 Java 文件并在插件中命中断点的方法。我知道我应该以某种方式针对创建的 Gradle 守护进程启动远程调试会话,但到目前为止还没有运气。

-Dorg.gradle.debug=true直接运行 Java 文件时不支持。我还尝试在我的内部设置这些标志,~/.gradle/gradle.properties但也没有成功(然后 gradle 守护进程拒绝运行)。

该项目是一个复合构建,我不确定这是否相关。

显然,对我来说,这里有太多动人的部分,如果有人有一些指示那就太好了!

标签: javakotlingradlegradle-plugin

解决方案


推荐阅读