调试自定义Gradle插件是从工具API开始的



我正在实现一个自定义插件,我想通过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 deamon启动远程调试会话,但到目前为止运气不佳。

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

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

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

我能够在运行检查器应用程序时,通过将-Dorg.gradle.debug=true添加到withArguments将Gradle守护进程的空闲超时时间减少到1秒来有效地禁用它,在插件的源代码中创建一个断点。总的来说,这对我来说是有效的。

最新更新