2016-04-11 103 views
3

我在離開它幾年後再次與Grails合作。我正在使用IntelliJ 2016.01和Grails 3.1.4。它應該很容易,對吧?一切工作正常,但我無法從IntelliJ內啓動調試器,因爲我習慣於這樣做。在以前的生活中,我使用IJ10和Grails 1.0.5。Grails 3在IntelliJ中調試

通過各種搜索,我發現當Grails 2.3出於各種原因開始在分叉模式下運行時,發生了變化。不理解所有技術細節我的理解是,這是出於性能原因。無論如何,我能找到解決方法,但似乎還有很長的路要走。有誰知道更好的方法?我錯過了什麼?

我創建了一個Ant任務調用的Grails運行的應用程序:

<target name="start-debug-grails"> 
    <exec executable="cmd"> 
     <arg value="/c"/> 
     <arg value="start"/> 
     <arg value="grails"/> 
     <arg value="run-app"/> 
     <arg value="--debug-jvm"/> 
    </exec> 
</target> 

如果你運行它自己的,你看到Grails這個任務運行在一個新的cmd窗口調試模式: |運行的應用程序... 地址監聽運輸dt_socket:5005

然後,我創建了一個「遠程」運行/調試中的IntelliJ配置爲在端口5005連接我有可用於此運行/調試配置調試按鈕所以我點擊調試。它很好。

首先,我看到這個的IntelliJ:

Connected to the target VM, address: 'localhost:5005', transport: 'socket' 

然後過了一會兒cmd窗口被更新,以顯示該應用程式已在調試模式:

| Running application... 
Listening for transport dt_socket at address: 5005 
Grails application running at http://localhost:8080 in environment: development 

在這一點上我可以在端口8080上導航應用程序沒有任何問題。我可以修改代碼的某些部分,如控制器,它會被編譯並立即可用。是啊。

我把它更進了一步,並添加停止Ant任務(這是更難一點比它應該是),這樣我可以執行兩個任務(先停止進程是否正在運行),然後開始:

<target name="stop-debug-grails" depends="-stop-debug-init, -stop-debug-kill"/> 

<target name="-stop-debug-init"> 
    <!--check if process is running--> 

    <exec executable="jps"> 
     <arg value="-l"/> 
     <redirector outputproperty="process.pid"> 
      <outputfilterchain> 
       <linecontains> 
        <contains value="grails"/> 
       </linecontains> 
       <replacestring from=" org.grails.cli.GrailsCli"/> 
      </outputfilterchain> 
     </redirector> 
    </exec> 
    <echo> 
     ${process.pid} 
    </echo> 
    <condition property="do.kill"> 
     <not> 
      <!--checks to make sure pid is non blank before calling kill-process--> 
      <equals arg1="${process.pid}" arg2="" /> 
     </not> 
    </condition> 
</target> 

<target name="-stop-debug-kill" if="do.kill"> 
    <echo> 
     killing process ${process.pid} 
    </echo> 
    <exec executable="taskkill" osfamily="winnt"> 
     <arg value="/F"/> 
     <arg value="/PID"/> 
     <arg value="${process.pid}"/> 
    </exec> 
    <exec executable="kill" osfamily="unix"> 
     <arg value="-9"/> 
     <arg value="${process.pid}"/> 
    </exec> 
</target> 

我不得不修改我的啓動調試Grails的任務等待的Grails開始偵聽端口5005

<!--delay to let the server start--> 
<sleep seconds="20"/> 

現在我可以在調試的IntelliJ我習慣通過點擊調試準備用遙控器通過的方式在IntelliJ中進行處理。有誰知道更好的方法來處理這個問題嗎?

回答

4

Debuggin正是Grails 3.打開Application.groovy類非常簡單,只需點擊調試

+0

哇。非常感謝你user37186​​14。這是行得通的。不知道我是如何錯過這一點,但很高興知道。謝謝!!現在我要刪除我的項目中的一些ant任務。 – bigMC28

+0

你可以調試但如果你改變了代碼的某些部分,如控制器,它不會被編譯並立即可用 –

+0

我得到java.lang.NoClassDefFoundError:groovy/lang/GroovyObject。 – sanya

2

什麼工作對我來說是開始調試任務的gradle bootRun。

斷點和更改重裝使用grails工作正常3.2.3 + intellij 2016.2.5

+0

也適用於社區版 –