最好使用IDEA IntelliJ。我嘗試在處理器內部設置一個斷點並運行,但沒有中斷。如何使用intellij調試java註釋處理程序?
回答
我發現下面的資源,可以幫助你:http://code.google.com/p/acris/wiki/AnnotationProcessing_DebuggingEclipse
的傢伙解釋一步一步如何使用Eclipse調試註釋處理器。
如果您確實需要調試註釋處理器,最好從命令行運行註釋處理器,而不是在啓用了調試的IDE中運行,並使用IDE的調試器附加到該處理器。
如果直接運行javac
,您可以通過指定以下額外的參數調試此:
javac -J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 ... (usual javac parameters go here)
如果運行Maven,使用mvndebug
而不是標準的mvn
命令 - Maven的運行編譯器進程。
如果在運行Ant,添加以下到ANT_OPTS
環境變量在運行前:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
所有這些處決,javac的,Ant或Maven進程將等待你來連接你的調試器在它開始執行之前。 IntelliJ說明書是here。對於Eclipse,here。
另請參閱如何完成AndroidAnnotations的處理器[此處](http://www.pingtimeout.fr/2012/10/debugging-annotation-processor-in-every.html),文章解釋瞭如何調試註釋處理器在每個IDE中。 – 2013-04-11 08:08:38
哇!優秀的答案!非常感謝你! – dmoebius 2013-04-22 08:19:46
-Xdebug -Xrunjdwp:transport = dt_socket,server = y,suspend = y,address = 8000適用於IntelliJ – LostSalad 2013-10-07 13:20:16
可以運行javac
並調試它,如上所示。然而,在我的情況下,編寫完整的類路徑非常繁瑣,所以我想把它留給IDEA。因此,在我想要應用我的註釋處理器的模塊中,只需使用main方法創建一個類即可。
public static void main(String[] args) {
com.sun.tools.javac.Main.main("-proc:only",
"-processor", "my.pkgs.MyAnnotationProcessor",
"my/pkgs/any/ClassIWantProcess.java");
}
對於這個工作,你需要添加$JAVA_HOME/lib/tools.jar
到SDK的JAR文件(默認是不存在的)。這與編譯JSP的appservers在他們的類路徑中需要這個JAR的原因相同 - 他們需要編譯器。
然後,只需爲您的運行配置設置適當的工作目錄(以便java文件的相對路徑是正確的),將您的斷點設置到處理器並根據您的意願進行調試!
好處 - classpath已由IDEA設置,並由「內部」javac使用,因爲這裏不是一個單獨的過程。我相信也可以將它翻譯成其他IDE。
我剛剛經歷了這個過程,我更喜歡這個解決方案,因爲它使用了-processor標誌,它拋出了比--processorpath或-cp javac調試路由。我的問題原來是我製作的課程文件與我運行它們的地方不兼容。 – PaulR 2015-12-15 01:11:49
雖然我知道這些評論沒有多大價值,但這確實是我最終做的事情(將JDK \ libs \ tools.jar添加到項目中作爲依賴項併爲該文件執行javac「」c:/開發/ HomeProjects/funky-apt/src/main/java/com/zhuinden/App.java「(絕對路徑)),我確實可以調試我的註釋處理器。很好的答案。 – EpicPandaForce 2017-04-10 12:39:03
註釋處理髮生在編譯過程中,所以正常的調試將不起作用。如果您想在項目環境中對其進行調試,則可以在調試模式下使用Gradle或Maven時使用IntelliJ遠程調試。然後,您可以在註釋處理器的文件中放置斷點。
參見Debugging an Annotation Processor in any project。
聲明:我寫了這篇文章。
按照以下步驟,這些工作對我來說在Android工作室gradle這個項目: -
1)。在gradle.properties加上下面幾行
3).Run最近創建的運行配置APT。
4)。新增打破註釋處理代碼點,並建立整個項目
對於Maven項目,this post,該解釋更詳細一點下面的步驟,爲我工作:
添加「遠程」運行配置並將「端口」設置爲8000.
從項目目錄(在命令行中)發出命令
mvnDebug clean install
。運行運行配置。爲了在進程退出後開始新的會話,請從(2)開始重複。
記住要在項目的依賴運行mvn install
當他們改變(例如,如果註解處理器在不同的神器比項目正在從調試它)。
本教程適用於Android項目。與往常一樣,主要模塊名稱爲「app」。該項目包含一個子模塊,稱爲「註釋」,它是「app」的子依賴項。 「app」模塊使用gradle聲明運行註釋處理 apt project(':annotation')
。
簡易型 (從終端運行彙編和IDE附加)
- [REQUIRED]添加新的項目配置「+」 - > 「遠程」。檢查「僅限單一實例」。所有其他設置都是自動生成的。將
<whole project>
作爲類路徑。端口應保留爲默認值。
- [必需]請確保您可以通過調用停止所有gradle這個實例:
./gradlew --stop
- [必需]運行命令:
./gradlew --no-daemon -Dorg.gradle.debug=true :app:clean :app:compileDebugJavaWithJavac
- 運行APT項目conf iguration在調試模式下儘可能快地:)
- [HINT]我們先從一個EMPTY gradle.properties文件
- [提示]請勿使用gradle 守護進程(--no-daemon/org.gradle.daemon = false選項)
- [提示]運行gradle debug模式(org.gradle.debug = true選項)
- [提示]運行應用程序的模塊編譯不是處理器的模塊編譯(應用程序的編譯運行註釋處理!)
- 我們通常不會在添加任何Java編譯器設置Android Studio(即文件 - >其他設置 - >默認設置)
- 以下內容添加到您的gradle.properties文件:
- 運行從終端彙編:
- 將bash腳本添加到您的專業版主目錄(例如compile.sh)
- 轉到我們在步驟1中創建的APT配置設置並添加一個在啓動配置之前。選擇運行外部工具。
加長版(使用gradle.properties)
org.gradle.daemon=false org.gradle.debug=true
./gradlew :app:clean :app:compileDebugJavaWithJavac
高級版本(只需按調試在IDE)
#!/bin/bash ./gradlew :app:clean :app:compileDebugJavaWithJavac &
記住有關後臺處理 '&' 的標誌。
- 1. 何時處理Java註釋?
- 2. 如何編寫Java註釋處理程序?
- 3. Java註釋處理 - 如何處理已處理的代碼?
- 4. 如何使用SIGSEGV的信號處理程序調試程序
- 5. Java註釋處理基礎
- 6. eclipse java註釋處理
- 7. Java註釋處理intellij需要編譯兩次
- 8. 如何處理註釋?
- 9. 如何在Gradle中使用自定義Java註釋處理器?
- 10. Java註釋處理器,帶註釋的註釋類型
- 11. 如何處理Web應用程序數據庫中的註釋
- 12. 如何調試Spring註釋?
- 13. 調試HTTP處理程序
- 14. 調試jquery處理程序
- 15. .NET如何調試應用程序協議處理程序?
- 16. 如何使用調試程序處理任務中的異常?
- 17. 使用註釋保護Tapestry事件處理程序
- 18. 如何使IntelliJ瞭解註釋
- 19. 如何獲取Java代理的調用處理程序?
- 20. 如何釋放事件處理程序
- 21. Android/Java - 使用處理程序或調度程序延遲Runnables?
- 22. 瞭解Java中的註釋處理
- 23. @SuppressWarnings來自Java註釋處理器
- 24. 處理JSweet中的Java註釋
- 25. 帶grails的java註釋處理器
- 26. 如何處理順序調用事件處理程序?
- 27. Intellij/Java - 識別對註釋方法的調用
- 28. 使用註釋時的錯誤處理
- 29. apache如何調用/調用適當的處理程序/解釋器?
- 30. VSTS - 如何處理變更集註釋?
你是如何運行它的? – jmg 2011-12-21 08:49:58
我剛啓動一個什麼都不做的主類。我已經啓用了註釋處理,如[這裏]所述(http://blogs.jetbrains.com/idea/tag/annotation-processing/)。 – akula1001 2011-12-21 09:08:12
@ manu1001,這將不起作用,因爲註釋處理器在編譯器運行之前正在運行。然後你啓動JVM並嘗試調試它。您可以調試應用程序代碼,但不能在註釋處理器中發生什麼。 – AlexR 2011-12-21 10:36:19