Java 如何调试第三方Gradle插件?
我正试图用这个来签署一个Android AAR工件。不幸的是,在这个过程中,我得到了一个毫无帮助的Java 如何调试第三方Gradle插件?,java,android,debugging,gradle,Java,Android,Debugging,Gradle,我正试图用这个来签署一个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
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?我可以构建签名插件,插入一些日志语句,并告诉我的构建选择我的自定义版本而不是它附带的版本吗?根据一个有点秘密的org.gradle.debug
-标志,允许您附加调试器
gradle someTask --no-daemon -Dorg.gradle.debug=true
对于热修复/自定义插件,将复制和修改的插件放入
rootProjectDir/buildSrc/src/main/groovy
就足够了。您可以阅读有关在上编写自定义插件的更多信息。这是我使用IntelliJ的方式-Android Studio基于IntelliJ,因此它应该是相同的,其他IDE应该是类似的:
下载buggy Gradle插件源代码的正确版本,或克隆/访问其版本控制存储库,并查看与您正在使用的buggy Gradle插件版本对应的相关分支或标记。使用文件->新建项目从现有源将代码导入IntelliJ。然后在命令行中运行:
./gradlew someTask -Dorg.gradle.debug=true --no-daemon
并使用端口5005创建一个新的远程调试连接,设置初始断点,然后启动它
或者,您可以通过执行/gradlew-Dorg.Gradle.jvmargs=“
标准JVM调试参数”
)来使用Gradle守护程序,这样您就可以使用您喜欢的任何调试端口,但我还没有对此进行测试。例如:
./gradlew \
-Dorg.gradle.jvmargs="-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=y" \
someTask
您提供了pgp密钥文件吗?是的,它似乎收到了密钥。将keyId更改为无效会导致实际的错误消息。从PGPSignatureGenerator和PgpSignatory的源代码以及您给出的错误消息来看,sign plugin获得空私钥。请确保您使用类似“gpg--gen key”的命令创建了有效的签名密钥,并将其传递到android/signingConfigs配置中。当您调用gpg时,它通常会显示一个包含密钥类型选择的菜单。选择带有“签名”字的类型。这是正确的键。我可以用
gpg使用idea手动签名——签名
并验证它。它还可以使用maven的签名插件。谢谢,Marcel!作为一个Java/JVM noob,我不知道如何在设置标志后附加调试器,但是buildSrc
提示非常有用。在从Gradle git复制最新版本的插件并将其名称更改为唯一标识符(它不会影响内置插件)后,我的崩溃已经在master中修复。