2011-12-08 86 views
5

我有我自己的build.xml文件,它由很少的目標組成,用Ant編譯和運行我的Java項目。下面是這個的相關部分:如何使用Netbeans調試使用Ant的定製build.xml編譯的代碼?

<path id="libpath"> 
    <fileset dir="${lib.dir}" includes="**/*.jar" /> 
</path> 

<patternset id="resources"> 
    <include name="relative/path/to/resources/" /> 
</patternset> 

<path id="resourcespath"> 
    <fileset dir="${src.dir}"> 
     <patternset refid="resources" /> 
    </fileset> 
</path> 

<target name="compile"> 
    <mkdir dir="${build.dir}" /> 
    <mkdir dir="${classes.dir}" /> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="libpath" includeantruntime="false" debug="true" debuglevel="lines,vars,source" /> 
    <copy todir="${classes.dir}"> 
     <path refid="resourcespath" /> 
    </copy> 
</target> 

<target name="debug" depends="compile"> 
    <java fork="true" classname="${main-class}"> 
     <sysproperty key="java.library.path" path="${dist.dir}"/> 
     <classpath> 
      <pathelement location="${classes.dir}" /> 
      <path refid="libpath" /> 
     </classpath> 
    </java> 
</target> 

所有我想要做的就是通過運行build.xmldebug目標調試編譯後的代碼在${classes.dir}使用NetBeans。目前,這個目標啓動編譯的應用程序,而沒有機會停在斷點處。我知道Netbeans生成默認的build-impl.xml文件,但這個文件太大,難以理解。這就是爲什麼我想知道是否可以使用Netbeans IDE調試由我自己的build.xml文件編譯的Java代碼。

還有關於debugging Java code when using Ant script in Eclipse的類似問題,但正如我所見,提出的解決方案是Eclipse特定的。

回答

8

Sergey提出的方法可行,但每次調試都必須執行以下操作項目:

  1. 調試主項目按鈕(Ctrl+F5),NetBeans將等待debbuger附加;
  2. 選擇「調試」>「連接調試...」從Netbeans的主菜單中,指定調試器的參數,在彈出的對話框,然後按「OK」按鈕或選擇工具欄上的調試的下拉列表中以前使用debbuger按鈕(例如附加到5432);
  3. 調試您的應用程序,然後關閉它(Shift+F5將不會像往常一樣終止應用程序,它只會完成調試會話)。

在我看來,更好的方式來使用「連接調試...」是選​​擇SocketListen連接器:

  1. 在前面的步驟鏈執行第2步(選擇聽5432) - 調試器將等待應用程序啓動(請注意,jvmarg的子選項server必須設置爲n - 請參閱Remote Debugging FAQ)。
  2. 調試主項目按鈕(Ctrl+F5)。
  3. 調試您的應用程序,然後關閉它或通過按Shift+F5與調試會話同時終止它。

無論如何,這種方法也很不舒服,特別是如果你習慣於通過簡單地按下Ctrl+F5或按相應的工具欄按鈕來啓動調試。每次從下拉菜單中選擇所需的調試器都很煩人。

所以這裏是最好的解決方案 - 直接從Ant的debug目標啓動調試器。在我的情況是這樣的:

<target name="debug" depends="compile"> 
    <nbjpdastart addressproperty="jpda.address" name="MyProjectName" transport="dt_socket"> 
     <classpath> 
      <pathelement location="${classes.dir}" /> 
      <path refid="libpath" /> 
     </classpath> 
    </nbjpdastart> 
    <java fork="true" classname="${main-class}"> 
     <sysproperty key="java.library.path" path="${dist.dir}" /> 
     <classpath> 
      <pathelement location="${classes.dir}" /> 
      <path refid="libpath" /> 
     </classpath> 
     <jvmarg value="-Xdebug" /> 
     <jvmarg value="-Xnoagent" /> 
     <jvmarg value="-Djava.compiler=none" /> 
     <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}" /> 
    </java> 
</target> 

要獲取更多信息,請看看Creating a Target to Debug Your Java SE Application

2

來自Eclipse主題的建議也適用於您。

  1. 使用下一JVM參數(它們添加到Java目標調用):

    <jvmarg value="-Xdebug" />
    <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5432" />

  2. 在NetBeans中使用調試 - >連接調試與港口5432

+0

它的工作原理,但這種方法需要煩人的動作被我要開始/停止調試每次重複。有關詳細信息,請參閱我的安裝程序。無論如何,謝謝你的回覆。 – Ezze