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



我有自己的build.xml文件,由几个目标组成,用Ant编译和运行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>

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

在Eclipse中使用Ant脚本时,在调试Java代码时也存在类似的问题,但我可以看到提出的解决方案是Eclipse特有的。

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

  1. 调试主项目按钮(Ctrl+F5), Netbeans将等待调试器附加;
  2. 选择"调试 "> " 附加调试器……在Netbeans主菜单中,在出现的对话框中指定调试器的参数,然后按"OK"按钮或从工具栏调试按钮的下拉列表中选择以前使用过的调试器(例如Attach to 5432);
  3. 调试应用程序,然后关闭它(Shift+F5不会像往常一样终止应用程序,它只会完成调试会话)。

在我看来,更好的方法是使用"附加调试器…"是选择SocketListen连接器:

  1. 执行前面步骤链中的步骤2(选择Listen to 5432) -调试器将等待应用程序启动(请注意,jvmarg的子选项server必须设置为n -参见远程调试常见问题)。
  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>

要获得更多信息,请参见创建一个目标来调试Java SE应用程序

from Eclipse topic的advice也适用于您。

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

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

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

相关内容

  • 没有找到相关文章

最新更新