如何调试第三方Gradle插件?

时间:2013-12-26 19:01:15

标签: java android debugging gradle

我尝试使用gradle signing plugin签署Android AAR工件。不幸的是,我在这个过程中得到了一个相当无助的NullPointerException

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':library:signArchives'.
> java.lang.NullPointerException (no error message)

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':library:signArchives'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
        [...snip...]
        at org.gradle.launcher.Main.main(Main.java:37)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
Caused by: java.lang.NullPointerException
        at org.bouncycastle.openpgp.PGPSignatureGenerator.initSign(Unknown Source)
        at org.bouncycastle.openpgp.PGPSignatureGenerator.initSign(Unknown Source)
        at org.bouncycastle.openpgp.PGPSignatureGenerator$initSign.call(Unknown Source)
        at org.gradle.plugins.signing.signatory.pgp.PgpSignatory.createSignatureGenerator(PgpSignatory.groovy:54)
        at org.gradle.plugins.signing.signatory.pgp.PgpSignatory.sign(PgpSignatory.groovy:64)
        [...snip...]
        ... 52 more


BUILD FAILED

调试此异常的最简单方法是什么?有没有办法将调试器附加到gradle?我可以构建签名插件,插入一些日志记录并告诉我的构建版本来获取我的自定义版本而不是它附带的版本吗?

2 个答案:

答案 0 :(得分:9)

根据thread in the gradle forums,有一个秘密的org.gradle.debug - 标志,允许您附加调试器。

gradle someTask --no-daemon -Dorg.gradle.debug=true

对于修补程序/自定义插件,它应该足以放入您复制的& rootProjectDir/buildSrc/src/main/groovy中修改过的插件。您可以在Gradle site上阅读有关编写自定义插件的更多信息。

答案 1 :(得分:2)

这就是我使用IntelliJ的方式 - Android Studio基于IntelliJ所以它应该是相同的,其他IDE应该是相似的:

下载错误Gradle插件的源代码的正确版本,或克隆/访问其版本控制存储库,并查看与您正在使用的错误Gradle插件版本对应的相关分支或标记。使用File - >将代码导入IntelliJ;来自现有来源的新项目。然后在命令行运行:

./gradlew someTask -Dorg.gradle.debug=true --no-daemon

使用端口5005创建一个新的远程调试连接,设置初始断点并启动它。

或者,您可以使用Gradle守护程序代替执行./gradlew -Dorg.gradle.jvmargs=" 标准JVM调试参数 ",这样您可以使用任何您喜欢的调试端口,但是我没有测试过这个。