簡體   English   中英

如何調試第三方Gradle插件?

[英]How to debug a third-party Gradle plugin?

我正在嘗試使用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 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? 我可以構建簽名插件,插入一些日志記錄語句並告訴我的構建版本來獲取我的自定義版本而不是它附帶的版本嗎?

根據gradle論壇中的一個帖子,有一個秘密的org.gradle.debug -flag可以讓你附加一個調試器。

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

對於hotfixing / custom-plugin,它應該足以將你復制和修改的插件放在rootProjectDir/buildSrc/src/main/groovy 您可以閱讀有關在Gradle站點上編寫自定義插件的更多信息。

這就是我使用IntelliJ做的方式 - Android Studio基於IntelliJ所以它應該是相同的,其他IDE應該是相似的:

下載錯誤Gradle插件的源代碼的正確版本,或克隆/訪問其版本控制存儲庫,並檢查與您正在使用的錯誤Gradle插件版本對應的相關分支或標記。 使用文件 - >現有源中的新項目將代碼導入IntelliJ。 然后在命令行運行:

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

並使用端口5005創建一個新的遠程調試連接,設置您的初始斷點,然后啟動它。

或者,您可以使用Gradle守護程序代替./gradlew -Dorg.gradle.jvmargs=" 標准JVM調試參數 " ,這樣您就可以使用任何您喜歡的調試端口,但我還沒有對此進行測試。 例如:

./gradlew \
  -Dorg.gradle.jvmargs="-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=y" \
  someTask

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM