Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何调试第三方Gradle插件?_Java_Android_Debugging_Gradle - Fatal编程技术网

Java 如何调试第三方Gradle插件?

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

我正试图用这个来签署一个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?我可以构建签名插件,插入一些日志语句,并告诉我的构建选择我的自定义版本而不是它附带的版本吗?

根据一个有点秘密的
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中修复。