如何使用Netbeans调试使用Ant的自定义build.xml编译的代码?

时间:2011-12-08 07:22:11

标签: java debugging netbeans ant

我有自己的build.xml文件,其中包含几个目标,用于编译和运行我的Java项目。以下是这一部分的相关部分:

<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>

我想要做的就是通过运行${classes.dir} debug目标,使用Netbeans在build.xml中调试已编译的代码。目前,此目标启动已编译的应用程序,但没有机会在断点处停止。我知道Netbeans会生成默认的build-impl.xml文件,但这个文件太大而且很难理解。这就是为什么我想知道是否可以使用Netbeans IDE来调试Ant使用我自己的build.xml文件编译的Java代码。

debugging Java code when using Ant script in Eclipse上也有类似的问题,但我可以看到提出的解决方案是特定于Eclipse的。

2 个答案:

答案 0 :(得分:8)

Sergey提出的方法有效,但每次调试项目时都必须执行以下操作:

  1. 调试主项目按钮(Ctrl+F5),Netbeans将等待一个debbuger附加;
  2. 选择“调试”&gt;从Netbeans主菜单“附加调试器...... ”,在出现的对话框中指定调试器参数,然后按“确定”按钮或从工具栏调试的下拉列表中选择以前使用过的debbuger按钮(例如附加到5432 );
  3. 调试您的应用程序然后关闭它(Shift+F5不会像往常一样终止应用程序,它只会完成调试会话。)
  4. 在我看来,使用“附加调试器...... ”的更好方法是选择SocketListen连接器:

    1. 执行前面步骤链中的步骤2(选择收听5432 ) - 调试器将等待应用程序启动(请注意,jvmarg的子选项{{1必须设置为server - 请参阅Remote Debugging FAQ)。
    2. 调试主项目按钮(n)。
    3. 调试您的应用程序,然后按Ctrl+F5
    4. 关闭它或通过调试会话同时终止它

      无论如何,这种方法也很不舒服,特别是如果您习惯于只需按Shift+F5或按相应的工具栏按钮即可开始调试。每次从下拉菜单中选择所需的调试器都很烦人。

      所以这是最好的解决方案 - 直接从Ant的Ctrl+F5目标启动调试器。就我而言,它看起来像这样:

      debug

      要获取更多信息,请查看Creating a Target to Debug Your Java SE Application

答案 1 :(得分:2)

Eclipse主题的建议也适合你。

  1. 使用下一个JVM参数(将它们添加到java目标调用):

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

  2. 在netbeans中使用Debug-&gt;使用端口5432附加调试器